1个不稳定版本
0.1.0-alpha.2 | 2024年1月27日 |
---|
#3 in #cometbft
在 2 crate 中使用
1.5MB
25K SLoC
查看仓库根目录以获取构建状态、许可证、Rust版本等信息。
轻客户端
Light Client验证和[攻击检测][light-client-detection]协议的实现。
文档
请参阅docs.rs上的文档。
测试
CometBFT轻客户端主要通过单元测试进行测试。
核心验证
轻客户端核心验证的逻辑完全封装在predicates
模块中。此代码通过单元测试进行锻炼,通过给每个断言一组数据以及预期的检查结果来独立测试每个断言。
以下命令可以用来运行这些测试
cargo test -p cometbft-light-client predicates
基于模型的测试
我们开始采用基于模型的测试(MBT),目前仅限于核心验证。在MBT中,测试过程基于Light Client形式模型,测试本身是建模语言TLA+中的简单断言。当前的TLA+测试集自动转换为JSON固定文件集。
以下命令可以用来运行这些测试
$ cargo test -p cometbft-light-client --test model_based -- --nocapture
二分法
与核心验证逻辑类似,执行二分验证的算法通过一组JSON测试用例进行测试,这些测试用例包含了初始信任状态、待验证的目标区块、一系列中间区块以及二分算法的预期结果。
这些测试针对的是light_client
模块,可以在tests/light_client.rs
文件中找到。
要运行这些测试
$ cargo test -p cometbft-light-client --test light_client bisection
攻击检测
投票权计算器
投票权计算器通过单元测试进行测试,这些测试依赖于JSON测试用例,为计算器提供各种类型的轻客户端区块及其计算结果。
以下命令可以用来运行这些测试
$ cargo test -p cometbft-light-client voting_power
集成测试
此项目还包括一个简单的集成测试,它启动一个针对单个CometBFT全节点(同时作为主对等节点和自己的见证者)的轻客户端实例。
由于此测试需要运行中的CometBFT节点,因此默认情况下会被忽略。要在本地运行此测试
# In one terminal
$ mkdir -p /tmp/cometbft
$ docker run -it --rm -v "/tmp/cometbft:/cometbft" cometbft/cometbft init
$ docker run -it --rm -v "/tmp/cometbft:/cometbft" -p 26657:26657 cometbft/cometbft node --proxy_app=kvstore
# In another terminal
$ cargo test -p cometbft-light-client --test integration -- --ignored --nocapture
其他测试
一些核心数据结构,如PeerList
实现,包含与实现相同的模块中的单元测试。
要运行这些测试以及上述所有描述的测试
$ cargo test -p cometbft-light-client --all-features
依赖关系
~11-28MB
~422K SLoC