#cometbft #cosmos #blockchain #tendermint #rpc-client

bin+lib cometbft-rpc

cometbft-rpc 包含了由 CometBFT 节点的 RPC 端点返回的核心类型。所有与网络相关的功能都是为了在只需要核心类型时保持依赖关系较小而进行特性保护的。

1 个不稳定版本

0.1.0-alpha.22024 年 1 月 27 日

#2964 in 神奇豆子


3 crate 中使用

Apache-2.0

1.5MB
34K SLoC

Crate Docs

查看 仓库根目录 以获取构建状态、许可证、Rust 版本等信息。

cometbft-rpc

CometBFT 节点 RPC 端点返回的核心类型的 Rust 实现。这些类型可以用于反序列化 JSON-RPC 响应。

所有与网络相关的功能都将进行特性保护,以保持依赖关系较小,在只需要核心类型时。

文档

请参阅 crates.io 上的文档。

客户端

此 crate 可选地提供访问不同类型的 RPC 客户端功能,以及基于您使用时选择的特性不同而提供的不同客户端传输。

目前提供了几个与客户端相关的特性

  • http-client - 提供 HttpClient,这是一个基本的 RPC 客户端,通过 JSON-RPC over HTTP 或 HTTPS 与远程 CometBFT 节点交互。此客户端不提供 Event 订阅功能。有关详细信息,请参阅 CometBFT RPC
  • websocket-client - 提供了 WebSocketClient,它提供了完整的客户端功能,包括通用RPC功能以及 Event 订阅功能。支持通过安全(wss://)和不安全(ws://)连接使用。

命令行界面(CLI)

为了测试/实验目的,提供了一个 cometbft-rpc 控制台应用程序。要构建此应用程序

# From the cometbft-rpc crate's directory
cd rpc
cargo build --bin cometbft-rpc --features cli

# To run directly and show usage information
cargo run --bin cometbft-rpc --features cli -- --help

# To install the binary to your Cargo binaries path
# (should be globally accessible)
cargo install --bin cometbft-rpc --features cli --path .

应用程序将日志发送到 stderr,将输出发送到 stdout,因此捕获RPC输出相对容易。

使用示例:(假设你已经安装了二进制文件)

# Check which RPC commands/endpoints are supported.
cometbft-rpc --help

# Query the status of the CometBFT node bound to tcp://127.0.0.1:26657
cometbft-rpc status

# Submit a transaction to the key/value store ABCI app via a CometBFT node
# bound to tcp://127.0.0.1:26657
cometbft-rpc broadcast-tx-async somekey=somevalue

# Query the value associated with key "somekey" (still assuming a key/value
# store ABCI app)
cometbft-rpc abci-query somekey

# To use an HTTP/S proxy to access your RPC endpoint
cometbft-rpc --proxy-url http://yourproxy:8080 abci-query somekey

# To set your HTTP/S proxy for multiple subsequent queries
export HTTP_PROXY=http://yourproxy:8080
cometbft-rpc abci-query somekey

# Subscribe to receive new blocks (must use the WebSocket endpoint)
# Prints out all incoming events
cometbft-rpc -u ws://127.0.0.1:26657/websocket subscribe "tm.event='NewBlock'"

# If you want to execute a number of queries against a specific endpoint and
# don't feel like re-typing the URL over and over again, just set the
# COMETBFT_RPC_URL environment variable
export COMETBFT_RPC_URL=ws://127.0.0.1:26657/websocket
cometbft-rpc subscribe "tm.event='Tx'"

模拟客户端

当启用 http-clientwebsocket-client 中的任一功能时,将包括模拟客户端以帮助测试。这包括 MockClient,它实现了 ClientSubscriptionClient 特性。

测试

RPC 类型通过 集成测试 直接进行测试。这些测试使用从运行中的 CometBFT 节点获取的固定装置来确保兼容性,无需在测试期间访问运行中的节点。所有这些固定装置都是手动生成的,自动重新生成固定装置的计划在 我们的路线图 上。

要本地运行这些测试

# From within the rpc crate
cargo test --all-features

RPC 客户端还通过在 CometBFT 集成测试 中间接进行测试,这发生在 CI 期间。所有这些测试都需要一个运行中的 CometBFT 节点,因此默认情况下被忽略。要本地运行这些测试

# In one terminal, spin up a CometBFT node
docker pull cometbft/cometbft:latest
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, run the ignored CometBFT tests to connect to the node
# running at tcp://127.0.0.1:26657
cd ../cometbft
cargo test --all-features -- --ignored

依赖项

~7–20MB
~322K SLoC