首先搭建以太坊私链
创建json文件,初始化创世区块
genesis.json:
{
"config": {
"chainId": 123
},
"gasLimit": "0x8000000",
"difficulty": "0x2000",
"alloc":
{
"0x640CcA3baDE7c789306166cb47d1049740e99C28":{
"balance":"10000000000000000000"}
}
}
然后输入初始化命令
geth --datadir ./node0 init genesis.json
启动私链
geth --datadir ./node0 --networkid 123 --allow-insecure-unlock --ipcdisable --port 30304 --rpc --rpcport 8546 console 2>node0.log
networkid与json文件中的chainid保持一致
第一个节点已启动
第二个节点:(在一个新的终端中启动)
初始化,在不同的文件夹进行初始化,使用相同的genesis.json文件
geth --datadir ./node1 init genesis.json
启动geth
geth --datadir ./node1 --networkid 123 --allow-insecure-unlock --ipcdisable --port 30305 --rpc --rpcport 8547 console 2>node1.log
–port和–rpcport 8547与第一个节点保持不同
此时我们已经启动了两个节点
连接它们!
在其中一个终端中输入
admin.nodeInfo.enode
得到enode信息
这可以看做是一个节点的标识符,其他节点通过该标识符连接到该节点。
此时正常来说已经连接起来,通过admin.peers
可以看到所连接节点的信息,通过net或net.peerCount可以看到连接到的节点的数量。
一方添加另一方自动添加。
后续可以启动挖矿,查看区块数量是否同步更新以验证连接。
如果希望连接第三个节点
使用相同的genesis.json,在不同的文件夹中进行初始化,例如
geth --datadir ./node2 init genesis.json
启动节点时用不同的端口,例如
geth --datadir ./node2 --networkid 123 --allow-insecure-unlock --ipcdisable --port 30306 --rpc --rpcport 8548 console 2>node2.log
随后,该节点分别通过admin.addPeer()添加刚才两个节点,两个都要添加才可将三个节点连接在一起。
使用不同的电脑连接只需要保证genesis.json文件相同,所有电脑使用同一个无线网(方便,避免去调整ip),所有节点使用相同的networkid和不同的port、rpcport。
如果admin.addPeer()添加后net.peerCount仍为0,先检查下ip是不是一样的,通过admin.nodeInfo.enode命令看每个节点的ip
完成!!!
预备工作:
https://github.com/ethereum/go-ethereum.git
首先,通过以下命令安装geth
git clone https://github.com/ethereum/go-ethereum.git
如果安装不了,尝试命令
git clone git://github.com/ethereum/go-ethereum.git
下载完成后,进入go-ethereum文件夹,执行命令
make all
make geth
随后测试bootnode和geth是否可用,可添加环境变量以简化命令。
环境搭建好后正式开始!
bootnode方法搭建以太坊私链节点集群:
开始搭建之前首先需要了解一个概念,bootnode方法实际上就是创建一个“中心节点”(bootnode),其他所有节点连接在这个“中心节点”上,进而实现其他节点之间的互联。
该方法前面一部分与admin方法一样,首先创建genesis.json文件,随后在不同文件夹中进行初始化,此处不再赘述,和上面操作一样。
初始化完成!
启动一个终端,创建上述的“中心节点”,具体操作如下:
输入命令:
bootnode -genkey myboot.key #该命令创建一个key保存在myboot.key文件中。
随后,启动bootnode
输入命令:
bootnode -nodekey myboot.key
再开启另一/多个终端,开始将其他节点连接上bootnode。
此时,应该已经在前面完成初始化工作,如果没有现在完成初始化工作,命令如下
geth --dirdata ./node6 init genesis.json
初始化要注意文件夹要保持不同!
启动geth,在命令中加入–bootnodes参数,例子如下
geth --datadir ./node2 --port 30305 --rpc --rpcport 8547 --networkid 456719 --bootnodes "enode://173fc6f63560ec45e3916e0545648acf06172b7246ef78aae206bda975b3e99fda2a9c2becaf29f1973849f134e9af1b3b654ba6eeb3b7c475c80db0fbc592ad@127.0.0.1:0?discport=30301" console
其中,–bootnodes参数就是bootnode节点的enode参数,直接复制就可以。
port、rpcport要保持不同
启动一个节点后,同样操作(初始化、启动)再启动一个节点,此时你就会看到这两个节点连接起来了。
之后可以多启动几个节点做尝试,启动时的–bootnodes参数都使用bootnode的enode参数。
到此,本篇文章的工作已经结束!
最后,附上一个bootnode方法的视频网址,不想看文字的小伙伴可以看视频学习。
https://v.youku.com/v_show/id_XMzgwNzY5MzI2NA==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle