[−][src]Crate abci
A Rust crate for creating ABCI applications.
ABCI Overview
ABCI is the interface between Tendermint (a state-machine replication engine) and your application (the actual state
machine). It consists of a set of methods, where each method has a corresponding Request
and Response
message type.
Tendermint calls the ABCI methods on the ABCI application by sending the Request
messages and receiving the Response
messages in return.
ABCI methods are split across 3 separate ABCI connections:
Consensus
Connection:InitChain
,BeginBlock
,DeliverTx
,EndBlock
,Commit
Mempool
Connection:CheckTx
Info
Connection:Info
,SetOption
,Query
Additionally, there is a Flush
method that is called on every connection, and an Echo
method that is just for
debugging.
To know more about ABCI protocol specifications, go to official ABCI documentation.
Usage
Add abci-rs
in your Cargo.toml
's dependencies
section:
[dependencies]
abci-rs = "0.3"
Each ABCI application has to implement three core traits corresponding to all three ABCI connections, Consensus
,
Mempool
and Info
.
Note: Implementations of these traits are expected to be
Send + Sync
and methods take immutable reference ofself
. So, internal mutability must be handled using thread safe (Arc
,Mutex
, etc.) constructs.
After implementing all three above mentioned trait
s, you can create a Server
object and use Server::run()
to start
ABCI application.
Server::run()
is an async
function and returns a Future
. So, you'll need an executor to run Future
returned from
Server::run()
. async-std
and tokio
are two popular options. In counter
example, we use async-std
's executor.
To know more, go to examples/
to see a sample ABCI application.
Features
uds
: Enables support for running ABCI server over Unix Domain Socket (UDS)- Supported on Unix only.
- Disabled by default.
Supported Versions
- Tendermint v0.32.0
- ABCI v0.16.0
Modules
types | Types used in ABCI |
Structs
Server | ABCI Server |
Enums
Address | Address of ABCI Server |
Traits
Consensus | Trait for managing consensus of blockchain. |
Info | Trait for initialization and for queries from the user. |
Mempool | Trait for managing tendermint's mempool. |
Attribute Macros
async_trait | Utility macro for implementing |