Sui.

帖子

分享您的知识。

article banner.
Meaning.Sui.
Jul 08, 2025
文章

深入分析 Move VM 技术细节

Sui:深度分析 Move VM 技术细节

在当今的区块链技术领域,Move VM作为关键技术组件,在Sui中起着重要作用.
本文对Move VM的技术细节进行了深入分析,包括:

-初始化过程 -代码缓存机制 -模块和脚本发布 -函数执行 -二进制格式分析


1. 移动 VM 初始化

Move VM 的初始化简单而高效. Loader它只需要一个Mutex实例——本质上是几个HashMap受保护的空表,比如Vec和.

此过程成本低廉,为所有虚拟机操作奠定了基础.

Move VM 使用按需代码加载.
代码未预加载;相反,它是在函数或脚本执行期间在运行时提取的.

加载后,模块/脚本将被缓存并重复使用,从而显著提高性能.


2. 代码缓存机制

2.1 首次加载

当虚拟机首次加载模块时:

  1. 查询数据存储以获取二进制数据 (Vec<u8>)
  2. 反序列化和验证数据以确保准确性和完整性 3.使用相同的流程加载所有依赖关系
  3. 将模块与其依赖项关联起来
  4. 缓存模块通过,以便在Loader虚拟机生命周期中重复使用

2.2 缓存一致性

-系统事务(如硬升级)可能会破坏代码缓存的一致性. -发生这种情况时,客户端应暂停交易处理并重新启动虚拟机. -客户必须将其DataStore视图与加载的代码保持一致,并在需要时重新实例化虚拟机.


3. 模块发布流程

要发布模块,客户端调publish_module用:

-序列化模块字节 -发件人地址 -参考文献 GasMeter

步骤:

  1. 反序列化 -如果失败 → 返回错误.

  2. 地址验证 -模块地址必须与发件人地址相匹配 → 否则MODULE_ADDRESS_DOES_NOT_MATCH_SENDER.

3.重复检查 DUPLICATE_MODULE_NAME-重新发布同名模块 → 错误.

  1. 加载验证 -确保以后可以加载模块. 失败?返回错误.

  2. 写入存储空间 -验证后,序列化模块将被保存并视为有效.


4. 脚本执行机制

Move 中的脚本本质上是一次性函数,通常用于执行事务.

步骤:

  1. 加载脚本和主要功能 -计算sha3_256脚本的哈希值. -使用哈希来检查它是否在缓存中. -如果未缓存 → 加载并验证. -验证主函数类型参数.

  2. 生成参数列表 -Signer基于发件人账户的值. -其他参数必须匹配允许的类型 → 否则TYPE_MISMATCH.

3.执行脚本 -VM 调用解释器. -出错时 → 交易失败并返回错误. -否则 → 返回成功.


5. 脚本函数执行

在 Move VM v2.0 中引入.

-像普通脚本一样工作 -Source 是链上script模块内的-visible 函数

步骤:

  1. 使用ModuleId和函数名称加载函数
  2. 检查能见度 (script) -脚本不可见?→ EXECUTE_SCRIPT_FUNCTION_CALLED_ON_NON_SCRIPT_VISIBLE 3.执行与普通脚本相同

6. 一般函数执行

Move VM 允许您按名称执行模块中的任何功能.

函数名称在模块中是唯一的→ 无需签名.

执行步骤:

  1. 加载模块 -如果出错 → 返回失败

  2. 解析功能 -如果没有找到 → FUNCTION_RESOLUTION_FAILURE -检查类型参数是否匹配 → 否则错误

3.生成参数列表 -将所有参数与允许的类型相匹配 → 否则 TYPE_MISMATCH

  1. 执行 -解释器运行该函数 -VM 返回结果

7. 二进制格式分析

7.1 总体架构

-所有模块/脚本都以二进制形式存在** -模块 = 函数和结构的集合 -脚本 = 简单入口点(无返回值)

使用ULEB128进行整数压缩,使用大小前缀表示向量.

7.2 二进制标头

3 个组件:

-魔法:固定 4 字节 → 0xA1, 0x1C, 0xEB, 0x0B -版本:4 字节小端整数 -表格数量ULEB128

7.3 表格标题

每个标题包括:

-TableKind(1 字节) -TableOffset(ULEB128) -TableLength(ULEB128)

表格必须是连续的,不重叠.

7.4 表格详情

表格描述:

-MODULE_HANDLES: 通过索引查看模块位置 -ADDRESS_IDENTIFIERSIDENTIFIERSSTRUCT_HANDLESFUNCTION_HANDLES:类型和函数元数据 -FUNCTION_INSTANTIATIONS,SIGNATURES,CONSTANT_POOL: 实例化和常量

7.5 辅助定义

-Type Parameter Kind: 1 字节 →ALL,COPYABLE, RESOURCE -SignatureToken: 1 字节表示类型(U8``U64``STRUCT、、等) Bytecodes-POP: 1 字节操作码 + 可选有效载荷 → 例如、、RETBR_TRUE

7.6 脚本特定的二进制数据

-缺少脚本 FUNCTION_DEFINITIONS -取而代之的是,他们直接嵌入条目信息: -类型参数数量和类型 -参数类型索引 -字节码长度和正文


✅ 结论

Move VM为区块链执行提供强大、安全和高效的环境.
通过理解:

-虚拟机初始化 -缓存策略 -函数/模块执行 -二进制结构

开发人员可以优化其基于Move的应用程序并有效地调试问题,从而为Sui生态系统的发展做出贡献.

  • Sui
  • Architecture
1
分享
评论
.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

1170帖子3665答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

获取声誉积分,并因帮助 Sui 社区成长而获得奖励。

奖励活动八月