虚拟机 VM
Move VM 执行以 Move 字节码表示的交易。它有两个核心包:核心 VM 和 VM 运行时。VM 核心包含 VM 的低级数据类型——主要是文件格式及其抽象。此处还定义了燃气计量(Gas metering???)逻辑抽象。
概述
MoveVM 是具有静态类型系统的堆栈机。 MoveVM 从几个方面来约束 Move 语言规范,包括混合文件格式、验证(可参阅验证器 README)和运行时的约束。文件格式的结构允许定义模块,类型(资源和非限制类型)和函数。代码通过字节码指令表示,字节码指令可以引用外部函数和类型。文件格式还强加了语言的某些不确定量,例如 opaque 类型和私有字段。根据文件格式的定义,我们知道可以通过模块(Modules)来定义函数或类型的作用域(Scope)或者说命名空间(Namespaces,译注:就是包名)。如果所有字段都是私有的,则类型是不透明的,并且类型不带任何函数或方法。
实施细节
Move VM 核心包提供文件格式的定义还有相关的实用程序:
- 一个简单的 Rust 抽象文件格式(libra / language / vm / src / file_format.rs)和字节码。这些 Rust 结构广泛应用于代码库中。
- 文件格式的序列化和反序列化,定义了代码的 on-chain 二进制表示。
- 一些漂亮的打印功能。
- 文件格式的 proptest 基础结构。
- 天然气成本/综合基础设施。
libra / language / vm / src / file_format.rs 中的 CompiledModule 和 CompiledScript 定义分别是 Move Module 或 Transaction Script 的顶级结构。这些结构提供了对文件格式的简单抽象。此外还定义了一组视图,以便轻松浏览 CompiledModules/CompiledScripts。
文件夹结构
├──cost_synthesis #天然气成本合成基础设施
├──src # VM 核心文件
├──测试 #Proptests
├──vm_genesis # 帮助生成一个创世块,即区块链的初始状态
└──vm_runtime # 解释器和运行时数据类型(参见该文件夹中的 README)