- 2020-08-11: First draft
As mentioned #388 one of the high level goals for the tendermint-rs
repo is to merge an already existing crate to build ABCI servers with. There are three existing crates for this purpose:
There was a proposal for rearchitecting rust-abci
where a lot
of different aspects about rust-abci
were discussed (for example, current Application
trait does not enforce Send + Sync
, also abci-rs
is not easy to work with when rest of the application is using async
Rust etc.). A decision was
made to explore other architectures for rust-abci
which are also compatible with async
Rust.
Currently, there are two new crates which were created in order to explore other architectures for rust-abci
,
abci-rs
and abci2
.
abci2
's architecture is very minimal and is akin to a wrapper around raw TcpStream
with protobuf
encoding/decoding
of ABCI types. All the burden of handing requests of different types in different ways is left to the developer.
Unlike abci2
, abci-rs
' architecture is similar to rust-abci
with some additional features, for example, support
for async_trait
s, ABCI logic sanity checks
with proper test coverage, support for unix sockets.
Absorb abci-rs
and adopt types in tendermint-rs
repository (using tendermint-proto
crate, etc.).
Proposed
abci-rs
will be kept up to date with thetendermint-rs
development and remain compatible with other related crates.abci-rs
can share dependencies with other related crates (for example, simpler types fromproto
, etc.).- Less burden on developer/crate user.
- Developer is forced to use
async
Rust. - Less flexibility for the developer/crate user.
Issues in tendermint-rs
:
Issues in rust-abci
:
Documentation for abci-rs
: