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 神奇豆
5,447 每月下载量
在 15 个crate中使用(7个直接使用)
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