以太坊研究:ETH基于POA的环境搭建

尚力财经 317 0

很多同学都有学习POA的想法,所以今天我们试着在以太坊创造一个基于POA的环境。一、设置环境前的准备:

1。安装go-ethereum,下载go

1gitclonehttps://github.com/ethereum/go-ethereum

2的源代码。编译Go

123 cdgo-以太坊make geth

3。创建四个文件夹

。执行后,在bin目录下会生成可执行文件geth。名为node 1 . node 2 . signer 1 . signer 2 . Nodes的节点是普通节点,用于后期发起节点间的事务。在接下来的实验中,signer1被设置为创世块指定的授权节点;Signer2是后期加入信任列表的授权节点,目录如下:

123root @ test # lsgeth,node1,node2,signer1,signer2

4。为私链建立一个新账户,将启动的数据存放在不同的文件夹中。

1。/geth-datadirnode 1/data account new[X][X][X]到目前为止我们有四个帐号,这四个帐号分别是[X]1234567 node 1:93 ab 57 B1 C1 AE 82537 d6c 7956d 2817916166 f 6389 node 2:C2 fdb 2 dffa 3a 14740 E3 D8 B3 baeee a504 a 699229 Signer 1:7d 848 a 70962 ad 3830 c 59 ad 3初始化创建块

以太坊研究:ETH基于POA的环境搭建-第1张图片-欧交易所以太坊1.6以后提供了初始化创建块的工具:puppeth,请选择包含Geth工具的版本下载,如下图红色图标所示。下载地址:https://geth.ethereum.org/downloads/?或者你可以根据上面的内容自己编译。

puppeth是一个交互程序,直接启动,根据指令输入相关信息。设置私有链名,假设poa_test,如下:

以太坊研究:ETH基于POA的环境搭建-第2张图片-欧交易所 6。指定每30秒生成一个块

我们指定了第一个签名者1。这个用户曾经挖掘,并指定node1和signer1开始用余额填充。

以太坊研究:ETH基于POA的环境搭建-第3张图片-欧交易所

7。导出生成的初始块,如下所示

8。导出的配置文件如下:以太坊研究:ETH基于POA的环境搭建-第4张图片-欧交易所

