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