3 个版本

0.1.10 2020年8月20日
0.1.9 2020年8月20日
0.1.8 2020年8月12日

#68 in #tendermint

MIT 许可证

81KB
1.5K SLoC

orga

使用 Rust 编写的确定状态机引擎

Crate API

Orga 是一个由 Tendermint 共识驱动的区块链应用堆栈。

状态: Orga 还未准备好用于生产应用,但正在快速发展。一些 API 可能会发生变化。

模块状态

模块 描述 完整性 API 稳定性
ed 快速、确定的编码/解码的最简特性 提供 EncodeDecode 特性,为许多内置类型(整数、Vec<T: Encode + Decode> 等)提供实现。可能会添加更易于手工编码的工具和可组合的编码类型(例如长度前缀数组)。 不太可能改变。
ed_derive ed::Encodeed::Decode 实现推导宏 为结构体实现了推导宏。仍然需要枚举支持。 不可改变(仅提供推导宏)。
orga::abci 与 ABCI 的集成(由 abci 功能控制) 实现了 ABCI 应用抽象和串行事务处理。仍然需要完整的 ABCI 管道以实现并行事务处理。 可能会发生重大变化。
orga::collections 实现 orga::state::State 特性的状态数据结构 实现了 Map、Set、Deque。可能会添加更多。 随着我们探索不同的范式,可能会发生重大变化。
orga::merkstore merk 的集成(由 merk 功能控制) 实现了用于Merk存储的 orga::store::Store 特性,并实现了 abci::ABCIStore,以便在ABCI应用程序中使用。随着 orga::store 的增长而发展,例如实现 orga::store::Iter 以遍历条目。 不太可能超出 orga::store 的变化。
orga::state 使用高级抽象(在 orga::store::Store 实现之上)表示状态数据的特性 实现了基础 State 特性,以及它的一些基本实现,例如 Value<T> 随着我们探索不同的范式,可能会发生重大变化。
orga::store 低级键/值存储抽象的特性及其实现 实现了基础 Store 特性,以及许多可组合的实现,如 MapStoreNullStorePrefixed 等。可能会添加更多可组合的部分。 基础特性可能会略有变化,整体范式是稳定的。
orga_macros Orga特性的宏 实现了 #[state] 宏,用于将 orga::state::State 实现组合到结构层次结构中。目前仅支持普通结构体,可能会支持例如枚举。 不太可能改变。

项目目标

  • 性能 - 为了服务于大量用户,区块链需要设计成高吞吐量,例如每秒10k+交易。Orga被设计为最大并发性和使用合适的数据结构的能力。
  • 简单性 - 保持复杂性在可控范围内,使得理解系统更容易,预防缺陷,并引入新功能。在思考某个问题时,一个好的启发式方法是选择代码行数更少或编译器输出更小的解决方案。
  • 易用性 - 在我们之前对 LotionJS 的工作中,我们发现,通过合适的抽象,区块链开发可以快速且愉快。我们希望将这种体验复制到Orga中。
  • 惯用Rust - 当试图弄清楚如何做某事时,我们通常可以通过问“Rust标准库会怎么做?”来找到答案。

依赖关系

~2–17MB
~242K SLoC