PoA以太私链搭建

PoA以太私链搭建,第1张

文章目录 前言一、启动PoA节点1. 下载并安装geth2. 启动节点(1)验证geth是否安装完成(2)创建账户(3)准备创世块(4)初始化创世块(5)启动节点 2.区块打包(1)节点地址(2)区块打包(3)添加验证者 总结


前言

学习记录


一、启动PoA节点 1. 下载并安装geth

根据需要下载相应版本的geth。

这里我用的是64位Windows版本,也就是图片上第三个。下载完成后,点开,在电脑上完成安装,并根据需要进行环境变量的配置。

2. 启动节点 (1)验证geth是否安装完成

win+R打开cmd窗口,输入

geth version

如果安装成功,就会出现如下显示

(2)创建账户

由于我们运用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个节点文件夹:

(3)准备创世块

这里创建基于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:

(5)启动节点

此时我们要启动四个节点:

命令如下:
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 即可。

……
于是启动了四个节点,如下所示

2.区块打包 (1)节点地址

节点启动后,会进入geth控制台,在控制台中键入admin.nodeInfo.enode会打印出节点信息。并在各个节点文件夹下,新建一个建一个static-nodes.json的文件,将各个节点信息按下图所示写入文件中:

(2)区块打包

断开各个节点(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)

总结

大概写完了

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/924902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存