Skip to content

Latest commit

 

History

History
69 lines (43 loc) · 2.66 KB

adr-008-abci-rs-merge.md

File metadata and controls

69 lines (43 loc) · 2.66 KB

ADR 008: Merge abci-rs into tendermint-rs

Changelog

  • 2020-08-11: First draft

Context

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:

  1. rust-abci
  2. abci-rs
  3. abci2

History

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.

Current state

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_traits, ABCI logic sanity checks with proper test coverage, support for unix sockets.

Decision

Absorb abci-rs and adopt types in tendermint-rs repository (using tendermint-proto crate, etc.).

Status

Proposed

Consequences

Positive

  • abci-rs will be kept up to date with the tendermint-rs development and remain compatible with other related crates.
  • abci-rs can share dependencies with other related crates (for example, simpler types from proto, etc.).
  • Less burden on developer/crate user.

Negative/Neutral

  • Developer is forced to use async Rust.
  • Less flexibility for the developer/crate user.

References

Issues in tendermint-rs:

Issues in rust-abci:

Documentation for abci-rs: