Sui 项目结构
Sui Module 与 Package
-
一个 Sui module 是一系列函数 functions 和类型 types 打包后的集合,被开发者发布到一个特定的地址下
-
Sui 的标准库发布在
0x2
地址下,而用户发布 modules 的地址则是 Sui Move 虚拟机分配的伪随机地址 -
Module 开头是
module
关键词,后面跟着 module 名和花括号 {} ,module 的内容放置在花括号内。
module hello_world {
// module 内容
}
-
已发布的 modules 在 Sui 里是 immutable objects; 意味着不能被更改、转移或删除。因为不可变的特性,该 object 不再由某个人拥有,因此可以被任何人使用。
-
Move package 是一系列 modules 的集合,外加上 Move.toml 的配置文件
初始化一个 Sui Move Package
使用下面的 Sui CLI 指令来快速创建一个 Sui package 框架:
sui move new <PACKAGE NAME>
在我们这个单元的例子,会创建一个 Hello World 项目:
sui move new hello_world
这条指令创建了:
- 项目根文件夹
hello_world
Move.toml
配置文件- 用于存放 Sui Move 智能合约的
sources
子文件夹
Move.toml
配置结构
Move.toml
是一个package的配置文件,会被自动创建于项目的根目录。
Move.toml
包含三个部分:
[package]
声明了该 package 的命名和版本数[dependencies]
声明了该 package 依赖的其他 packages, 包括 Sui 标准库和其他第三方依赖库[addresses]
声明了该 packages 源代码中地址的别名
示例 Move.toml
文件
这是使用 Sui CLI 命令生成 hello_world
package 时自动生成的配置文件 Move.toml
:
[package]
name = "hello_world"
version = "0.0.1"
edition = "2024.beta"
[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }
[addresses]
hello_world = "0x0"
我们可以看到,在这里 Sui 标准库使用了一个 Github 仓库来声明,但其实也可以使用本地 binary 文件的相对路径或绝对路径来声明,比如:
[dependencies]
Sui = { local = "../sui/crates/sui-framework/packages/sui-framework" }
Sui Module 和 Package 的命名
-
Sui Move 的 module 和 package 命名跟随 Rust 命名规范
-
Sui Move module 和 package 命名通常使用蛇形命名法 snake casing, i.e. this_is_snake_casing.
-
Sui module 名称会使用 Rust 路径分隔符
::
来分开 package 名和 module 名, 比如:unit_one::hello_world
-hello_world
module inunit_one
packagecapy::capy
-capy
module incapy
package
-
有关 Move 命名约定的更多信息, 请查看 Move Book 中的风格部分