#mel #state-transition #track #keep #structures #data #stakes

tip911-stakeset

一个实用程序包,用于跟踪大量Mel股份

1个不稳定版本

0.0.2 2023年2月25日

#20 in #mel


3 个 (2 直接) 包中使用

MPL-2.0 许可证

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