# 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

# 网络

  1. 查看当前添加的网络列表
    sui client envs
    输出如下,其中 alias 为网络别名,url 为网络地址,active 为当前激活的网络
alias url active
testnet https://fullnode.testnet.sui.io:443 *
  1. 添加网络
    如果前面的网络中,没有测试网 (testnet),则可以自行添加。
    sui client new-env --alias=testnet --rpc https://fullnode.testnet.sui.io:443
    输出如下:
    Added new Sui env [testnet] to config.
    可以再执行一次 sui client envs ,来查看是否添加到列表中。
  2. 切换当前环境的网络
    sui client switch --env testnet
    输出如下:
    Active environment switched to [testnet]
    输出提示切换成功,也可以再执行一次 sui client envs ,来查看当前活跃网络是否是 testnet。

# 地址

  1. 查看地址列表
    sui client addresses
    命令和环境类似,执行后的输出如下:
alias address active address
silly-plasma 0x02f1d******fd5934f959e441 *
  1. 切换当前活跃的地址
    sui client active-address
    输出如下,直接将当前活跃的地址全部输出了:
    0x02f1d******fd5934f959e441

# 编译 & 发布 & 调用

  1. 新建包
sui move new 03_hello_move

该命令不会有输出,会在当前路径创建一个 sui package 文件夹,其内容如下:

❯ hello_move
hello_move
├── Move.toml
└── sources

1 directory, 1 file

我们将代码文件放在 sources 文件夹下即可。

  1. 编译
    先进入到 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

  1. 发布
    发布前,需要注意当前激活的网络和地址。在 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 输出信息,其中 OwnerImmutable 的对象,就是发布的包。可以看到对应的 package ID

  1. 调用函数
    我们可以调用刚才发布的合约中的 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