每晚八点,我们在社区分享知识,等你。
NervosFans 微信公号:Nervosfans
入群请加乐乐微信:sensus113 美果大冰微信:xj73226
备注入群,谢谢!
假设有一个PoS链,其中有某个验证人集V,且区块被再分成长度为EpochLength的时期;让每个验证人在每个时代都投票一次,因为这样对共识周期非常重要且可以最小化RNG操纵产生的收益。链中存在随机熵来源;假设随机熵每个时期更新一次。每个时期开始时,随机置乱V并将其划分为S1到SEpochLength的片,每个片大小为SSize = V/EpochLength,并且将活动分成连续的T1到TEpochLength的时隙。
消息有两种类型:区块和证明。区块是一种数据结构,包含指向父块的指针、一组消息,以及父块或另一个早期块的一组签名(“证明”)。区块包含至少SSize/2的父块证明(>= SSize/2)。区块必须指定出块所时的时隙编号;假设区块出自时隙i,该块的直接证明人必须来自集合Si,且签块人必须为Si的第一个成员。
![](https://img.haomeiwen.com/i11848795/46ae042332a12aab.png)
注意,步骤i + 2中的区块不仅可以包含在步骤i + 1中创建的父块证明,还能包含历史较早区块的证明,或同一链外部的区块证明。
若头部区块由Si的第一个成员在时隙i产生,则其他证明人会共同签署该区块。若区块不在头部产生,那么其他证明人可以签署一条消息,声明自己认为的当前头部。因此,实际上有两种方法可以将i高度的区块证明包含在j> i + 1高度的块中:
1. i高度区块的创建人未能包含其
2. i高度区块的创建人未能出块,或者出块不在头部。这种情况下,证明人可在h高度创建i高度区块的证明
某区块父块证明的出现晚于第一个时隙可能性也是有的(例2),这时可以计入SSize/2的最小(父块)证明(这也是区块链即便在在线验证人<12时也能继续的原因),但是区块证明就不行了。
注意,签名人与证明人在区块结构中处于对称位置,但在网络层面就不是了:原因是签名人是唯一的强制性证明人,通常签名人在出块后立即签署区块并在对签名区块进行广播,然后由其他证明者再次签名。 这使得区块的总聚合签名只有单个签名的大小,并且计算只需一个配对(至少在所有人都对签署的东西达成一致时是这样的)。
分叉选择规则
最简单的分叉选择规则就是高度计数。理想分叉选择规则是GHOST,工作原理如下:
1. 始于创世块(或最近的最终块)
2. 令“当前块”为当前算法正在查看的区块(即创世或最近的最终块)
o 若当前块无子项,则退出。
o 若当前块只有一个子项,则将当前块设置为该子项,然后继续
o 若当前块有多个子项,则将当前块设置为有更多有效最新签名的子项,签名来在该块或块的某些后代上签名的验证人
3. 重复步骤(2)直至退出,并返回当前块作为头部。
举个例子,看下图,其中A、B….M代表最近的签名,带有这些签名的区块也就意味着区块被签名证实:
![](https://img.haomeiwen.com/i11848795/e9f04c28d486dcb9.png)
头部为绿色块,原因是:
A是最后一个最终块的唯一子项
B和C是A的子项。B比C有更多的签名支持自己或后代。
(D E)是B的唯一子项。
F和(G H)是(D E)的子项。(G H)有5个签名支持自己或后代;F有3个,因此(G H)获胜。
(I J)和M是(G H)的子项。(I J)有2个签名支持自己或后代;M有一个,因此(I J)获胜。
GHOST保留了‘拥有最多签名支持链是获胜链’的属性,这(个属性)是使得复原、审查及其他攻击极为困难的重要标准
https://ethresear.ch/t/attestation-committee-based-full-pos-chains-version-2/2427
网友评论