入门 Sui Move 开发:2. 常用命令、编写并发布 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
// 添加开发网络并设置别名为 devnetsui 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
网络发布,可以使用 testnet
或 devnet
。
*通过 `` 所在的行确认所在的网络**
当前地址
使用 sui client active-address
确认当前地址,也是就是接下来会发布合约的地址。
领水
使用 sui client envs
领水,如下输出就是领取成功了(可以查询余额进行确认)。
发布
首先需要进入到项目的根目录 cd hello_world
,然后使用 sui client publish
发布。 成功发布之后,会看到输出很多内容。
我们可以找到 Object Changes
中 Published Objects
(发布合约一定有这个值) 对应的值,用这个值去浏览器上查看。
在链上浏览器查看
在浏览器上可以查到链上所有的数据。 Sui 有以下两个比较好用的浏览器,可以根据自己的习惯进行选择使用哪儿个。
- suivision
- suiscan
我这里使用 suiscan
,打开网站后搜索上一步中复制的 Published Objects
的值。就可以看到我们发布的合约的所有信息。
调用合约方法
在合约中我们定义了一个 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
。
同样复制这个值在浏览器中查看。
到这里我们就已经成功编写和发布合约,并调用了合约中的方法。
合约代码我添加了相关注释,如果你现在看不懂没有关系,我们后面会详细介绍。
如果你对文章中内容有任何疑问可以留言。
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。