打字猴:1.70387969e+09
1703879690 区块链项目开发指南 9.3 parity概述
1703879691
1703879692 parity是一个彻头彻尾的以太坊节点,其特点包括正确性/可验证性、模块化、低内存占用和高性能。它是用Rust编程语言编写的,Rust是一种混合式的、面向对象的函数式语言的语言,注重效率,由Parity Technologies公司开发。在写本书时,parity的最新版本是1.7.0,我们将使用这个版本学习创建联盟区块链需要的内容。如要深入学习parity,请参考官方文档。
1703879693
1703879694 parity的功能比go-ethereum多,例如有web3 DApp浏览器和更先进的账户管理功能等。不过parity的特别之处在于它既支持PoA,也支持PoW。parity目前支持Aura和Tendermint PoA协议,未来还可能支持更多的PoA协议。目前,parity推荐使用Aura,而不推荐Tendermint,因为Tendermint仍处于开发阶段。
1703879695
1703879696 对于获得许可权限的区块链来说,Aura是一个比PoW好得多的选择,因为它的区块时间更好,且在私有网络中提供了更好的安全性。
1703879697
1703879698
1703879699
1703879700
1703879701 区块链项目开发指南 [:1703875409]
1703879702 区块链项目开发指南 9.3.1 Aura的工作原理
1703879703
1703879704 让我们从一定高度看看Aura是如何工作的。Aura要求每个节点中都指明同样的验证器列表,这是参与共识的账户地址的列表。一个节点可能是验证节点,也可能不是验证节点,即使是验证节点,也需要有这个列表,这样它自己才能达成共识。
1703879705
1703879706 这个列表可以在创世文件中作为静态列表提供(如果验证器的列表永远保持不变),或者在智能合约中提供(这样它可以被动态更新且让每一个节点都知道它)。在智能合约中,对于谁可以添加新的验证器,可以设置不同的策略。
1703879707
1703879708 区块时间可以在创世文件中配置。用户可以自己决定区块时间。在私有网络中,低至3s的区块时间运行良好。在Aura中,每过3s就选择验证器中的一个,该验证器负责创建、验证、签署和广播区块。用户不需要深入理解实际的选择算法,因为这不会影响DApp开发。这是计算下一个验证器的公式:(UNIX_TIMESTAMP/BLOCK_TIME%NUMBER_OF_TOTAL_VALIDATORS)。选择算法很智能,它给所有人同等的机会。当其他节点接收一个区块时,它们要检查区块是否来自下一个合法的验证器;如果不是,就拒绝它。与PoW不同,验证器创建区块的时候,不能得到以太币回报。在Aura中,由用户决定在没有交易时是否生成空区块。
1703879709
1703879710 如果由于一些原因,下一个验证器节点创建和广播下一个区块失败了,情况会如何?让我们看一个例子:假设A是下一个区块(即第5个区块)的验证器,B是第6个区块的验证器。假设区块时间是5s。如果A广播区块失败,则5s之后轮到B广播区块。所以事实上不会发生什么要紧事,区块时间戳将揭示这些细节。
1703879711
1703879712 在PoW中两个矿工同时挖矿,最后网络是否有可能产生多个不同的区块链?是的,很多情况下都可能导致这样的结果。让我们看个例子来理解一种可能发生的情况以及网络自动解决冲突的方法。假设共有5个验证器:A、B、C、D和E。区块时间是5s。假设A首先被选中并广播一个区块,但是由于一些原因区块没有到达D和E,所以它们会认为A没有广播区块。现在假设选择算法选择B来生成下一个区块,则B将在A区块之上生成下一个区块并广播给所有的节点。D和E将拒绝它,因为前一个区块哈希不匹配。由此,D和E将形成一个不同的链,而A、B和C将形成一个不同的链。A、B和C将拒绝来自D和E的区块,而D和E将拒绝来自A、B和C的区块。这个问题可以这样解决,假设定义来自A、B和C的区块比来自D和E的区块更准确,因此D和E将用A、B和C版本的区块链替换自己的区块链。两个版本的区块链有不同的准确分,第一个区块链的分数高于第二个。当B广播它的区块时,它还将提供其区块链评分,因为其分数高,D和E就用B的区块链替换自己的区块链。这就是冲突的解决方法。区块链的分数使用(U128_max*BLOCK_NUMBER_OF_LATEST_BLOCK-(UNIX_TIMESTAMP_OF_LATEST_BLOCK/BLOCK_TIME))计算。首先用长度评分(区块越多越好),对于有同样长度的链,选择最后一个区块比较旧的链。
1703879713
1703879714 如果更深入地学习Aura,参见https://github.com/paritytech/parity/wiki/Aura。
1703879715
1703879716
1703879717
1703879718
1703879719 区块链项目开发指南 [:1703875410]
1703879720 区块链项目开发指南 9.3.2 运行parity
1703879721
1703879722 parity需要安装Rust版本1.16.0才能创建。推荐通过rustup安装Rust。
1703879723
1703879724 1.安装rust
1703879725
1703879726 如果还没有rustup,可以按照如下方式进行安装。
1703879727
1703879728 (1)Linux
1703879729
1703879730 在以Linux为基础的操作系统上,运行如下命令:
1703879731
1703879732
1703879733
1703879734
1703879735 parity还要求安装gcc、g++、libssl-dev/openssl、libudev-dev和pkg-config包。
1703879736
1703879737 (2)OS X
1703879738
1703879739 在OS X上,运行如下命令:
[ 上一页 ]  [ :1.70387969e+09 ]  [ 下一页 ]