以太坊(二)私有链多节点搭建

以太坊搭建多节点和单个节点的思路是一样的,先启动各个单节点,然后通过节点发现的方式将多个节点连接起来,
实现对多个节点的数据同步和后续操作;

我们以搭建两个节点并组成一个私有链网络,将两个节点分别称为node1和node2;

1 创建节点目录

1
2
3
4
# 创建两个节点目录
cd private-chain
mkdir node1
mkdir node2

2 分别初始化节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"config": {
"chainId": 123,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x2",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
1
2
3
# 初始化节点
geth --datadir ./node1/data init genesis.json // 初始化node1节点
geth --datadir ./node2/data init genesis.json // 初始化node2节点

3 启动节点

1
2
3
4
5
6
7
8
9
10
11
# node1_start.sh

#!/bin/bash
geth --datadir ./node1/data --networkid 8888 --nodiscover \
--port 30303 \
--http.port 8545 \
--http --http.addr 0.0.0.0 --http.vhosts "*" \
--http.api "db,net,eth,web3,personal,debug" \
--http.corsdomain "*" \
--rpc.enabledeprecatedpersonal \
--snapshot --allow-insecure-unlock console 2>> geth.log
1
2
3
4
5
6
7
8
9
10
11
# node2_start.sh

#!/bin/bash
geth --datadir ./node2/data --networkid 8888 --nodiscover --authrpc.port 8552 \
--port 30304 \
--http.port 8546 \
--http --http.addr 0.0.0.0 --http.vhosts "*" \
--http.api "db,net,eth,web3,personal,debug" \
--http.corsdomain "*" \
--rpc.enabledeprecatedpersonal \
--snapshot --allow-insecure-unlock console 2>> geth.log

4 查看节点信息

1
2
3
4

# 在node2节点窗口查看节点信息
> admin.nodeInfo.enode
"enode://2f08c93824c4b68f8755867db1582281f7ba233b623f9fe4088204cabb3256d3977d318d6b9eda38d18a7c410cb747b869ab95c9bbdcd3343af75c7e786f12dd@127.0.0.1:30304?discport=0"

5 手动添加节点

1
2
3
4
5
6
7
# 在node1节点窗口添加节点2
> admin.addPeer("enode://2f08c93824c4b68f8755867db1582281f7ba233b623f9fe4088204cabb3256d3977d318d6b9eda38d18a7c410cb747b869ab95c9bbdcd3343af75c7e786f12dd@127.0.0.1:30304?discport=0")
true

# 查看当前一共连接了几个节点数
> web3.net.peerCount
1