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