以太坊私链搭建(多台电脑节点群){admin与bootnode两种方法}

1.admin方法

首先搭建以太坊私链
创建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信息
在这里插入图片描述这可以看做是一个节点的标识符,其他节点通过该标识符连接到该节点。

然后,在另一个终端中输入
在这里插入图片描述返回true

此时正常来说已经连接起来,通过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

在这里插入图片描述
上图中就是172.17.151.129

完成!!!

2.bootnode方法

预备工作:
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 

输出结果如下:
以太坊私链搭建(多台电脑节点群){admin与bootnode两种方法}_第1张图片
此时,bootnode已启动!

再开启另一/多个终端,开始将其他节点连接上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

你可能感兴趣的:(区块链,以太坊,以太坊搭建)