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.52020年3月24日

1303神奇豆

Download history 1367/week @ 2024-04-26 1215/week @ 2024-05-03 1157/week @ 2024-05-10 1338/week @ 2024-05-17 1715/week @ 2024-05-24 1938/week @ 2024-05-31 1715/week @ 2024-06-07 1162/week @ 2024-06-14 1848/week @ 2024-06-21 1086/week @ 2024-06-28 574/week @ 2024-07-05 1376/week @ 2024-07-12 1196/week @ 2024-07-19 1051/week @ 2024-07-26 1271/week @ 2024-08-02 1163/week @ 2024-08-09

4,998 每月下载量
29 个crate中使用 (10 个直接使用)

GPL-3.0-or-later…

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.

的权限来完成的。辅助插槽支持 SecondaryPlainSecondaryVRF 变体。与 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