区块链与加密货币  - 讨论区

标题:使用Parity部署PoA共识的Ethereum网

2018年03月29日 星期四 16:16

我认为 Ethereum 是目前实用性最高的区块链方案之一,但其目前的公链使用PoW共识,运营成本和交易手续费都很高,性能表现也一般。

Parity 是使用Rust语言编写的一个Ethereum客户端(或者叫节点程序),号称是速度最快、最安全的Ethereum实现方案。其不仅提供PoW共识机制,还内置了一种PoA共识机制,可以用很低的成本来运营一套Ethereum网络系统。

PoA机制,简单来说,就是网络内的各个节点都知道其他节点的身份,一个新的节点要想加入这个网络,必须征得现有节点的同意,才能成功加入。在PoA机制中,无需挖矿,各个节点轮流执行打包任务,和平共处,可以灵活的调整Gas Limit和打包间隔时间,效率很高。

下面介绍如何使用Parity部署一套PoA共识的Ethereum网络。

  1.  安装Parity程序

    以Ubuntu Server 16.04 64位版本操作系统为例,可以通过下面的地址下载到最新版本的Parity。  

    https://github.com/paritytech/parity/releases    

    当前最新稳定版本是  Parity 1.9.5-stable ,下载文件 :    parity_1.9.5_ubuntu_amd64.deb   

    下载完成后,通过下面的命令执行安装: 

    sudo dpkg -i parity_1.9.5_ubuntu_amd64.deb 

  2. 创建工作目录

    我们要在一台机器上运行两个Parity节点,所以要创建两个工作目录,分别是 /root/parity/0 和 /root/parity/1 。

    如果没有特别说明,下面的所有命令都在/root/parity目录下执行。

  3. 创建Chain配置文件:

    Chain文件用于定义Chain相关的参数,包括PoA节点的地址,以及预存ETH账户的地址等。此文件比较复杂,就不再这里贴了,我做了一个模版,大家可以从下面的地址下载: http://learndevops.cn/sth/parity/spec.json ,然后将此文件保存到 /root/parity目录下。

  4. 创建节点运行配置文件

    节点运行配置文件主要包括Parity程序运行的参数,包括rpc端口,签名地址等。此文件可以从下面地址下载:

    http://learndevops.cn/sth/parity/node0.toml

    http://learndevops.cn/sth/parity/node1.toml

    将两个文件保存到 /root/parity目录下。

  5. 创建帐号

    每个节点需要一个签名帐号(用于唯一标识这个节点,对交易进行打包签名),另外我们还需要一个用户帐号,此帐号可以在初始(genesis)阶段存入一定数量的ETH。

    首先需要创建一个密码文件,为了方便,我们后面创建的3个帐号统一使用一个密码文件,密码可以是任意字符串,将其写入到 /root/parity/pwd 文件中。示例: 

    echo 123qwe >  /root/parity/pwd

    接下来生成节点0的签名帐号:  

    parity --config node0.toml account new

    记下此帐号的地址备用,在本文的示例中,我得到的地址是:0x95251ebbf9232e4ea8e74688caef28eb1972de61  

    然后生成节点1的签名帐号:

    parity --config node1.toml account new

    记下此帐号的地址备用,在本文的示例中,我得到的地址是:0xb0a80f3cd90b14bf6bfa383372d089be56b7a551 

    最后生成一个用户帐号,用于预存ETH:

    parity --config node0.toml account new

    在本文的示例中,我得到的地址是:0x7631bd1f4d3c117286291fc4ad3deee6ded7c518

  6. 替换配置文件中的帐号地址

    首先需要将spec.json文件中的 validators list 的地址替换为上面第5步生成的两个签名帐号地址,并将最下面的一个accounts地址替换为上面第5步生成的用户帐号地址。

    然后替换node0.toml文件中的engine_signer地址为上面第5步生成的节点0的签名帐号地址。

    最后替换node1.toml文件中的engine_signer地址为上面第5步生成的节点1的签名帐号地址。

  7. 启动两个节点

    打开两个终端,切换到/root/parity目录,然后分别运行下面的启动命令:

    parity --config node0.toml

    parity --config node1.toml

  8. 让两个节点形成集群网络

    在第7步启动node0后,会在终端看到一个 Public node URL , 在本示例中,我得到的URL是: enode://6f5922cbbc07eb4e57fac06ed369a3577b877e943f6ee8c97535c7762e024c6fcf009914ec606c60eb3a2fccfddf7b919f37462ebec4367d4327e9e8ccdcdeac@172.16.180.168:30300 。我们使用此地址,让node1与node0形成集群网络,命令如下(注意替换红色字体部分):

    curl --data '{"jsonrpc":"2.0","method":"parity_addReservedPeer","params":["enode://6f5922cbbc07eb4e57fac06ed369a3577b877e943f6ee8c97535c7762e024c6fcf009914ec606c60eb3a2fccfddf7b919f37462ebec4367d4327e9e8ccdcdeac@172.16.180.168:30300"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8541

    上面的命令如果执行成功,会返回:

    {"jsonrpc":"2.0","result":true,"id":0}

    然后在node0和node1的终端中,就可以看到  1/25 peers 的输出。

  9. 通过web访问Parity的控制台和钱包

    Parity内置了web形式的控制台和钱包,为了确保安全,默认只能通过本机访问,地址是 : http://localhost:8180 。

至此我们就完成了一套两个节点的基于Parity的PoA共识的Ethereum网络部署过程。

更多关于Parity的文档可以参考:

https://www.parity.io/

https://wiki.parity.io/

有任何技术问题,欢迎留言讨论。

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2019

    京ICP备05028076号