4 个版本
0.0.1-sol5 | 2020 年 5 月 1 日 |
---|---|
0.0.1-sol4 | 2019 年 10 月 25 日 |
0.0.0 | 2019 年 8 月 6 日 |
0.0.0-sol15 | 2019 年 7 月 27 日 |
#5 in #libra
109 下载/每月
用于 15 个crate (12 个直接使用)
1MB
22K SLoC
id: vm title: 虚拟机 custom_edit_url: https://github.com/libra/libra/edit/master/language/vm/README.md
MoveVM 核心库
MoveVM 执行用 Move 字节码表示的交易。有两个主要组件:核心虚拟机和虚拟机运行时。虚拟机核心包含虚拟机的底层数据类型——主要是文件格式及其抽象。还定义了气体计费逻辑抽象。
概述
MoveVM 是一种具有静态类型系统的堆栈机器。MoveVM 通过文件格式、验证(参考 字节码验证器 README)和运行时约束来遵守 Move 语言的规范。文件格式的结构允许定义模块、类型(资源和未限制类型)、函数。代码通过字节码指令表示,这些指令可能包含对外部函数和类型的引用。文件格式还强制实施某些语言的不变量,例如不透明类型和私有字段。从文件格式的定义中可以看出,模块为函数和类型定义了作用域/命名空间。类型是透明的,因为所有字段都是私有的,并且类型不包含任何函数或方法。
实现细节
MoveVM 核心crate提供了文件格式的定义以及与文件格式相关的所有实用工具。
- 对文件格式和字节码的简单 Rust 抽象(
libra/language/vm/src/file_format.rs
)。这些 Rust 结构在代码库中广泛使用。 - 文件格式的序列化和反序列化。这些定义了代码的链上二进制表示。
- 一些格式化功能。
- 文件格式的 proptest 基础设施。
- 气体成本/综合基础设施。
在 libra/language/vm/src/file_format.rs
中定义的 CompiledModule
和 CompiledScript
是 Move 模块 或 交易脚本 的顶级结构体。这些结构体提供了一个简单的文件格式抽象。此外,还定义了一系列 视图,以便轻松导航和检查 CompiledModule
和 CompiledScript
。
文件夹结构
.
├── cost-synthesis # Infrastructure for gas cost synthesis
├── src # VM core files
├── tests # Proptests
├── vm_genesis # Helpers to generate a genesis block, the initial state of the blockchain
└── vm_runtime # Interpreter and runtime data types (see README in that folder)
依赖项
~15–27MB
~383K SLoC