显示包…
1 个不稳定版本
0.8.0 | 2021年4月4日 |
---|---|
0.0.0 |
|
#46 在 #consensus-algorithm
63 每月下载量
用于 28 个包 (6 个直接使用)
1.5MB
27K SLoC
BABE (盲分配区块链扩展)
BABE是一种基于槽位的区块生产机制,它使用VRF PRNG随机执行槽位分配。在每一个槽位上,所有权威节点都会使用VRF函数生成一个新的随机数,如果这个数低于一个给定的阈值(与它们的权重/抵押金成比例),它们就有权产生一个区块。VRF函数执行证明将被其他节点用于验证槽位声明的合法性。
该引擎还负责收集链上的熵,该熵将被用于初始化VRF PRNG。一个纪元是一系列连续的槽位,在这些槽位上我们将使用相同的权威集合。在纪元期间,所有由区块生产产生的VRF输出都将收集到一个链上随机数池中。纪元变更将在提前一个纪元时宣布,即当纪元N结束时,我们将宣布纪元N+2的参数(随机数、权威节点等)。
由于槽位分配是随机的,可能会发生一个槽位被分配给多个验证者的情况,这会导致临时分叉,或者一个槽位没有分配给任何验证者,这会导致不产生区块。这意味着区块时间不是确定的。
该协议有一个参数c
[0, 1],其中1 - c
是一个槽位为空的概率。该参数的选择会影响协议的安全性,与最大可容忍的网络延迟有关。
除了上述基于VRF的槽位分配外,我们将其称为主槽位,该引擎还支持确定性次级槽位分配。当节点创建者尝试声明主槽位时,主槽位优先于次级槽位,如果主槽位声明失败,则尝试次级槽位声明。次级槽位分配是通过选择索引
blake2_256(epoch_randomness++slot_number) %authorities_len
.
二级插槽支持SecondaryPlain
或SecondaryVRF
变体。与SecondaryPlain
变体相比,SecondaryVRF
变体会生成额外的VRF输出。该输出不包含信标随机性,但可以被 parachains 消费。
分叉选择规则基于权重,其中权重等于链中主块的数量。我们将选择最重的链(更多主块),并在发生平局时选择最长的链。
有关协议的详细描述和分析,请参阅此处:[链接](https://research.web3.foundation/en/latest/polkadot/block-production/Babe.html)
许可证:GPL-3.0-or-later WITH Classpath-exception-2.0
依赖项
~31–47MB
~820K SLoC