2018年03月29日 星期四 16:16
我认为 Ethereum 是目前实用性最高的区块链方案之一,但其目前的公链使用PoW共识,运营成本和交易手续费都很高,性能表现也一般。
Parity 是使用Rust语言编写的一个Ethereum客户端(或者叫节点程序),号称是速度最快、最安全的Ethereum实现方案。其不仅提供PoW共识机制,还内置了一种PoA共识机制,可以用很低的成本来运营一套Ethereum网络系统。
PoA机制,简单来说,就是网络内的各个节点都知道其他节点的身份,一个新的节点要想加入这个网络,必须征得现有节点的同意,才能成功加入。在PoA机制中,无需挖矿,各个节点轮流执行打包任务,和平共处,可以灵活的调整Gas Limit和打包间隔时间,效率很高。
下面介绍如何使用Parity部署一套PoA共识的Ethereum网络。
安装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
创建工作目录
我们要在一台机器上运行两个Parity节点,所以要创建两个工作目录,分别是 /root/parity/0 和 /root/parity/1 。
如果没有特别说明,下面的所有命令都在/root/parity目录下执行。
创建Chain配置文件:
Chain文件用于定义Chain相关的参数,包括PoA节点的地址,以及预存ETH账户的地址等。此文件比较复杂,就不再这里贴了,我做了一个模版,大家可以从下面的地址下载: http://learndevops.cn/sth/parity/spec.json ,然后将此文件保存到 /root/parity目录下。
创建节点运行配置文件
节点运行配置文件主要包括Parity程序运行的参数,包括rpc端口,签名地址等。此文件可以从下面地址下载:
http://learndevops.cn/sth/parity/node0.toml
http://learndevops.cn/sth/parity/node1.toml
将两个文件保存到 /root/parity目录下。
创建帐号
每个节点需要一个签名帐号(用于唯一标识这个节点,对交易进行打包签名),另外我们还需要一个用户帐号,此帐号可以在初始(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
替换配置文件中的帐号地址
首先需要将spec.json文件中的 validators list 的地址替换为上面第5步生成的两个签名帐号地址,并将最下面的一个accounts地址替换为上面第5步生成的用户帐号地址。
然后替换node0.toml文件中的engine_signer地址为上面第5步生成的节点0的签名帐号地址。
最后替换node1.toml文件中的engine_signer地址为上面第5步生成的节点1的签名帐号地址。
启动两个节点
打开两个终端,切换到/root/parity目录,然后分别运行下面的启动命令:
parity --config node0.toml
parity --config node1.toml
让两个节点形成集群网络
在第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 的输出。
通过web访问Parity的控制台和钱包
Parity内置了web形式的控制台和钱包,为了确保安全,默认只能通过本机访问,地址是 : http://localhost:8180 。
至此我们就完成了一套两个节点的基于Parity的PoA共识的Ethereum网络部署过程。
更多关于Parity的文档可以参考:
https://www.parity.io/
https://wiki.parity.io/
有任何技术问题,欢迎留言讨论。
Zeuux © 2024
京ICP备05028076号