#consensus #bft #tendermint #blockchain #cometbft

cometbft-light-client

CometBFT轻客户端验证协议实现

1个不稳定版本

0.1.0-alpha.22024年1月27日

#3 in #cometbft


2 crate 中使用

Apache-2.0

1.5MB
25K SLoC

Crate Docs

查看仓库根目录以获取构建状态、许可证、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

请参阅MBT指南MBT摘要以获取更多信息。

二分法

与核心验证逻辑类似,执行二分验证的算法通过一组JSON测试用例进行测试,这些测试用例包含了初始信任状态、待验证的目标区块、一系列中间区块以及二分算法的预期结果。

这些测试针对的是light_client模块,可以在tests/light_client.rs文件中找到。

要运行这些测试

$ cargo test -p cometbft-light-client --test light_client bisection

攻击检测

请参阅light-client-detector存储库

投票权计算器

投票权计算器通过单元测试进行测试,这些测试依赖于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