前言
学习记录
一、启动PoA节点 1. 下载并安装geth
根据需要下载相应版本的geth。
这里我用的是64位Windows版本,也就是图片上第三个。下载完成后,点开,在电脑上完成安装,并根据需要进行环境变量的配置。
win+R打开cmd窗口,输入
geth version
如果安装成功,就会出现如下显示
由于我们运用PoA共识算法,先在四个节点文件夹中创建账户:
(这个 *** 作同时会建立节点文件)
geth account new --datadir node0/keystore
geth account new --datadir node1/keystore
geth account new --datadir node2/keystore
geth account new --datadir node3/keystore
输入命令后,会要求输入密码,此时输入内容不会显示,输完回车即可,一个节点的新账户建立完成,如下图所示:
完成四个节点的新账户建立,会出现4个节点文件夹:
这里创建基于PoA(活动证明)共识算法的创世块,我们首先要创建genesis.json 文件。(可以直接讲下述文本复制,打开记事本粘贴,然后重命名文件)
{
"config": {
"chainId": 12400,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"clique": {
"period": 5,
"epoch": 3000
}
},
"difficulty": "1",
"gasLimit": "8000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000e866857a657ecd01ed11157cacb5373c0093d5d1afabbf959166556bef72af10887d2a3fd7133c6cc332c083987ce8c80874c79ab8be5aa6d073ba29ea80dc20355278107e4364a59af7d5f4805ab1660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"565eDb916c178419A413977dcC18CE82A3A2d4C9": { "balance": "300000000000000000000000000" }
}
}
默认的验证者是在 extradata 中, extradata 是以64个0开头,130个0结尾,中间是验证者的地址(去除地址前的0x),将创建4个账户时,出现的账户地址依次复制粘贴到下述“validator”的位置。
> 0x000....(32bytes)000...(65bytes)
这里可以和PoW的创世块做个对比。注意chain ID(懒得说了,看PoW的那篇)
(4)初始化创世块
打开控制台,cd到 genesis.json 所在目录,键入命令
datadir node init genesis.json
这里我使用四个节点node0、node1、nede2、node3:
此时我们要启动四个节点:
命令如下:geth --datadir node0 --networkid 981027 --ipcdisable --http.port 8545 --ws.port 8546 --port 30303 console
因为节点内及节点之间要通信,就必须打开端口。
节点2可能会出现报错:Fatal: Error starting protocol stack: Access is denied.这是因为开启了2个进程,只需要在启动命令中的console前加 –ipcdisable 即可。……
于是启动了四个节点,如下所示
节点启动后,会进入geth控制台,在控制台中键入admin.nodeInfo.enode会打印出节点信息。并在各个节点文件夹下,新建一个建一个static-nodes.json的文件,将各个节点信息按下图所示写入文件中:
断开各个节点(CTRL+D),按如下命令重新启动节点,节点之间即可互通,并开始创建区块。
geth --datadir node0 --networkid 981027 --ipcdisable --miner.etherbase 0x1901300c3e828d84651c2ba9caa21db60195c2f4 --unlock 0x1901300c3e828d84651c2ba9caa21db60195c2f4 --mine --http.port 8545 --http --http.api "admin,eth,txpool,personal,web3" --ws.port 8546 --port 30303 --allow-insecure-unlock console
因为创世块中默认设置了四个验证者,需要启动三个节点挖矿,区块才会打包。
(3)添加验证者启动 node3 ,将node3加入到验证者,node3中的 eth.accounts[0]
地址为 ea80dc20355278107e4364a59af7d5f4805ab166
只要在任意一个节点的geth控制台中键入 clique.propose(0xea80dc20355278107e4364a59af7d5f4805ab166,true)
即可发起一个提议,只需默认验证中51%以上的地址投票通过, ea80dc20355278107e4364a59af7d5f4805ab166
账户即可成为新的验证者
在当前节点键入 clique.proposals
可以查看当前节点发起的提议;
投票:在其他验证者节点键入clique.propose(0xea80dc20355278107e4364a59af7d5f4805ab166,true)
大概写完了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)