关于在是在私有链中,用一台电脑去创建多个节点,并进行节点链接
这里分享的是关于在是在私有链中,用一台电脑去创建多个节点,并进行节点链接
1. 准备创世块文件
自己创建一个创世块文件或是称为根节点是为了区分公有链和私有链。同一个网络下只有一个创世块,而且只有处于相同的创世块才可以正常进行通信。创世块文件是一个json文件。格式如下:
1
2
3
4
5
6
7
8
9
10
11
|
{ "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { } } |
其中:
nonce: 64位随机数,用于合格区块的判断
timestamp:创世块的时间戳
parentHash: 上一个节点的hash值,由于是创世块,为第一个节点,所以他不存在parent节点
extraData:附加信息,可以加入个性信息等
gasLimit: gas消耗总量限制,限制区块能包含的交易信息总和
difficulty: 区块难度,如果这个值设置的越大,挖矿就越难
mixhash:与nonce配合使用,用于挖矿
coinbase:矿工的账号信息
alloc:用于预置账号和账号的以太币数量
首先,创建一个genesis.json 文件。然后把上面的内容复制,根据自己的需求修改相应的参数。
cd到这个json所在的目录,运行:
1
|
geth --datadir "node1/" init genesis.json |
运行之后,会在该目录下生成一个node1的文件夹,同时在node1文件夹下生成geth 和 keystore两个文件夹。keystore里存放的就是你后续创建账号的信息
2. 启动节点
初始化节点后,需要启动这个节点。
geth --identity "node1" --rpc --rpcport 8000 --rpccorsdomain "*" --datadir "./" --port 30303 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>geth.log
这里就启动了改节点,默认的启动端口是 30303.启动之后,输入admin.nodeInfo 查看节点信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{ enode: "enode://2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a@[::]:30303?discport=0", id: "2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a", ip: "::", listenAddr: "[::]:30303", name: "Geth/v1.5.9-stable-a07539fb/darwin/go1.8", ports: { discovery: 0, listener: 30303 }, protocols: { eth: { difficulty: 1, genesis: "0x6099b65e564bd511f49e8f39ba27b6a68b6b78fd1481592257f06bbf93abe624", head: "0x6099b65e564bd511f49e8f39ba27b6a68b6b78fd1481592257f06bbf93abe624", network: 1 } } } |
enode里就是节点的address
3. 创建第二个节点
单独的一个节点,是可以创建不同的账号的,之后可以用不同的账号进行交易。如果要实现多个节点,那就需要再重新创建节点。
1) cd 到 genesis.json 目录下
2) 运行 同样的初始化命令
1
|
geth --datadir "node2/" init genesis.json |
3) 用下面的命令启动第二个节点
geth --identity "node2" --rpc --rpcport 8001 --rpccorsdomain "*" --datadir "./" --port 30306 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>geth.log
rpc端口和节点端口都要和第一个节点不同,节点端口默认的port是 30303,rpc端口默认为8545,如果node2节点的rpc端口或是节点端口采样默认值,就会出现端口被第一个占用的情况。
4. 把两个节点连接起来
通过admin.addPeer(“节点的enode”)添加。如上面第一个节点和第二个节点连接
1
|
admin.addPeer("enode://2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a@[::]:30303?discport=0") |
控制台会返回一个true
这个时候,随便在哪个节点的控制台上,输入 admin.peers 就可以查看链信息了
5.验证是否连接成功
随便在哪个节点上进行挖矿操作,看另外一个节点是否会同步信息。比如我这里再第一个节点上进行挖矿操作。注意:要进行挖矿一定要先有账号。我们上面提到的所有的操作都只是节点操作,没有涉及到账号的操作。
首先用命令创建一个账号:
1
|
personal.newAccount("xxx") |
xxx是表示该账号的密码,后面再进行交易的时候需要用到。
创建账号后,就可以进行挖矿处理了。
1
|
miner.start() |
在挖矿的过程中如何查看是否有进行同步操作呢?
在第一个挖矿的期间,cd到第二个节点目录下,执行
1
|
tail -f geth.log |
在控制台上你如果看到block信息不断的更新,那就说明连接成功了。
注意:这里的创世块文件一定要用同一个,否则addPeer虽然返回成功,但是admin.peers查看是没有的。