Manifest

Move.toml 是描述 及其依赖关系的清单文件,采用 TOML 格式,包含多个部分,其中最重要的是 [package][dependencies][addresses]

[package]
name = "my_project"
version = "0.0.0"
edition = "2024"

[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }

[addresses]
std =  "0x1"
alice = "0xA11CE"

[dev-addresses]
alice = "0xB0B"

各部分详解

Package

[package] 部分用于描述包。该部分的字段不会被发布到链上,但会用于工具和版本管理;它还指定了编译器使用的 Move 版本。

  • name - 导入时包的名称;
  • version - 包的版本,可用于版本管理;
  • edition - Move 语言的版本;目前唯一有效的值是 2024

Dependencies

[dependencies] 部分用于指定项目的依赖关系。每个依赖关系都以键值对的形式指定,键是依赖的名称,值是依赖的规范。依赖规范可以是 git 仓库的 URL 或本地目录的路径。

# git 仓库
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }

# 本地目录
MyPackage = { local = "../my-package" }

包还可以从其他包导入地址。例如,Sui 依赖项将 stdsui 地址添加到项目中。这些地址可以在代码中用作地址的别名。

使用 override 解决版本冲突

有时候依赖项会有相同包的不同版本之间的冲突。例如,如果有两个依赖项使用了不同版本的 Sui 包,可以在 [dependencies] 部分使用 override 字段来解决冲突。在依赖关系中指定的版本将覆盖依赖项本身指定的版本。

[dependencies]
Sui = { override = true, git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }

Dev-dependencies

可以在清单中添加 [dev-dependencies] 部分,用于在开发和测试模式下覆盖依赖关系。例如,如果想在开发模式下使用不同版本的 Sui 包,可以在 [dev-dependencies] 部分添加自定义的依赖规范。

Addresses

[addresses] 部分用于为地址添加别名。可以在此部分指定任何地址,然后在代码中作为别名使用。例如,如果将 alice = "0xA11CE" 添加到此部分,可以在代码中使用 alice 代替 0xA11CE

Dev-addresses

[dev-addresses] 部分与 [addresses] 类似,但仅在测试和开发模式下有效。需要注意的是,这部分无法引入新的别名,只能覆盖现有的别名。因此,在上面的示例中,如果将 alice = "0xB0B" 添加到此部分,那么在测试和开发模式下,alice 地址将是 0xB0B,而在常规构建中则是 0xA11CE

TOML 样式

TOML 格式支持两种表格样式:内联样式和多行样式。上面的示例使用的是内联样式,但对于依赖关系,多行样式也是可行的。

# 内联样式
[dependencies]
Sui = { override = true, git = "", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }
MyPackage = { local = "../my-package" }
# 多行样式
[dependencies.Sui]
override = true
git = "https://github.com/MystenLabs/sui.git"
subdir = "crates/sui-framework/packages/sui-framework"
rev = "framework/testnet"

[dependencies.MyPackage]
local = "../my-package"

进一步阅读