显示包…
2 个不稳定版本
0.13.0 | 2021 年 3 月 13 日 |
---|---|
0.0.0 | 2021 年 3 月 13 日 |
#8 in #tetcoin
126 每月下载量
在 34 个包(4 个直接) 中使用
225KB
5K SLoC
tetsy-tetsy-finality-grandpa
GRANDPA,基于 GHOST 的 Recursive ANcestor Deriving Prefix Agreement,是区块链的最终性工具,使用 Rust 实现。它允许一组节点就由某些外部区块生产机制产生的规范链达成 BFT 协议,假设在部分同步网络模型下,并存在最多 1/3 的拜占庭节点。
构建 & 测试
构建和运行测试所需的唯一依赖项是安装稳定版本的 Rust。
git clone https://github.com/tetcoin/tetsy-finality-grandpa
cd tetsy-finality-grandpa
cargo build
cargo test
使用方法
将其添加到您的 Cargo.toml 中
[dependencies]
tetsy-finality-grandpa = "0.13"
功能
derive-codec
- 为所有协议消息派生Decode
/Encode
实例。test-helpers
- 提供一些不透明类型以供测试。
集成
此包仅实现了 GRANDPA 协议的状态机。为了使用此包,需要实现一些用于集成的特质,这些特质负责提供对底层区块链的访问并设置所有网络通信。
链
Chain
特质允许 GRANDPA 投票者检查给定区块的世系,还可以查询给定链中的最佳区块(将用于投票)。
环境
Environment
特质定义了将用于输入和输出流的类型,用于接收和广播消息。它还负责为给定轮次设置这些类型(通过 round_data
),以及用于协议超时的计时器。
该特质公开了轮次全生命周期的回调
- proposed
- prevoted
- precommitted
- completed
以及通知关于区块最终性和投票者不当行为(等价)的回调。
Substrate
此crate的主要用户是Substrate,应作为了解集成方式的主要资源。应包含大部分相关集成代码的substrate-tetsy-finality-grandpa
crate。
最重要的是,此crate不处理权限集变化。它假定权限集始终相同。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
资源
许可
本crate的使用提供在Apache License(版本2.0)下。有关详细信息,请参阅LICENSE。
依赖项
~0.8–1.8MB
~32K SLoC