52 个版本 (24 个重大更新)
新增 0.39.1 | 2024年8月9日 |
---|---|
0.38.1 | 2024年7月23日 |
0.35.0 | 2024年3月14日 |
0.34.0 | 2023年10月2日 |
0.15.0 | 2020年7月20日 |
#684 在 魔法豆
每月下载量 5,013 次
在 8 个包中(直接使用 4 个) 使用
1.5MB
22K SLoC
查看 仓库根目录 以获取构建状态、许可、Rust 版本等信息。
轻客户端
实现 轻客户端验证 和 [攻击检测][light-client-detection] 协议。
文档
请参阅 docs.rs 上的文档。
测试
Tendermint轻客户端主要通过单元测试进行测试。
核心验证
轻客户端核心验证逻辑完全封装在 predicates
模块中。通过单元测试对该代码进行测试,每个断言在隔离状态下进行测试,通过提供一组数据和每个检查的预期结果来测试每个断言。
以下命令可以用于运行这些测试
cargo test -p tendermint-light-client predicates
基于模型的测试
我们开始采用基于模型的测试(MBT),目前仅限于核心验证。在MBT中,测试流程基于轻客户端形式模型,而测试本身是建模语言TLA+中的简单断言。当前的一组TLA+测试被自动转换为JSON测试用例。
以下命令可以用于运行这些测试
$ cargo test -p tendermint-light-client --test model_based -- --nocapture
二分法
与核心验证逻辑类似,二分验证算法通过一组JSON测试用例进行测试,这些测试用例包含了初始可信状态、要验证的目标区块、一系列中间区块和二分算法的预期结果。
这些测试针对light_client
模块,并可以在tests/light_client.rs
文件中找到。
运行测试
$ cargo test -p tendermint-light-client --test light_client bisection
攻击检测
投票力量计算器
投票力量计算器通过单元测试进行测试,这些测试依赖于JSON测试用例,为计算器提供各种类型的轻客户端块及其计算结果的预期结果。
以下命令可以用于运行这些测试
$ cargo test -p tendermint-light-client voting_power
集成测试
此项目还包括简单的集成测试,该测试启动一个针对单个Tendermint全节点的轻客户端实例,该节点同时充当主对等节点及其自己的见证者。
由于此测试需要一个正在运行的Tendermint节点,因此默认情况下会忽略该测试。要本地运行此测试
# In one terminal
$ mkdir -p /tmp/tendermint
$ docker run -it --rm -v "/tmp/tendermint:/tendermint" tendermint/tendermint init
$ docker run -it --rm -v "/tmp/tendermint:/tendermint" -p 26657:26657 tendermint/tendermint node --proxy_app=kvstore
# In another terminal
$ cargo test -p tendermint-light-client --test integration -- --ignored --nocapture
其他测试
一些核心数据结构,例如PeerList
实现,包含与实现相同的模块中的单元测试。
要运行这些测试以及上述所有测试
$ cargo test -p tendermint-light-client --all-features
依赖项
~11–26MB
~416K SLoC