Deterministic state machine engine written in Rust
Orga is a stack for building blockchain applications powered by Tendermint consensus.
Status: Orga is not ready for production applications, but is in rapid development. Some APIs are subject to change.
| Module | Description | Completeness | API Stability |
|-------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------|
| ed | Minimalist traits for fast, deterministic encoding/decoding | Provides Encode
and Decode
traits, with implementations for many built-in types (integers, Vec<T: Encode + Decode>
, etc.). Will likely add tools for easier handmade encodings and composable encoding types (e.g. length-prefixed arrays). | Unlikely to change. |
| edderive | Derive macros for ed::Encode
and ed::Decode
| Derive macros are implemented for structs. Still needs enum support. | Can not change (only provides derive macros). |
| orga::abci | Integration with ABCI (gated by abci
feature) | Implements ABCI app abstraction with serial tx processing. Still needs full ABCI pipeline for parallel tx processing. | Likely to change significantly. |
| orga::collections | State data structures which implement orga::state::State
trait | Implements Map, Set, Deque. Will likely add more. | May change significantly as we explore different paradigms. |
| orga::merkstore | Integration with merk (gated by merk
feature) | Implements orga::store::Store
trait for Merk storage, and implements abci::ABCIStore
so it can be used in an ABCI app. Will grow as orga::store
grows, e.g. implementing orga::store::Iter
to iterate through entries. | Unlikely to change beyond changes in orga::store
. |
| orga::state | Traits for representing state data using higher-level abstractions (on top of a orga::store::Store
implementation) | Implements base State
trait, and basic implementations of it such as Value<T>
. | May change significantly as we explore different paradigms. |
| orga::store | Traits and implementations for low-level key/value store abstraction | Implements base Store
trait, and many composable implementations such as MapStore
, NullStore
, Prefixed
, etc. Will likely add more composable pieces. | The base traits may change minorly, overall paradigm is stable. |
| orgamacros | Macros for Orga traits. | Implements #[state]
macro for combining orga::state::State
implementations into struct hierarchies. Currently only supports normal structs, will likely support e.g. enums. | Unlikely to change. |
LotionJS
, we discovered that blockchain development can be fast and pleasant with the right abstractions. We aim to replicate this experience in Orga.