开发中常用的命令,并创建发布第一个 Sui 合约项目 hello world
在第一节入门 Sui Move 开发:1. 环境安装 中我们已经成功安装了 Sui Move 开发环境及开发 IDE。
本节介绍在开发中常用的命令并创建发布第一个 Sui 合约项目 hello world。
为了方便新手使用时快速查找,下面按命令的功能进行了粗略分类,但是实际上没有这样的概念。
sui client 连接到 sui 网络,首次执行按提示输入会创建钱包(后续领水、合约发布都是在跟这个地址交互。可以创建多个钱包,通过命令切换)sui client envs 查看当前连接的网络(Sui 官方提供了开发网、测试网、主网)
sui client new-env --alias <ALIAS> --rpc <RPC-SERVER-URL> 添加网络并设置别名
sui client new-env --alias=devnet --rpc https://fullnode.devnet.sui.io:443 // 添加开发网络并设置别名为 devnet
sui client new-env --alias=mainnet --rpc https://fullnode.mainnet.sui.io:443 // 添加主网并设置别名为 mainnet 
sui client switch --env <ALIAS> 切换网络
sui client switch --env mainnet // 切换到主网
sui client gas 查看活跃地址余额以及 gasCoinId
sui client balance 查看活跃地址余额
sui client new-address ed25519 test 生成新钱包,test 为钱包别名可以省略
sui client switch --address <address别明> 切换当前活跃地址(活跃地址也就是执行操作与之交互的地址)
sui client active-address 查看当前活跃的地址
sui client faucet 通过水龙头来获取 sui 代币,合约发布、执行合约都需要 sui 代币作为 gas 费(可以理解链上交互都需要手续费),注意:仅可在 devnet 和 testnet 网络上获取
sui client verify-bytecode-meter 检查字节码是否超过规定值,发布之前执行,避免消耗不必要 gas
sui client publish 发布合约,发布之前会自动执行编译,切记:发布之前要确定当前网络和活跃地址
调用已发布的包的方法:
调用一个没有参数的函数
sui client call [OPTIONS] --package <package id> --module <module名称> --function <函数名> --gas-budget <GAS_BUDGET>
调用带参数的函数
sui client call [OPTIONS] --package <package id> --module <module名称> --function <函数名> --gas-budget <GAS_BUDGET>  --args <参数1> <参数2>
sui move new <package_name>  创建一个项目,项目名就是包名,一个包里可以有多个模块
sui move test 执行单元测试,需要在创建的项目的根目录执行
sui move build 编译项目,同样需要在创建的项目的根目录执行
接下来终于可以写 Hello World 了。接下来会用到上面所讲的命令。
hello world执行命令:sui move new hello_world,执行之后会创建 hello_world 目录及子目录,具体结构和说明如下:
hello_world
├── Move.toml   // 清单文件,定义包名、版本、依赖等信息
├── sources     // 存放模块代码的目录,一个包里可以有多个模块
│   └── hello_world.move // 默认创建的和包名同名的模块文件
└── tests        // 存放测试单元测试文件的目录
    └── hello_world_tests.move // 默认创建的和包名同名的模块单元测试文件
打开文件 hello_world.move,修改内容如下:
/// Module: hello_world
module hello_world::hello_world {
  // 导入需要使用的模块中的结构体和方法
  use std::string::{String, utf8};
  // 定义结构体 Hello,Hello 中有两个字段:id、text,并且 Hello 有 key、strore 能力
  public struct Hello has key, store {
    id: UID,
    text: String
  }
  // 定义 mint 方法,
  public entry fun mint(ctx: &mut TxContext) {
    // 定义一个 Hello 结构体的实例对象
    let hello = Hello {
      id: object::new(ctx),
      text: utf8(b"hello world, hello Sui!")
    };
    // 将 hello 转给当前发起交易的地址
    transfer::transfer(hello, tx_context::sender(ctx));
  }
}
使用 sui client envs 确认当前所在的网络,我这里使用 testnet 网络发布,可以使用 testnet 或 devnet。
*通过 `` 所在的行确认所在的网络**

使用 sui client active-address 确认当前地址,也是就是接下来会发布合约的地址。
使用 sui client envs 领水,如下输出就是领取成功了(可以查询余额进行确认)。

首先需要进入到项目的根目录 cd hello_world,然后使用 sui client publish 发布。
成功发布之后,会看到输出很多内容。

我们可以找到 Object Changes 中 Published Objects(发布合约一定有这个值) 对应的值,用这个值去浏览器上查看。
在浏览器上可以查到链上所有的数据。 Sui 有以下两个比较好用的浏览器,可以根据自己的习惯进行选择使用哪儿个。
我这里使用 suiscan ,打开网站后搜索上一步中复制的 Published Objects 的值。就可以看到我们发布的合约的所有信息。

在合约中我们定义了一个 mint 方法,接下来我们使用上面介绍的命令:sui client call [OPTIONS] --package <package id> --module <module名称> --function <函数名> --gas-budget <GAS_BUDGET> 来调用这个  mint 方法。
命令中需要的参数:
package id 就是 Published Objectsmodule名称 就是 hello_world函数名 就是 mint --gas-budget <GAS_BUDGET> 在现在的版本可以省略。最终命令:sui client call --package <你发布合约的合约 ID> --module hello_world --function mint
执行成功后同样可以看到很多输出,我们直接找 Object Changes -> Created Objects  -> ObjectID。
同样复制这个值在浏览器中查看。

到这里我们就已经成功编写和发布合约,并调用了合约中的方法。
合约代码我添加了相关注释,如果你现在看不懂没有关系,我们后面会详细介绍。
如果你对文章中内容有任何疑问可以留言。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!