1703879789
1703879790
1703879791
和刚才一样,输入密码。
1703879792
1703879793
2.创建规范文件
1703879794
1703879795
每个网络的节点都分享一个通用规范文件(specification file)。该文件告诉节点关于创世区块、谁是验证器等信息。我们将创建一个智能合约,其中包含验证器列表。有两种类型的验证器合约:non-reporting合约和reporting合约。我们只需要提供一个。
1703879796
1703879797
这两种验证器合约的区别是:non-reporting合约只返回一个验证器列表;而reporting合约可以对善意(善意行为可能仅仅是不从一个给定的验证器接收区块)和恶意行为(恶意行为可能是在同一步骤释放两个不同的区块)采取行动。
1703879798
1703879799
non-reporting合约至少应该有如下界面:
1703879800
1703879801
1703879802
1703879803
1703879804
在每一个区块上调用getValidators函数,以决定当前列表。转换规则是由实现该方法的合约决定的。
1703879805
1703879806
reporting合约至少应该有如下界面:
1703879807
1703879808
1703879809
1703879810
1703879811
当有善意或者恶意行为时,共识机器分别调用reportBenign和reportMalicious函数。
1703879812
1703879813
创建一个reporting合约的基本示例如下:
1703879814
1703879815
1703879816
1703879817
1703879818
1703879819
1703879820
1703879821
该代码无须解释说明。确保在验证器中,数组用验证器1的第一个地址和验证器2的第一个地址代替这些地址,因为我们将使用那些地址进行验证。现在编译上述合约。
1703879822
1703879823
现在创建规范文件。创建一个叫作spec.json的文件,放入下面的代码:
1703879824
1703879825
1703879826
1703879827
1703879828
1703879829
1703879830
1703879831
上述程序代码的工作原理如下:
1703879832
1703879833
·engine属性用于设置共识协议和协议具体参数。这里的engine是authority-Round,也就是aura。gasLimitBoundDivisor决定gas上限调整,并有通常的以太坊值。在验证器属性中,有一个contract属性,即reporting合约的地址。stepDuration是以秒为单位的区块时间。
1703879834
1703879835
·在params属性中,只有网络ID才是关键;在所有的链中,其他属性都是标准的。
1703879836
1703879837
·genesis属性对于authorityRound共识有一些标准数值。
1703879838
[
上一页 ]
[ :1.703879789e+09 ]
[
下一页 ]