#state-transition #mel #blocks #transaction #data #coin #structures

bin+lib melstf

Mel 的核心状态转换函数和数据结构

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

MPL-2.0 许可证

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