#tendermint #cosmos #blockchain #rpc-client

bin+lib tendermint-rpc

tendermint-rpc 包含了 Tendermint 节点 RPC 端点返回的核心类型。所有网络相关功能都进行了特性保护,以便在只需要核心类型的情况下保持依赖项较小。

52 个版本 (25 个破坏性版本)

新版本 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日

#1087魔法豆

Download history 10451/week @ 2024-04-22 9109/week @ 2024-04-29 9040/week @ 2024-05-06 7426/week @ 2024-05-13 7721/week @ 2024-05-20 9108/week @ 2024-05-27 12268/week @ 2024-06-03 9537/week @ 2024-06-10 8514/week @ 2024-06-17 9945/week @ 2024-06-24 9780/week @ 2024-07-01 9288/week @ 2024-07-08 10867/week @ 2024-07-15 11291/week @ 2024-07-22 7916/week @ 2024-07-29 8237/week @ 2024-08-05

每月下载量 38,720
用于 72 个crate(直接使用 21 个)

Apache-2.0

1.5MB
31K SLoC

Crate Docs

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

tendermint-rpc

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

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

文档

请参阅 crates.io 上的文档。

客户端

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

目前提供了几个与客户端相关的功能。

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

命令行界面 (CLI)

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

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

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

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

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

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

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

# Query the status of the Tendermint node bound to tcp://127.0.0.1:26657
tendermint-rpc status

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

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

# To use an HTTP/S proxy to access your RPC endpoint
tendermint-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
tendermint-rpc abci-query somekey

# Subscribe to receive new blocks (must use the WebSocket endpoint)
# Prints out all incoming events
tendermint-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
# TENDERMINT_RPC_URL environment variable
export TENDERMINT_RPC_URL=ws://127.0.0.1:26657/websocket
tendermint-rpc subscribe "tm.event='Tx'"

模拟客户端

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

测试

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

要本地运行这些测试

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

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

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

依赖关系

~8–21MB
~339K SLoC