53 个版本 (35 个破坏性更新)
0.44.0 | 2024年7月18日 |
---|---|
0.41.0 | 2024年6月24日 |
0.37.0 | 2024年3月18日 |
0.33.0 | 2023年12月13日 |
0.8.0-alpha.5 | 2020年3月24日 |
1303 在 神奇豆
4,998 每月下载量
在 29 个crate中使用 (10 个直接使用)
1.5MB
28K 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输出。输出不包括在信标随机数中,但可以被并行链消耗。
分叉选择规则是基于权重的,其中权重等于链中主区块的数量。我们将选择最重的链(更多的主区块),并在发生平局时选择最长的链。
关于该协议的详细描述和分析可以在此处找到:https://research.web3.foundation/Polkadot/protocols/block-production/Babe
许可:GPL-3.0-or-later WITH Classpath-exception-2.0
依赖项
~75–115MB
~2M SLoC