2个版本
0.1.1 | 2023年4月17日 |
---|---|
0.1.0 | 2023年2月25日 |
#17 in #mel
107 每月下载量
用于 8 crates
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