orga
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 Status
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. |
ed_derive | 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. |
orga_macros | 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. |
Project Goals
- Performance - To serve a large user base, blockchains need to be engineered for high throughput, e.g. 10k+ transactions per second. Orga is engineered for maximum concurrency and with the ability to use the right data structures.
- Simplicity - Keeping complexity under control makes it easier to understand the system, prevent flaws, and introduce new functionality. When thinking something through, a good heuristic is to choose the solution with fewer lines of code or smaller compiler output.
- Ease of use - In our earlier work on
LotionJS
, we discovered that blockchain development can be fast and pleasant with the right abstractions. We aim to replicate this experience in Orga. - Idiomatic Rust - When figuring out how to do something, we can often answer it by asking "what would the Rust standard library do?".