手把手教你从源代码开始搭建多节点以太坊私链(四)部署及连接多个节点

经过手把手教你从源代码开始搭建多节点以太坊私链(二)搭建第一个节点的操作,基本已经熟悉怎么去搭建好一个节点服务器了。在这个基础上, 多节点搭建并不复杂,按照下面的步骤就可以完成。

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. 加入节点信息

加入节点信息有两种方式。

  1. 通过命令行加入。
#接入geth控制台
admin.addPeer("ennode://< node public key >@[node ip address]:?discport=")

根据实际操作经验,注意要开启挖矿,不然的话节点信息不能添加成功。

  1. 通过配置文件加入。这种情况下下需要重启geth。
    在data/geth目录下,创建静态节点文件static-nodes.json,并将各个节点的node信息写入。
[
    "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

6. 节点确认

在各个节点上进行测试:

#已连接的其他节点的个数
net.peerCount
#返回其他节点的信息
admin.peers

然后从一个节点创建账户,开始挖矿,转账等各种操作,其它节点也会自动同步区块信息。

7 自己的多节点私链搭建总结

到目前为止,大家应该对以太坊私链的搭建有了比较完整的了解。连接过程中有几点需要注意:
(1)两节点要加入同一条私链,即这两个节点初始化的创世区块必须要一模一样。启动节点的时候要使用同样的networkid。也注意节点间是互通的。包括防火墙之类的问题要注意,如果端口被封肯定是无法连接上的。如果租用云服务器,要查看安全组里面相应的端口(rpc端口例如8545,节点互连端口例如30303)是否已经开放。
(2)A节点在添加B节点的enode字符串时需要手动将enode字符串中的ip地址设为B节点的IP地址。
(3)加入同一个私链之后,区块信息会完全同步,所有交易也是知道的。但是不同节点创建的账户,是互相看不到的。不过,他们的余额可以查到,转账交易也没有任何问题。

你可能感兴趣的:(以太坊)