Move:Web3 语言与运行时
Aptos 区块链由运行共识协议的验证者节点组成。共识就交易顺序以及交易在 Move 虚拟机(MoveVM)上执行后的输出达成一致。每个验证者将当前账本状态和区块输入虚拟机;MoveVM 产生变更集(存储增量)。共识提交该输出后,结果便公开可见。本页介绍 Move 的核心概念及其在 Aptos 上的应用。
什么是 Move?
Section titled “什么是 Move?”Move 是一门强调稀缺性和访问控制的 Web3 编程语言。资产由或存储于 resource 中。稀缺性是默认行为:除非字节码显式授予 copy 或 drop 能力,struct 不能被复制或丢弃。
访问控制来自账户和模块可见性。模块是可以创建、存储或转移资产的库或程序。只有 public(以及 public(friend))函数可被其他模块调用。除非 struct 有 public 构造函数,否则只有定义它的模块能创建它。字段只能在该模块内,或通过 public 访问器读写。带 key 的 struct 只能从定义它的模块进入全局存储。带 store 的 struct 可以放在另一个 store 或 key 值中,包括定义模块之外。
交易发送者是 signer,即账户的经验证所有者。signer 拥有 Move 中最高权限,是唯一能向账户发布资源的实体。模块作者也可以要求 signer 才能读取或更新账户下的资产。
与其他 VM 的比较
Section titled “与其他 VM 的比较”| Aptos / Move | Solana / SeaLevel | EVM | Sui / Move | |
|---|---|---|---|---|
| 数据存储 | 存储在全局地址或所有者账户中 | 存储在与程序关联的所有者账户中 | 存储在合约账户中 | 存储在全局地址 |
| 并行化 | 运行时由 Block-STM 推断 | 要求指定所访问的所有数据 | 通常为串行 | 要求指定所访问的所有数据 |
| 交易安全 | 序列号或无序交易 nonce | 交易唯一性 | nonce | 交易唯一性 |
| 类型安全 | 模块 struct 和泛型 | 程序 struct | 合约类型 | 模块 struct 和泛型 |
| 函数调用 | 静态分派,以及 函数值(Move 2.2) | 静态分派 | 动态分派 | 静态分派 |
| 已认证存储 | 是 | 否 | 是 | 否 |
| 对象全局可访问性 | 是 | 不适用 | 不适用 | 否;对象可嵌套在其他对象中 |
Aptos Move 功能
Section titled “Aptos Move 功能”每个 MoveVM 部署都可通过适配器扩展核心 Move。Aptos 还提供一组框架模块,类似于 CPU 上的操作系统。
Aptos Move 适配器包括:
- Move 对象 — 在一个链上地址存放一组异构资源的可扩展模型(AIP-10)。
- 用于构建可扩展、保护隐私应用的密码学原语。
- 资源账户 — 没有交互式私钥的可编程账户,用于 DAO、共享账户和应用自有模块。
- 表,用于在账户下大规模存储键值数据。
- 通过 Block-STM 并行执行,无需声明访问列表。
- 多代理交易,使一笔交易可携带多个不同的
signer。 - 函数值(Move 2.2),即一等函数,使用时须遵守重入规则。
- 链上随机数,在 Move 中提供不可偏置的随机值。
Aptos 框架包括:
- 同质化资产标准(AIP-21)— 当前代币模型。新资产应优先使用它。
- Coin 标准 — 较早的类型参数代币模型。视为遗留。APT 与同质化资产表示配对;新账户通常把 APT 放在主同质化存储中,而不是
CoinStore。 - Aptos 数字资产(代币对象),由 AIP-11 和 AIP-22 定义。
- 质押和委托。
type_of,用于在运行时查看类型的地址、模块和 struct 名称。- 时间戳服务,提供单调递增的 Unix 时间。
- 智能合约概览 — Aptos 上的 Move、编译器和框架
- Move Book — 语言参考
- Framework Book —
0x1模块的生成文档 - 账户和资源 — Move 状态如何存储