23个版本

0.11.3 2022年5月28日
0.11.2 2022年3月21日
0.11.1 2021年6月23日
0.11.0 2021年2月1日
0.3.2 2019年11月29日

#4 in #abci

MIT/Apache

135KB
3K SLoC

abci-rs

Continuous Integration Crates.io Documentation License

用于创建ABCI应用程序的Rust包。

ABCI概述

ABCI是Tendermint(一个状态机复制引擎)与您的应用程序(实际状态机)之间的接口。它由一系列方法组成,每个方法都对应一个RequestResponse消息类型。Tendermint通过发送Request消息并接收返回的Response消息来调用ABCI应用程序中的ABCI方法。

ABCI方法分布在4个单独的ABCI连接上

  • Consensus连接:InitChainBeginBlockDeliverTxEndBlockCommit
  • Mempool连接:CheckTx
  • Info连接:InfoSetOptionQuery
  • Snapshot连接:ListSnapshotsLoadSnapshotChunkOfferSnapshotApplySnapshotChunk

此外,还有一个在所有连接上都会调用的Flush方法,以及一个仅用于调试的Echo方法。

要了解更多关于ABCI协议规范的信息,请访问官方ABCI 文档

用法

在您的Cargo.tomldependencies部分添加abci-rs

[dependencies]
abci-rs = "0.11"

每个ABCI应用程序都必须实现与所有四个ABCI连接对应的四个核心特性,即ConsensusMempoolInfoSnapshot

注意:这些特性的实现应预期为Send + Sync,并且方法接受对self的不可变引用。因此,必须使用线程安全(ArcMutex等)构造来处理内部可变性。

同步和异步API

abci-rs支持同步和异步API(使用sync-apiasync-api cargo特性)。至少应该启用这些特性中的一个。默认情况下,sync-apiasync-api特性都被启用。

异步运行时

abci-rs 还支持多种异步运行时。可以通过使用 cargo 功能 use-async-stduse-smoluse-tokio 来启用这些不同的运行时。一次只能启用一个运行时。如果启用了多个运行时或都没有启用,则编译将失败。默认情况下,启用了 use-tokio 功能。

示例

示例 ABCI 应用程序可以在 examples/sync-counter.rs(使用 sync_api)和 examples/async-counter.rs(使用 async_api)中找到。

文档

许可证

根据您的选择,许可为以下之一

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,将如上所述双重许可,而不附加任何额外的条款或条件。

依赖关系

~4–19MB
~221K SLoC