广州做网站找哪个公司好,怎么从网上找客户,北京建工招标平台,代运网站第一步#xff1a;相关软件的安装
go-ethereum客户端安装Go-ethereum客户端通常被称为Geth#xff0c;它是个命令行界面#xff0c;执行在Go上实现的完整以太坊节点。Geth得益于Go语言的多平台特性#xff0c;支持在多个平台上使用(比如Windows、Linux、Mac)。Geth是以太坊…第一步相关软件的安装
go-ethereum客户端安装Go-ethereum客户端通常被称为Geth它是个命令行界面执行在Go上实现的完整以太坊节点。Geth得益于Go语言的多平台特性支持在多个平台上使用(比如Windows、Linux、Mac)。Geth是以太坊协议的具体落地实现通过Geth你可以实现以太坊的各种功能如账户的新建编辑删除开启挖矿ether币的转移智能合约的部署和执行等等。
Geth可以使用下面三种JSON RPC协议进行连接
内部进程通信IPC内部通讯通常用于一台电脑内。远程程序调用RCP跨计算机的通讯。通常使用TCP和HTTP协议。WSWeb sockets使用sockets连接Geth。
chain ID含义
chain ID1 主网公链chain ID2 Morden网络仅对部分人开放chain ID3 Ropsten网络chain ID4 Rinkeby网络chain ID 大于4的是私有网络使用Geth --testnet连接到Ropsten网络Geth --rinkeby连接到Rinkeby网络。
安装
brew tap ethereum/ethereum
brew install ethereum
也可以使用源码安装的方式以太坊github地址首先从github上下载以太坊的go-ethereum压缩包zip或者单纯使用命令行代码代码如下
git clone https://github.com/ethereum/go-ethereum.git 如果是zip格式的需要解压再执行命令如果使用命令行直接执行命令
cd go-ethereum
make geth
如果有问题
cd到以太坊到目录里面后make geth出现错误vi env.sh 查看文件属性按下esc同时按shift和输入冒号之后输入set ff显示文件的编码格式如果是dos则是支持windows的不支持linux需要将其改为支持linux的系统格式输入set ffunix保存退出再次运行make geth
默认安装地址
/usr/local/Cellar/ethereum/版本
我的显示界面 检查是否安装成功输入如下的命令
geth --help 出现如下的界面即为安装成功使用命令查看 版本号以及相关信息
geth version 第二步搭建私有链
以太坊支持自定义创世区块要运行私有链我们就需要定义自己的创世区块创世区块信息写在一个json格式的配置文件中。首先将下面的内容保存到一个json文件中一般以genesis.json进行命名。前提操作命令如下
mkdir myeth
cd myeth
vi genesis.jsonjson文件内容如下:直接复制即可。
{config: {chainId: 666999, homesteadBlock: 0,eip150Block: 0,eip155Block: 0,eip158Block: 0},alloc : {},coinbase : 0x0000000000000000000000000000000000000000,difficulty : 0x20000,extraData : ,gasLimit : 0x2fefd8,nonce : 0x0000000000000042,mixhash : 0x0000000000000000000000000000000000000000000000000000000000000000,parentHash : 0x0000000000000000000000000000000000000000000000000000000000000000,timestamp : 0x00
} 对于上面参数的解释 注意事项我参考好多文章都缺失eip150Block:0这一句这会出现错误。报错情况为Failed to wirte genesis block:unsupported ordering网络初始化
输入geth init命令、genesis.json文件、存储区块数据和keystore的文件夹进行初始化。
geth init /Users/chy/Desktop/myeth/genesis.json --datadir /Users/chy/Desktop/myeth/chaindata创世区块已经产生了Geth节点可以启动了。Geth启动时默认使用IPC协议为了确保Geth节点可以通过PRC协议访问命令中需要带上RPC参数 命令操作如下搭建节点运行的环境
geth --datadir /Users/chy/Desktop/myeth/chaindata --rpc --rpcapi eth,web3,miner,admin,personal,net --rpccorsdomain * --nodiscover --networkid 666999 –allow-insecure-unlock
对于命令的讲解–datadir指定区块链数据的存储位置这个需要大家根据实际的情况进行调整进行自己路径的替换–rpc表示开启 HTTP-RPC 服务–rpcapi “eth,web3,miner,admin,personal,net” 这个命令指示了允许通过RPC访问的命令。默认情况下Geth允许web3。–nodiscover关闭节点发现机制防止加入有同样初始配置的陌生节点–identity指定节点 ID方便在一大群节点中识别出自己的节点–rpcport指定 HTTP-RPC 服务监听端口号默认为 8545–rpcaddr指定IP地址–port指定和其他节点连接所用的端口号默认为 30303–maxpeers 0 如果你不想有人连上你的测试链就用maxpeers 0。或者你可以调整参数当你确切的知道有几个节点要连接上来的时候。使用不使用命令–allow-insecure-unlock在解锁的时候就会报错Error: account unlock with HTTP access is forbidden原来是出于安全考虑默认禁止了HTTP通道解锁账户相关问题参考执行完上面的命令又发现报错Fatal: Error starting protocol stack: datadir already used by another process这个问题是因为需要强制关闭正在运行的geth进程。 命令如下54148为geth进程的ID号 再次加上参数–allow-insecure-unlock重新启动私有链。现在执行解锁账户命令即可成功了。 geth相关命令
geth --datadir /Users/chy/Desktop/myeth/chaindata --rpc --rpcapi eth,web3,miner,admin,personal,net --rpccorsdomain * --nodiscover --networkid 666999 --allow-insecure-unlockps aux | grep geth
kill -9 54148enode的信息是节点在网络上的身份标志。如果其他节点准备加入这个网络中就需要提供自己的enode值。RPC访问可以通过http://127.0.0.1:8545或http://localhost:8545IPC访问可以通过**\.\pipe\geth.ipc**命令。命令是以服务的形式持续运行的需要再打开一个命令行窗口但是原先的窗口不可以关闭。输入命令如下
geth attach rpc:http://localhost:8545也可以在启动的时候加入console启动一个端口(简单的例子)或者是第二次启动时候输入如下命令注意这里 . 代表当前的文件夹也就是上文指定的/Users/chy/Desktop/myeth/chaindata否则相关命令无法操作虽然不报错但是得不到预期的结果。
geth --datadir . --networkid 666999 console
可以将输出的Info信息重定向到 output.log 文件里面,2是指Linux里面的shelloutput.log会存储到当前的文件夹
geth --datadir . --networkid 666999 console 2output.log使用命令如下所示时时跟踪输出日志的变化
tail -f output.log注意如果gath的版本较低那么重新启动区块链的时候数据丢失 出现如下页面进入控制页面。使用IPC协议连接到节点上这样即可执行其他命令。交互式执行环境
这是一个交互式的 JavaScript 执行环境在这里面可以执行 JavaScript 代码其中 是命令提示符。在这个环境里也内置了一些用来操作以太坊的 JavaScript 对象可以直接使用这些对象。这些对象主要包括eth包含一些跟操作区块链相关的方法net包含一些查看p2p网络状态的方法admin包含一些与管理节点相关的方法miner包含启动和停止挖矿的一些方法personal主要包含一些管理账户的方法txpool包含一些查看交易内存池的方法web3包含了以上对象还包含一些单位换算的方法。
常用命令
personal.newAccount()创建账户personal.unlockAccount()解锁账户eth.accounts枚举系统中的账户eth.getBalance()查看账户余额返回值的单位是 WeiWei 是以太坊中最小货币面额单位类似比特币中的聪1 ether 10^18 Weieth.blockNumber列出区块总数eth.getTransaction()获取交易eth.getBlock()获取区块miner.start()开始挖矿miner.stop()停止挖矿web3.fromWei()Wei 换算成以太币web3.toWei()以太币换算成 Weitxpool.status交易池中的状态admin.addPeer()连接到其他节点
第三步设置账户
连接到Geth节点后接下来需要设置coinbase或etherbase账户。创建账户可以使用personal对象的newAccout方法并设置密码密码不可见。命令如下。
personal.newAccount()如果需要更改原有的coinbase账户地址可以通过address.miner对象的setEtherBase函数进行操作。这个操作将使用新的账户替换原有的coinbase账户。命令如下
miner.setEtherbase(0x19b4029dad20824db6dc201437f9cac2a7e1fc5c)执行查询命令可看到设置的地址已经生效了。此时挖矿可以启动了。由于只有一个矿工将获得全部的挖矿奖励coinbase账户的以太币会逐步增加。
eth.coinbase同样方法再创建一个账户查看当前的用户
eth.accounts代码执行如下第四步开始挖矿
start中的参数代表了用于挖矿的线程数量。命令如下
miner.start(8)这时切换到之前创建私有链的命令行窗口中可以看到挖矿过程的输出结果。这里是指我们当时创建的第一个窗口。 如果是第一次挖矿需要生成DAG相关文件这个需要花费一定的时间。第二次以后就不需要了。 因为我是第二次挖矿所以没有上面文件。当使用输入日志的方式时可以输入命令tail -f geth.log 来跟踪挖矿进度查看正在挖矿的账户0已经获得的以太币和未挖矿的账户1的以太币余额。查看钱包的余额命令如下将0改为1即可查看第二个账户的余额。
eth.getBalance(eth.accounts[0])
执行情况如下挖到一个区块会奖励5个以太币挖矿所得的奖励会进入矿工的账户这个账户叫做coinbase默认情况下coinbase是本地账户中的第一个账户。 getBalance()返回值的单位是weiwei是以太币的最小单位1个以太币10的18次方个wei。要查看有多少个以太币可以用web3.fromWei()将返回值换算成以太币 停止挖矿命令如下
miner.stop()整体操作布局左边动态监视用户的输入右边窗口为以太坊 Javascript Console。页面布局如下第五步进行交易
我们要从账户0到账户1转账需要先解锁账户才能转账否则会报错。解锁命令如下
personal.unlockAccount(eth.accounts[0])发起交易由账户0转账200以太币到账户1命令如下
personal.unlockAccount(eth.accounts[0])
amount web3.toWei(200,ether)
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})此时交易已经提交到区块链返回了交易的hash但还未被处理本地交易池中有一个待确认的交易可以使用 eth.getBlock(“pending”, true).transactions 查看当前待确认交易。
eth.getBlock(pending, true).transactions要使交易被处理必须要挖矿。这里我们启动挖矿然后等待挖到一个区块之后就停止挖矿。命令如下
miner.start(1);admin.sleepBlocks(1);miner.stop();
web3.fromWei(eth.getBalance(eth.accounts[1]),ether)此时交易已经生效账户1应该已经收到了200个以太币了。
参考文档
给自己的小提示
account[0]的密码是123456