最近学习以太坊私有链记录下来的笔记,与遇到一些坑爹的地方~
brew tap ethereum/ethereum
brew install ethereum
安装完成后,执行geth version查看版本信息,geth是客户端的命令。
但是,我这边卡在了brew install ethereum这一步,速度十分慢,所以这里我选择了从github上面下载ethereum的go-ethereum源码,然后自己编译的。具体步骤如下:
git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth
详细下载方法可参考ethereum的github官网
安装完成geth之后,就可以搭建私有链,搭建私有链需要有以下几点要求。
这边的创世纪文件,由于geth版本的不同,配置不太一样,在geth 1.8版本中,创世纪文件的配置如下:
{
"config": {
"chainId": 777,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "131072",
"gasLimit": "2100000",
"alloc": {
"0db459d44280be8d8999b32cc1b22228ad803fa1" : {"balance":"1000"}
}
}
geth --datadir "dir_name" init init.json
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "dir_name" --port 30303 --rpcapi "personal,db,eth,net,web3" --networkid 999 --rpcport 8080 console
上面的要求中提到了,如果私有链要联通,需要满足三个条件。这边我在自己Mac 电脑上面尝试的时候,遇到了问题,之前在看别人教学视频,他没有突出出来,如果使用admin.addPeer()添加节点时,一定要使用相同的创世文件,即要使用两次初始化命令,且使用完全相同的创世文件,否则,addPeer即使返回了true,可能节点也不会联通。
还有在不同的电脑或者服务器之间admin.addPeer()节点时,需要将如下的enode中的@与:之间的[::]换为具体的ip
> admin.nodeInfo
{
enode: "enode://d680ccaa426d51482afb61510cdae4eb8104cda7ac44472caebe96ab10a531820467fe7e5bfce1f3a125c622cd6577d115a65dfbcc3baadf3889cdf0f1fb7025@[::]:30303",
...
}