概念定义: - Slot(槽):固定长度的时间区间,用于区块的生成。 - Epoch(时期):由多个Slot组成的时间段。 - VRF(可验证随机函数):一种私钥相关的随机函数,任何人可以通过公钥来验证。
解决的问题: - 引入随机性,使下一个出块验证者不可预测,从而实现出块的去中心化。
步骤: 1. 验证人使用自己的私钥生成VRF(随机数+Proof)。 2. 验证人计算SlotNo+EpochNo+随机数得到一个值,如果该值小于一个特定值,则获得出块机会。 3. 如果一个Slot存在以下情况:1. Slot没有任何验证者满足要求;2. Slot有多个验证者满足要求,则按照Aura顺序指定验证者出块,被称为次级Aura区块,优先级较低。 4. 每个Epoch根据最新的Staking情况 - 区块由Digest和Seal组成。 - Digest包含:Pre-digest(VRF输出和运行时处理的交易记录集合)和Post-digest(仅在Epoch切换时存在,输出混合随机值用于重新选择验证者集合)。 - Seal即节点的签名。
BABE的问题: - 在特定情况下,节点可以影响随机值,从而实现小概率的验证人顺序预测。 - 一个Slot可能存在没有BABE验证者或存在多个验证者的情况。
为了改进这些问题,出现了改良的Sassafras共识,详情可以查看TangWei的视频(链接:https://www.bilibili.com/video/BV1bz411z73k)。