26个版本 (破坏性)

0.29.1 2024年8月14日
0.29.0 2024年7月18日
0.27.0 2024年7月13日
0.22.0 2024年3月18日
0.11.0 2023年3月26日

#1267 in 神奇豆

Download history 786/week @ 2024-04-24 1045/week @ 2024-05-01 713/week @ 2024-05-08 1121/week @ 2024-05-15 1202/week @ 2024-05-22 1635/week @ 2024-05-29 1361/week @ 2024-06-05 1204/week @ 2024-06-12 1371/week @ 2024-06-19 1501/week @ 2024-06-26 630/week @ 2024-07-03 1445/week @ 2024-07-10 1359/week @ 2024-07-17 1115/week @ 2024-07-24 1300/week @ 2024-07-31 1325/week @ 2024-08-07

5,447 每月下载量
15 个crate中使用(7个直接使用)

GPL-3.0-or-later…

3.5MB
77K SLoC

将GRANDPA最终性小工具集成到Substrate中。

此crate是不稳定的,API和用法可能会更改。

此crate提供了一个长时间运行的future,它会产生最终性通知。

用法

首先,使用block_import函数创建一个区块导入包装器。GRANDPA工作进程需要与这个区块导入对象链接在一起,因此还会返回一个LinkHalf。所有导入的区块(从网络、共识或其他方式)都必须通过这个包装器,否则共识可能会以意外的方式中断。

接下来,使用LinkHalf和本地配置来调用run_grandpa_voter。这需要一个Network实现。返回的future应该被驱动完成,并将在后台最终化区块。

更改权限集

GRANDPA中改变权限集的初步想法是,在某个时刻,我们达成共识,确定当前集合可以最终确定的最大区块高度,一旦达到该高度的区块被最终确定,下一个集合将从这个高度开始继续最终确定。

从技术角度讲,这将作为一个投票规则来实现,规则如下:“如果在区块B的N个区块后出现变化信号,只有当它们包含B时,才对长度为NUM(B) + N的链进行投票”。这种条件包含逻辑计算复杂,因为它需要查看链中的任意远点。

相反,我们跟踪所有已看到的信号列表(跨所有分叉),按它们应用时的区块编号升序排列。我们从不对编号高于最早交接区块编号的链进行投票(这是num(signal) + N)。在最终确定一个区块时,我们会根据信号区块是否包含在新确定的链中,应用或修剪任何已信号的更改。

许可证:GPL-3.0-or-later WITH Classpath-exception-2.0

依赖项

~73–115MB
~2M SLoC