入门 Sui Move 开发:2. 常用命令、编写并发布 Hello World 合约

  • greyhao
  • 更新于 1天前
  • 阅读 195

开发中常用的命令,并创建发布第一个 Sui 合约项目 hello world

在第一节入门 Sui Move 开发:1. 环境安装 中我们已经成功安装了 Sui Move 开发环境及开发 IDE。 本节介绍在开发中常用的命令并创建发布第一个 Sui 合约项目 hello world

常用命令

sui client 常用命令

为了方便新手使用时快速查找,下面按命令的功能进行了粗略分类,但是实际上没有这样的概念。

  • 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 常用命令

  • sui move new <package_name> 创建一个项目,项目名就是包名,一个包里可以有多个模块

  • sui move test 执行单元测试,需要在创建的项目的根目录执行

  • sui move build 编译项目,同样需要在创建的项目的根目录执行

创建 Hello World 项目

接下来终于可以写 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 代码

打开文件 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 网络发布,可以使用 testnetdevnet

*通过 `` 所在的行确认所在的网络**

image.png

当前地址

使用 sui client active-address 确认当前地址,也是就是接下来会发布合约的地址。

领水

使用 sui client envs 领水,如下输出就是领取成功了(可以查询余额进行确认)。

image.png

发布

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

image.png

我们可以找到 Object ChangesPublished Objects(发布合约一定有这个值) 对应的值,用这个值去浏览器上查看。

在链上浏览器查看

在浏览器上可以查到链上所有的数据。 Sui 有以下两个比较好用的浏览器,可以根据自己的习惯进行选择使用哪儿个。

我这里使用 suiscan ,打开网站后搜索上一步中复制的 Published Objects 的值。就可以看到我们发布的合约的所有信息。

image.png

调用合约方法

在合约中我们定义了一个 mint 方法,接下来我们使用上面介绍的命令:sui client call [OPTIONS] --package <package id> --module <module名称> --function <函数名> --gas-budget <GAS_BUDGET> 来调用这个 mint 方法。 命令中需要的参数:

  • package id 就是 Published Objects
  • module名称 就是 hello_world
  • 函数名 就是 mint
  • --gas-budget <GAS_BUDGET> 在现在的版本可以省略。

最终命令:sui client call --package <你发布合约的合约 ID> --module hello_world --function mint

执行成功后同样可以看到很多输出,我们直接找 Object Changes -> Created Objects -> ObjectID

同样复制这个值在浏览器中查看。

image.png

到这里我们就已经成功编写和发布合约,并调用了合约中的方法。

合约代码我添加了相关注释,如果你现在看不懂没有关系,我们后面会详细介绍。

如果你对文章中内容有任何疑问可以留言。

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
greyhao
greyhao
江湖只有他的大名,没有他的介绍。