一、Sui 开发基础介绍

  • Ch1hiro
  • 更新于 2024-11-15 11:32
  • 阅读 423

基础命令介绍

Sui_logo.png

1、Sui cli 命令

连接到 Sui 网络

运行以下命令将 sui 客户端连接到 Sui 网络。

sui client

第一次启动 sui 客户端时如果没有 client.yaml 文件,控制台可能会提示如下错误,按照提示输入 y 即可:

Config file ["<PATH-TO-FILE>/client.yaml"] doesn't exist, do you want to connect to a Sui Full node server [y/N]?

并按 Enter 连接到默认的测试网络。

Sui Full node server URL (Defaults to Sui Devnet if not specified) :

接下来输入 0、12 选择 keypair 生成方案(密钥方案),生成钱包地址:

Select key scheme to generate keypair (0 for ed25519, 1 for secp256k1, 2 for secp256r1):

Sui 返回类似以下内容的消息(取决于您选择的密钥方案),其中包括地址和该地址的 12 个字的助记词:

Generated new keypair for address with scheme "ed25519" [0x24ddd392f33ab29f2c4a557e0e9fe0943760a078c41487cf807c158ab20067f3]
Secret Recovery Phrase : [xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx]

生成钱包地址

生成钱包地址是开始使用 Sui 网络的第一步,钱包地址用于接收和管理 SUI 代币以及其他数字资产。我们在上一步可以生成钱包地址,也可以使用以下命令生成一个新的钱包地址,请选择任意的密钥方案(ed25519 或者 secp256k1 或者 secp256r1)

sui client new-address [ed25519 | secp256k1 | secp256r1]

执行该命令后,Sui CLI 将生成一个新的钱包地址及助记词信息,并显示在终端中。你可以将此地址用于接收 SUI 代币。

查看钱包地址

在开发过程中,可能需要查看自己的钱包地址。使用以下命令可以列出所有生成的钱包地址,以及当前激活的地址(以星号标注):

sui client addresses

获取 SUI 代币

在测试网中,你可以免费获取 SUI 代币来进行开发和测试。使用以下命令请求测试代币:

sui client faucet

该命令将向你的钱包地址分发一定数量的测试代币。你可以多次通过这个命令获取足够的代币用于各种测试操作。

查看链上数据

查看当前用户所拥有的对象,可以使用以下命令:

sui client objects

更多的 sui cli 命令,我们可以使用如下命令查询:

sui client --help

2、初始化 Sui 项目

创建新的项目

要创建一个新的 Sui 应用程序,首先需要使用 sui move new 命令,后面跟上应用程序的名称。以下是创建名为 hello_move 的程序的命令:

sui move new hello_move

使用 sui move new 命令后,将自动为应用程序创建如下目录结构,并预创建所有必要的文件:

1└── hello_move
2    ├── Move.toml     # Package 配置文件
3    ├── sources       # 源文件目录
4    │   └── hello_move.move
5    └── tests         # 测试文件目录
6        └── hello_move_tests.move

Move.toml 文件定义了 package 的配置设置,包括包的基本信息、依赖信息、命名地址等内容。

sources/ 目录包含 .move 扩展名的 Move 源文件,实现了智能合约的具体逻辑。

tests/ 目录包含测试文件,这些文件不包括在常规构建过程中,仅在测试和开发模式下使用。

编译 Package

在 Sui Move 语言中,程序会在发布到区块链之前被组织成一个包 (package)。包由唯一地址所标识,包内有包含函数、结构体、类型等的模块 (module)。我们在 sources/hello_move.move 文件中填入以下内容,对于 hello_move::hello_move 而言,第一个 hello_move 为包名,第二个 hello_move 为模块名称,该模块只有一个简单的 hello_world 函数,返回指定的字符串:

module hello_move::hello_move {

    use std::string::{Self, String};

    public fun hello_world() : String {
        string::utf8(b"hello world")
    }
}

在将包发布到区块链之前,需要将源文件编译成字节码。编译过程如下:

# 在 hello_move 文件夹中运行
sui move build

# 或者,如果你没有进入该目录,可通过 —path 设置对应的编译目录。
sui move build --path hello_move

编译成功后,终端将显示相关的编译信息:

INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING hello_move

运行测试

在运行测试前,应确保在 tests/ 文件夹中有正确的测试代码。Move 编译器支持在 Move 语言中编写的测试,并自动发现标有 #[test] 属性的测试。

tests/hello_move_test.move 文件中的内容替换为以下测试模块:

#[test_only]
module hello_move::hello_move_test {
    use hello_move::hello_move;

    const ENotEqual: u64 = 1;

    #[test]
    fun test_hello_move() {
        assert!(hello_move::hello_world() == b"hello world".to_string(), ENotEqual);
    }
}

现在我们已经准备好测试,执行以下命令来编译 package 并运行测试:

sui move test

如果测试执行成功,终端将显示以下信息:

INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING hello_move
Running Move unit tests
[ PASS    ] 0x0::hello_move_test::test_hello_move
Test result: OK. Total tests: 1; passed: 1; failed: 0
点赞 2
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ch1hiro
Ch1hiro
一名Web3爱好者