Skip to content

在 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 语句导入目标模块。

步骤示例:

  1. Move.toml 中添加依赖:
toml
[dependencies]
my_dependency = { git = "https://github.com/example/my_dependency.git", rev = "main" }
  1. 在代码中导入依赖包的模块:
move
use my_dependency::some_module;

fun example() {
    some_module::some_function();
}

总结

  • 包是 Move 代码组织和部署的最高级别单元。
  • 每个包包含多个模块,并通过 Move.toml 定义包的元数据和依赖项。
  • 包可以发布到区块链上,发布后的包具有不可变性和唯一地址。
  • 通过在 Move.toml 中声明依赖,可以使用其他包中的模块。