4 个版本
0.12.3 | 2023 年 2 月 27 日 |
---|---|
0.12.2 | 2023 年 2 月 26 日 |
0.12.1 | 2023 年 2 月 26 日 |
0.12.0 | 2023 年 2 月 25 日 |
#18 in #mel
用于 2 crates
120KB
2.5K SLoC
melstructs: Mel 的核心状态转换函数
此 crate 包含构成 Mel 核心状态转换函数的数据结构和核心算法。任何需要验证 Mel 交易或回答类似“如果交易 A、B 和 C 发生,Mel 状态会发生什么”的问题的软件都可以使用这个最小依赖项 crate。
State
类型
crate 中最重要的类型是 State
,以及与之紧密相关的类型 SealedState。黄色论文(https://docs.themelio.org/specifications/yellow/)对它们进行了进一步的讨论,但简而言之
State
代表一个可变的 Mel 世界状态,并且它本身不可直接序列化。它包括验证新交易和区块所需的所有信息,例如所有未偿硬币的 SMT、Melmint 参数等。它具有接收Transaction
等对象以推进状态的函数,以及用于生成可序列化区块、头部等的其他函数。SealedState
代表一个密封的状态。这大致对应于“给定高度的区块链状态”的概念。区块表示从一个SealedState
到另一个的转换。
注意
此 crate 是 Mel 的 最具共识关键性的部分,并基本上定义了 Mel 区块链的全部链上逻辑。
因此,与最新 Mel 状态不兼容的版本都被 撤回。
themelio-node
中的示例用法
为了说明 STF 的用法,让我们以 themelio-node
为例。
当节点第一次运行时,它将实例化存储以跟踪 State
。它通过从持久历史数据中读取或创建新的创世状态来完成此操作。
在其生命周期内,节点将需要通过处理传入的 apply_tx
RPC 或与其他节点同步其区块(apply_block
)等方式更新其对当前 State
的了解。
例如,节点接收到的 apply_tx
RPC 调用将获取当前的临时 State
并调用 State::apply_tx
。如果该节点是抵押者,则该临时状态将用于参与共识算法(例如 streamlette
)。
当一个速度较慢的节点与其高度更高的节点同步状态时,它将连续在其当前最高状态上调用 apply_block
。
依赖项
~14–32MB
~675K SLoC