37个版本
0.16.2 | 2023年3月16日 |
---|---|
0.16.0 | 2022年6月13日 |
0.15.0 | 2022年2月8日 |
0.14.4 | 2021年9月2日 |
0.4.0 | 2018年11月23日 |
#1436 in 神奇豆
230KB
5.5K SLoC
finality-grandpa
GRANDPA(基于GHOST的递归祖先推导前缀协议),是一个用于区块链的最终性小工具,用Rust实现。它允许一组节点就由某些外部区块生产机制产生的规范链达成BFT协议。它假定在一个部分同步的网络模型下工作,并允许存在多达1/3的拜占庭节点。
构建 & 测试
构建和运行测试所需唯一的依赖项是安装一个稳定的Rust版本。
git clone https://github.com/paritytech/finality-grandpa
cd finality-grandpa
cargo build
cargo test
使用
将此添加到您的Cargo.toml文件中
[dependencies]
finality-grandpa = "0.16"
功能
derive-codec
- 为所有协议消息派生Decode
/Encode
实例。test-helpers
- 为测试目的公开一些不透明类型。
集成
该crate仅实现了GRANDPA协议的状态机。为了使用此crate,需要实现一些负责提供对底层区块链的访问和设置所有网络通信的集成trait。
链
《Chain》特质允许GRANDPA投票者检查给定块的世系,还可以查询给定链中的最佳块(这将用于投票)。
环境
《Environment》特质定义了用于接收和广播消息的输入和输出流的数据类型。它还负责为给定轮次设置这些数据(通过《round_data》),以及用于协议超时的计时器。
该特质公开了轮次全生命周期的回调
- 提议
- 之前投票
- 预先提交
- 完成
以及通知关于块最终性和投票者不当行为(equivocations)的回调。
Substrate
此包的主要用户是Substrate,应将其作为了解集成的主要资源。应包含大部分相关集成代码的substrate-finality-grandpa
包。
最重要的是,此包不处理权威集变更。它假设权威集始终相同。权威集的交接由Substrate通过监听底层区块链发出的信号来处理。
模糊测试
要运行模糊测试测试框架,您需要安装afl
或cargo-fuzz
(您需要使用nightly Rust工具链进行此操作)
cargo install cargo-fuzz
cargo install afl
libfuzzer
cargo fuzz run graph
cargo fuzz run round
afl
cd fuzz
cargo afl build --features afl --bin graph_afl
cargo afl build --features afl --bin round_afl
# create some random input
mkdir afl_in && dd if=/dev/urandom of=afl_in/seed bs=1024 count=4
cargo afl fuzz -i afl_in -o afl_out target/debug/graph_afl
cargo afl fuzz -i afl_in -o afl_out target/debug/round_afl
资源
许可
使用根据Apache License(版本2.0)提供。有关详细信息,请参阅LICENSE。
依赖关系
~0.8–7MB
~36K SLoC