包
在 Move 编程语言中,包是代码组织和部署的最高级别单元。一个包可以包含多个模块,这些模块共同实现特定的功能。包也是发布到区块链上的基本单位,并由一个唯一的地址标识。发布后的包可以被其他包依赖和调用。
包结构
本地包是一个包含以下内容的目录结构:
Move.toml
:包的清单文件,包含包的元数据,例如包名、版本、依赖项等信息。sources/
目录:包含包的源代码,每个模块通常对应一个.move
文件。tests/
目录(可选):包含包的测试代码。examples/
目录(可选):包含使用包的示例代码。
示例:
Move.toml
sources/
my_module.move
another_module.move
tests/
my_module_test.move
examples/
using_my_module.move
包清单文件 (Move.toml
)
Move.toml
是包的清单文件,使用 TOML 格式编写,定义包的元数据、依赖关系和地址映射。主要部分如下:
1. [package]
部分
描述包的基本信息,包括包名、版本等。例如:
toml
[package]
name = "my_package"
version = "1.0.0"
published-at = "0x1"
2. [dependencies]
部分
指定包的依赖项,可以是来自本地路径或 Git 仓库的包。例如:
toml
[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", rev = "devnet" }
my_local_package = { local = "../my_local_package" }
3. [addresses]
部分
定义包中使用的命名地址,用于引用模块和其他包。例如:
toml
[addresses]
my_package = "0x1"
another_package = "0x2"
包的发布
在开发过程中,包的地址通常设置为 0x0
(占位地址)。一旦包被发布到区块链上,它将获得一个唯一的地址。发布后的包具有以下特性:
- 不可变性:发布后的包内容不能修改。
- 唯一地址:包通过唯一的地址进行标识。
- 可交互性:其他用户可以通过发送交易与包中的模块和资源进行交互。
包的依赖与使用
要使用其他包中定义的模块,需要在 Move.toml
文件的 [dependencies]
部分中添加对该包的依赖。添加依赖后,可以通过 use
语句导入目标模块。
步骤示例:
- 在
Move.toml
中添加依赖:
toml
[dependencies]
my_dependency = { git = "https://github.com/example/my_dependency.git", rev = "main" }
- 在代码中导入依赖包的模块:
move
use my_dependency::some_module;
fun example() {
some_module::some_function();
}
总结
- 包是 Move 代码组织和部署的最高级别单元。
- 每个包包含多个模块,并通过
Move.toml
定义包的元数据和依赖项。 - 包可以发布到区块链上,发布后的包具有不可变性和唯一地址。
- 通过在
Move.toml
中声明依赖,可以使用其他包中的模块。