经过手把手教你从源代码开始搭建多节点以太坊私链(二)搭建第一个节点的操作,基本已经熟悉怎么去搭建好一个节点服务器了。在这个基础上, 多节点搭建并不复杂,按照下面的步骤就可以完成。
创世区块genesis.json文件内容如下:
{
"config": {
"chainId": 100,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x00",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": { }
}
执行以下命令初始化各个节点。
geth --datadir /data/00 init genesis.json
执行以下命令启动各个节点。console参数表示启动后,启用命令行。
重要:节点编号要与创世文件中的chainId一致
#带geth命令行的方式启动
geth --networkid 100 --datadir /data/00 --rpc --rpcapi personal,db,eth,net,web3 console 2>>geth.log
#后台运行方式启动
nohup geth --networkid 100 --datadir /data/00 --rpc --rpcapi personal,db,eth,net,web3 &
#接入geth控制台
geth attach ipc:/data/00/geth.ipc
# 获取节点信息
admin.nodeInfo.enode
节点信息如下:
格式是这样的:
“ennode://< node public key >@[::]:< tcpport >?discport=< udpport >”
需要将[::]换成该节点电脑的公网IP地址。tcpport通常情况是30303,udpport通常可以设为30301,可能也可以不用。
加入节点信息有两种方式。
#接入geth控制台
admin.addPeer("ennode://< node public key >@[node ip address]:?discport=" )
根据实际操作经验,注意要开启挖矿,不然的话节点信息不能添加成功。
[
"enode://< node1 public key >@:?discport=" ,
"enode://< node2 public key >@:?discport=" ,
"enode://< node3 public key >@:?discport=" ,
]
然后启动geth
geth --networkid 100 --datadir /data/00 --rpc --rpcapi personal,db,eth,net,web3 console 2>>geth.log
在各个节点上进行测试:
#已连接的其他节点的个数
net.peerCount
#返回其他节点的信息
admin.peers
然后从一个节点创建账户,开始挖矿,转账等各种操作,其它节点也会自动同步区块信息。
到目前为止,大家应该对以太坊私链的搭建有了比较完整的了解。连接过程中有几点需要注意:
(1)两节点要加入同一条私链,即这两个节点初始化的创世区块必须要一模一样。启动节点的时候要使用同样的networkid。也注意节点间是互通的。包括防火墙之类的问题要注意,如果端口被封肯定是无法连接上的。如果租用云服务器,要查看安全组里面相应的端口(rpc端口例如8545,节点互连端口例如30303)是否已经开放。
(2)A节点在添加B节点的enode字符串时需要手动将enode字符串中的ip地址设为B节点的IP地址。
(3)加入同一个私链之后,区块信息会完全同步,所有交易也是知道的。但是不同节点创建的账户,是互相看不到的。不过,他们的余额可以查到,转账交易也没有任何问题。