2个版本

0.1.1 2023年4月17日
0.1.0 2023年2月25日

#17 in #mel

Download history 24/week @ 2024-03-12 5/week @ 2024-03-19 23/week @ 2024-03-26 62/week @ 2024-04-02 4/week @ 2024-04-09 18/week @ 2024-04-16 20/week @ 2024-04-23 7/week @ 2024-04-30 9/week @ 2024-05-07 26/week @ 2024-05-14 25/week @ 2024-05-21 17/week @ 2024-05-28 22/week @ 2024-06-04 20/week @ 2024-06-11 22/week @ 2024-06-18 39/week @ 2024-06-25

107 每月下载量
用于 8 crates

MPL-2.0 许可证

100KB
2.5K SLoC

melstructs: Mel的核心状态转换函数

此crate包含Mel核心状态转换函数所需的数据结构和核心算法。任何需要验证Mel交易或回答“如果发生交易A、B和C,Mel状态将如何变化”等问题软件都可以使用这个最小依赖的crate。

State 类型

crate中最重要的类型是 State,以及与之紧密相关的类型 SealedState。在黄色论文中进一步讨论了它们,但简而言之

  • State 表示一个可变的 Mel 世界状态,它不能直接序列化。它包括验证新交易和块所需的所有信息,例如所有未偿还代币的SMT、Melmint参数等。它具有接受 Transaction 等方法的函数,以推进状态,以及其他生成可序列化块、头等信息的方法。
  • SealedState 表示一个 密封 的状态。这大致对应于“给定高度的区块链状态”的概念。块表示从 SealedState 到另一个的状态转换。

注意

此crate是Mel中最重要的共识关键部分,实际上定义了整个Mel区块链的链上逻辑。

与最新Mel状态不兼容的版本因此被 全部撤回

melnode 中的使用示例

为了说明STF的使用,让我们以melnode 为例。

当一个节点首次运行时,它将实例化存储以跟踪 State。它通过从持久化历史数据中读取或创建新的创世状态来完成此操作。

在其生命周期内,节点需要通过处理传入的 apply_tx RPC 或同步其块(apply_block)与其他节点等方式更新其对 State 的当前知识。

例如,节点接收到的 apply_tx RPC 调用将使用当前的临时 State 并调用 State::apply_tx。如果节点是验证者,则该临时状态将随后用于参与共识算法(例如 streamlette)。

当较慢的节点与其高度更高的节点同步状态时,它将在当前最高状态上连续调用 apply_block

依赖项

~8–23MB
~412K SLoC