9。创建块123456789101111213141516171819202122324252627282930313233343363738394142434445464748495051525354555657585960616263 { '配置' {://本节列出部分内容,其余从00到FF ' 0000000000000000000000000000000000 FF ':{ ' balance ':'0x 1 ' },' 7d 848 a 70962 ad 3830 c 59 ad 35 c 6811 B1 fc 3d 07360 ':{ ' balance ':'0x 2000000000000000000请注意,his和nonce设置需要满足4.3.4章中描述的条件。块头有效性,以太坊黄皮书(44)。noncenonce是用于挖掘的64位随机数。注意him和mixhash的设置需要满足4.3.4章描述的条件。以太坊的块头有效性(44)。 |难度设置当前区块的难度。如果太难,cpu就很难挖掘。在这里,设置难度较小|alloc用于预设账号以及账号的以太坊数量。因为私链挖掘比较容易,所以不需要用硬币预置账号,需要的时候自己创建就可以了。|coinbase miner的账号,只需填写|timestamp来设置创建块的时间戳|上一个块的hash值| parentHash。因为它是一个创建块,所以这个值是0 |extraData附加信息。在POA mining |GASLimit中,该值设置天然气总消耗量的限制,用于限制一个区块可以包含的总交易信息。因为我们是私链,所以填的是最大值。|

10。初始化私有链以太坊研究:ETH基于POA的环境搭建-第5张图片-欧交易所

使用getinit指令分别初始化四个节点的datadir。例如,初始化node1是可执行的:

1。/geth-datadirnode 1/data init poa _ test . JSON

以太坊研究:ETH基于POA的环境搭建-第6张图片-欧交易所

初始化完成后,

其中geth用于存储区块链的数据信息,keystore用于存储账户信息,启动节点,分别执行以下命令:

1234567。/geth-datadirnode 1/data-networkid 66300-port 3000 console。/geth-datadirnode 2/data-network id 66300-端口3001控制台。/geth-datadir signer 1/data-network id 66300-port 3002-解锁7d 848 a 70962 ad 3830 c 59 ad 35 c 6811 B1 fc 3d 07360控制台。/geth-Data dir signer 2/Data-Network ID 66300-Port 3003 Console[X]11。设置数据目录

datadir前面的步骤已经在每个节点各自的目录下设置了数据目录,并且networkid geths必须都使用相同的值才能相互通信。比如实验中,66300的时候。Portgeths互相通信,一个被监控的端口,因为四个节点都在本地计算机上,必须在这里指定不同的值,用node1对应3000,node2对应3001,signer1对应3002。Signer2对应3003。

geth参数有如下含义:

标识以太坊研究:ETH基于POA的环境搭建-第7张图片-欧交易所标识区块链,随便填。它用于指示当前网络的名称。init指定创建块文件的位置并创建初始块|datadir设置当前区块链网络数据存储的位置|port网络侦听端口|rpc启动rpc通信,可以部署和调试智能合约|rpcapi设置允许连接的rpc的客户端,一般为db、eth、net、web3 |networkid设置当前区块链的网络id,用于区分不同的网络。它是一个数字|控制台启动命令行模式,可以执行Geth |

12中的命令。成功启动后截图如下

因为signer1是一个挖掘节点,

以太坊研究:ETH基于POA的环境搭建-第8张图片-欧交易所

13。节点建立前的通信

目前虽然已经启动了各个节点,但是各个节点仍然处于隔离状态。节点启动后无法互相通信,所以geth必须先设置enode://@:要连接到另一个节点,复制它启动node1时刚出现的enode信息,用127.0.0.1替换[:],其他节点才能加入。如上面提示的红色提示所示,node1的enode为

1 尚力财经小编2022 enode://720d 04 c 0 fcf 239 fa 773493 e 85d 3393 ef3 a2 ce 581858 cbaf 1756288 C2 decc 8 f 08 c 738 fab BD 6 B4 c 79 fa 30029275601714522 fcf 4 febe 3 f 6f 224 ea 119 eaac 41 f 72 @ 1212开始挖掘

根据实验的设计,signer1是这个实验中的挖掘节点。让我们开始模拟采矿。在signer1的控制台界面,输入miner.start(),geth就会开始挖掘。在signer1的控制台中,将出现挖掘消息。

从上面可以看出,挖矿的时间间隔为30秒,与我们的造块参数一致。同时,其他节点(节点1和节点2以及签名者2)将接收到导入阻塞的信息。如下:

尚力财经小编2022以太坊研究:ETH基于POA的环境搭建-第9张图片-欧交易所

15。交易转账

根据我们的预设,node1和signer1上已经初始化了余额。 我做如下查询:

但是当前账号是锁定的,所以首先我们要解锁。以太坊研究:ETH基于POA的环境搭建-第10张图片-欧交易所

解锁的命令如下:以太坊研究:ETH基于POA的环境搭建-第11张图片-欧交易所 1personal.unlock账号('0x 93 ab 57 B1 C1 AE 82537 d6c 7956d 2817916166 f 6389 ')

查看node2账号余额,显示如下:

至此,POA私链的内容全部建立完毕。以太坊研究:ETH基于POA的环境搭建-第12张图片-欧交易所

17。添加一个新的可信节点

根据实验前的设计,signer2也是一个挖掘节点。如果此时开始挖掘signer2节点,会出现未授权的异常,如下图:

以太坊研究:ETH基于POA的环境搭建-第13张图片-欧交易所

18。节点授权

在signer1的控制台中输入命令

以太坊研究:ETH基于POA的环境搭建-第14张图片-欧交易所

。此时signer1的挖掘节点的日志已经更改,已经签名,正在等待其他签名者。

以太坊研究:ETH基于POA的环境搭建-第15张图片-欧交易所

19。重启

此时需要重启signer2

1。/geth-datadirsigner 2/Data-Network ID 66300-Port 3003-Unlock f 5413187 e 29113841 db 0 EC 73A 2C 59 a53b 6be 7 Fe控制台[X]要建立连接,请使用admin.addPeer()重新建立连接[X]1 admin . add peer(' e node://0 D2 d75b 5 e 6 FD 5a 7 e 3 f 82 da 82 e 49 B4 f 74206 c 136 a 241 b 04 a2 f开始signer2开始挖掘以太坊研究:ETH基于POA的环境搭建-第16张图片-欧交易所

你可以看到signer1和signer 2在交替挖掘。

以太坊研究:ETH基于POA的环境搭建-第17张图片-欧交易所

40:36,singner1,挖了个合适的块,签了,马上播。与此同时,西格ner2 获取到了最新的区块段,签名后并提交到网络中。singner1 在收到签名后进行打包,合并到区块中,并广播最新的消息。

至此,环境搭建全部完成。以太坊研究:ETH基于POA的环境搭建-第18张图片-欧交易所

感谢HPB团队整理。

标签: admin do

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!