显示包…

1 个不稳定版本

0.8.0 2021年4月4日
0.0.0 2021年3月4日

#46#consensus-algorithm

Download history 22/week @ 2024-04-07 24/week @ 2024-04-14 34/week @ 2024-04-21 24/week @ 2024-04-28 24/week @ 2024-05-05 30/week @ 2024-05-12 25/week @ 2024-05-19 32/week @ 2024-05-26 25/week @ 2024-06-02 18/week @ 2024-06-09 26/week @ 2024-06-16 26/week @ 2024-06-23 6/week @ 2024-06-30 10/week @ 2024-07-07 27/week @ 2024-07-14 20/week @ 2024-07-21

63 每月下载量
用于 28 个包 (6 个直接使用)

GPL-3.0-or-later…

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.

二级插槽支持SecondaryPlainSecondaryVRF变体。与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