4 个版本

0.0.1-sol52020 年 5 月 1 日
0.0.1-sol42019 年 10 月 25 日
0.0.0 2019 年 8 月 6 日
0.0.0-sol152019 年 7 月 27 日

#5 in #libra

Download history 29/week @ 2024-03-11 39/week @ 2024-03-18 34/week @ 2024-03-25 75/week @ 2024-04-01 30/week @ 2024-04-08 28/week @ 2024-04-15 35/week @ 2024-04-22 24/week @ 2024-04-29 25/week @ 2024-05-06 42/week @ 2024-05-13 24/week @ 2024-05-20 33/week @ 2024-05-27 25/week @ 2024-06-03 23/week @ 2024-06-10 20/week @ 2024-06-17 41/week @ 2024-06-24

109 下载/每月
用于 15 个crate (12 个直接使用)

Apache-2.0

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 中定义的 CompiledModuleCompiledScript 是 Move 模块交易脚本 的顶级结构体。这些结构体提供了一个简单的文件格式抽象。此外,还定义了一系列 视图,以便轻松导航和检查 CompiledModuleCompiledScript

文件夹结构

.
├── 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