# letsmove-task1
记录 GitHub 上《letsmove》项目的学习经历
文章参考作者:
Alva(https://learnblockchain.cn/people/18887)
Elemen(https://404ll.github.io/)
# 前置资料
入门书籍(中文版)
-[轻松入门 Sui]: https://easy.sui-book.com/chapter_1.html
Sui-Move 语法参考手册 (中文版):
-[Move 参考手册]: https://reference.sui-book.com/introduction.html
Sui - 钱包安装(Google)
-[Sui wallet]: https://chromewebstore.google.com/detail/sui-allet/opcgpfmipidbgpenhmajoajpbobppdil
Sui - 开发者文档
-[开发者文档]: https://docs.sui.io/guides/developer
Sui - 官方知识库(github)
-[github]: https://github.com/move-cn/movesui
# Sui Cli 基本操作
参照文档:Sui CLI: Client
# 网络
- 查看当前添加的网络列表
sui client envs
输出如下,其中 alias 为网络别名,url 为网络地址,active 为当前激活的网络
| alias | url | active |
|---|---|---|
| testnet | https://fullnode.testnet.sui.io:443 | * |
- 添加网络
如果前面的网络中,没有测试网 (testnet),则可以自行添加。
sui client new-env --alias=testnet --rpc https://fullnode.testnet.sui.io:443
输出如下:
Added new Sui env [testnet] to config.
可以再执行一次sui client envs,来查看是否添加到列表中。 - 切换当前环境的网络
sui client switch --env testnet
输出如下:
Active environment switched to [testnet]
输出提示切换成功,也可以再执行一次sui client envs,来查看当前活跃网络是否是 testnet。
# 地址
- 查看地址列表
sui client addresses
命令和环境类似,执行后的输出如下:
| alias | address | active address |
|---|---|---|
| silly-plasma | 0x02f1d******fd5934f959e441 | * |
- 切换当前活跃的地址
sui client active-address
输出如下,直接将当前活跃的地址全部输出了:
0x02f1d******fd5934f959e441
# 编译 & 发布 & 调用
- 新建包
sui move new 03_hello_move
该命令不会有输出,会在当前路径创建一个 sui package 文件夹,其内容如下:
❯ hello_move
hello_move
├── Move.toml
└── sources
1 directory, 1 file
我们将代码文件放在 sources 文件夹下即可。
- 编译
先进入到 package 对应的路径,然后调取终端执行以下命令:
sui move build
如果代码没有基本错误,输出如下:
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING 03_hello_move
同时注意到,当前路径下,多了个 build 文件夹和 Move.lock 文件
可能会出现的问题是:
Failed to build Move modules: Failed to resolve dependencies for package 'task1'
Caused by:
0: Fetching 'Sui'
1: Failed to fetch to latest Git state for package 'Sui', to skip set --skip-fetch-latest-git-deps | Exit status: exit code: 128.
解决方法:
将 Move.toml 中的 [dependencies] Sui = { git = “https://github.com/MystenLabs/sui.git“ 的 github 替换为 gitee
- 发布
发布前,需要注意当前激活的网络和地址。在 package 对应的路径下,执行以下命令,将包发布到对应的网络
sui client publish --gas-budget 100000000
这里的 gas-budget 指运行模块初始化程序是的 gas 费用预算。注意不能低于一定的值
可能会出现的问题是:
gas 不够
执行上述命令时报错,先按照解决方法走一遍
解决方法:
浏览器领水:https://mirror.xyz/niaoge.eth/5y4SCUvQ5s35p-5wOI8raK_geBLmkMhH55gSGThWddA
address 确保为 active-address 生成的活跃地址。
如果发布成功,则会输出以下内容,注意:每次执行时输出内容中某些值会有所不同,但是内容结构大致相同。
输出被分为了多个块
Transaction Data
Transaction Effects
Transaction Events
Object Changes
Balance Changes
找到 Transaction Effects 块中的 Created Objects 输出信息,其中 Owner 为 Immutable 的对象,就是发布的包。可以看到对应的 package ID
-
调用函数
我们可以调用刚才发布的合约中的 say_hello 函数,来获得一个 object。首先将刚才的 package ID 保存为变量
export PACKAGE_ID=<package object ID>
然后使用相关命令
sui client call --package $PACKAGE_ID --module hello --function say_hello --gas-budget 300000000