Move 语言中文白皮书(六)---- Move 虚拟机

6. Move虚拟机:所有模块组合在一起。


Move 虚拟机的作用是:引用全局状态 Σ 作为初始化状态,然后执行交易集合组成的区块 𝐵,并产生表示对全局状态的修改的交易效果 𝐸。 然后可以将执行结果 𝐸 应用于 Σ 以生成由执行𝐵 产生的状态 Σ′。将执行结果与实际状态更新分开,用来避免 VM 在交易执行失败的情况下保持 全局状态不更新,还是原来的 Σ。

直观地说,交易执行结果表示账户子集的全局状态更新。交易执行结果与全局状态具有相同的结构:它是从账户地址到账户的部分映射,其中包含Move模块和resource值的规范序列化表示。规范序列化从 Move 模块实现与语言无关的 1-1 函数或resource到字节数组。

为了从状态 Σ𝑖−1 执行区块 𝐵,VM 从区块𝐵获取交易𝑇𝑖,对其进行处理以产生执行结果𝐸𝑖,然后将𝐸𝑖应用于 Σ𝑖−1 以生成状态 Σ𝑖,用作初始区块中的下一笔交易执行状态。 整个区块的执行结果是区块中每笔交易的执行结果的有序组合。

每笔交易都根据一个工作流进行处理,该工作流包括验证交易中的字节码和检查交易发送者的签名等步骤。 [2] 中更详细地解释了执行单个交易的整个工作流程。

现有的区块链一个块中的交易由 VM 顺序执行,但 Move 语言被设计为支持并行执行。 原则上,执行一个交易可以产生一组读取以及一组写入结果的𝐸。 区块中的每个交易都可以推测性地并行执行,并且仅当其读/写集与块中的另一个交易冲突时才重新执行。检查冲突很简单,因为 Move 的树内存模型允许我们使用其访问路径唯一地标识全局内存单元。 如果虚拟机性能成为 Libra 区块链的瓶颈,我们将在未来探索推测执行方案。