Alva

Alva

programmer
github
telegram
email

讓我們移動 - 學 Move 得 Sui(一)

letsmove

Let's Move 是一項學習 Move 語言的激勵計畫,鼓勵更多的人學習 Move 語言

學習日誌 (alva-lin)

任務 1 - hello move#

Sui CLI 基本操作#

參照文檔 Sui CLI: Client

網路#

  1. 查看當前添加的網路列表
sui client envs

輸出如下,其中 alias 為網路別名,url 為網路地址,active 為當前激活的網路

╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet  │ https://fullnode.devnet.sui.io:443  │        │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │        │
│ 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,來查看是否添加到列表中。

  1. 切換當前環境的網路
sui client switch --env testnet

輸出如下

Active environment switched to [testnet]

輸出提示切換成功,也可以再執行一次 sui client envs,來查看當前活躍網路是否是 testnet。

地址#

  1. 查看地址列表
sui client addresses

命令和環境類似,執行後的輸出如下

╭──────────────────┬───────────────────────┬────────────────╮
│ alias            │ address               │ active address │
├──────────────────┼───────────────────────┼────────────────┤
│ adoring-turquois │ 0xb31fc********c57f48 │ *              │
╰──────────────────┴───────────────────────┴────────────────╯
  1. 切換當前活躍的地址
sui client active-address

輸出如下,直接將當前活躍的地址全部輸出了

0xb31fc********c57f48

編譯 & 發布 & 調用#

  1. 新建包
sui move new 03_hello_move

該命令不會有輸出,會在當前路徑創建一個 sui package 文件夾,其內容如下

❯ tree 03_hello_move
03_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
error[E01002]: unexpected token
  ┌─ sources/hello_move.move:1:11

1 module 03_hello_move::hello {
           ^^^

           Unexpected 'hello_move'
           Expected '::'

Failed to build Move modules: Compilation error.

解決辦法有兩種

  1. (推薦) 創建項目時,使用不帶序號的項名:sui move new hello_move,後續再修改文件夾名稱: mv hello_move 03_hello_move

  2. 正常創建項目,然後找到 Move.toml 文件中的 [addresses] 块,修改 03_hello_movehello_move。並且需要注意,在編寫代碼時, package 名是 hello_move

另外還有個地方有差異,Move.toml 文件中的 [package] 块,其中 name 字段的名稱,是根據 sui move new <package_name> 中的包名來直接命名的

  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 文件

 tree -L 2
.
├── Move.lock
├── Move.toml
├── build
   ├── 03_hello_move
   └── locks
└── sources
    └── hello_move.move
  1. 發布

發布前,需要注意當前激活的網路和地址。在 package 對應的路徑下,執行以下命令,將包發布到對應的網路

sui client publish --gas-budget 100000000

這裡的 gas-budget 指運行模塊初始化程序時的 gas 費用預算。

如果發布成功,則會輸出以下內容,注意:每次執行時輸出內容中某些值會有所不同,但是內容結構大致相同

輸出被分為多個塊

  • 交易數據

  • 交易效果

  • 交易事件

  • 對象變更

  • 餘額變更

找到 交易效果 塊中的 創建的對象 輸出信息,其中 擁有者Immutable 的對象,就是發布的包。可以看到對應的 package ID 為 0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15

UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING 03_hello_move
Successfully verified dependencies on-chain against source.
Transaction Digest: FAGtpXnChnj2ZPxoZvt3kAuWY7esvPHGmpHbwAAUcdPX
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 交易數據                                                                                                     │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 發送者: 0xb31fc********c57f48                                                                                │
│ Gas 擁有者: 0xb31fc********c57f48                                                                             │
│ Gas 預算: 100000000 MIST                                                                                   │
│ Gas 價格: 1000 MIST                                                                                         │
│ Gas 支付:                                                                                                   │
│  ┌──                                                                                                         │
│  │ ID: 0x91cbd3fe3422844d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                                    │
│  │ 版本: 920427                                                                                           │
│  │ 摘要: Gucz8kmhru994mu1SMfsrasg3YjsPkzscj5KKkEmxu4X                                                      │
│  └──                                                                                                         │
│                                                                                                              │
│ 交易類型: 可編程                                                                                             │
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ 輸入對象                                                                                                 │ │
│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
│ │ 0   純參數: 類型: 地址, 值: "0xb31fc********c57f48                                             " │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────────────────────────────╮                                  │
│ │ 命令                                                                  │                                  │
│ ├─────────────────────────────────────────────────────────────────────────┤                                  │
│ │ 0  發布:                                                             │                                  │
│ │  ┌                                                                      │                                  │
│ │  │ 依賴:                                                             │                                  │
│ │  │   0x0000000000000000000000000000000000000000000000000000000000000001 │                                  │
│ │  │   0x0000000000000000000000000000000000000000000000000000000000000002 │                                  │
│ │  └                                                                      │                                  │
│ │                                                                         │                                  │
│ │ 1  轉移對象:                                                       │                                  │
│ │  ┌                                                                      │                                  │
│ │  │ 參數:                                                             │                                  │
│ │  │   結果 0                                                           │                                  │
│ │  │ 地址: 輸入  0                                                    │                                  │
│ │  └                                                                      │                                  │
│ ╰─────────────────────────────────────────────────────────────────────────╯                                  │
│                                                                                                              │
│ 簽名:                                                                                                      │
│    Hl+Chc7V72WhwKAwJ3T8PrhCibN9T27nZMNmVFpN7FqiTBPSVbxYfL+B5uyp3oRQ463WjGA8/oJ0cxmRfz92BA==                  │
│                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 交易效果                                                                                               │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 摘要: FAGtpXnChnj2ZPxoZvt3kAuWY7esvPHGmpHbwAAUcdPX                                              │
│ 狀態: 成功                                                                                           │
│ 執行時期: 318                                                                                       │
│                                                                                                   │
│ 創建的對象:                                                                                          │
│  ┌──                                                                                              │
│  │ ID: 0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15                         │
│  │ 擁有者: Immutable                                                                               │
│  │ 版本: 1                                                                                     │
│  │ 摘要: 2iv1DT3ARdBDwowswWA87ucPubfbEXfYkrcM1R6QyxWd                                           │
│  └──                                                                                              │
│  ┌──                                                                                              │
│  │ ID: 0xea782e392b95749ab43c20d9902f19b2976226391bdbd70e81f380f079932460                         │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48                                              )  │
│  │ 版本: 920428                                                                                │
│  │ 摘要: 6kC43pZb8YDZ9BDisXc3fmktSWt9PxP13N4QNa1sLank                                           │
│  └──                                                                                              │
│ 變更的對象:                                                                                          │
│  ┌──                                                                                              │
│  │ ID: 0x91cbd3fe3422844d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                         │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48                                              )  │
│  │ 版本: 920428                                                                                │
│  │ 摘要: CDN8E9EuPNgtwiLF77ZxAdx8BXMw27uQzcG1ADxuG9fZ                                           │
│  └──                                                                                              │
│ Gas 對象:                                                                                           │
│  ┌──                                                                                              │
│  │ ID: 0x91cbd3fe3422844d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                         │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48                                              )  │
│  │ 版本: 920428                                                                                │
│  │ 摘要: CDN8E9EuPNgtwiLF77ZxAdx8BXMw27uQzcG1ADxuG9fZ                                           │
│  └──                                                                                              │
│ Gas 成本摘要:                                                                                     │
│    存儲成本: 7539200 MIST                                                                     │
│    計算成本: 1000000 MIST                                                                 │
│    存儲回扣: 978120 MIST                                                                    │
│    不可退還的存儲費用: 9880 MIST                                                          │
│                                                                                                   │
│ 交易依賴:                                                                                         │
│    27si9MdVQzBrEzHWrbZJThtB7nVSHC1x14EuE5r3o2V2                                                   │
│    GZcMfNx5jvGHsfSKEHJD7jZss7yCHqEGfhVk8Jx8a2N1                                                   │
│    HuSWWnS6ZXZyyBpyoaWf7b8N961SPMUW7q9apQ5VkJTr                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ 沒有交易區塊事件 │
╰─────────────────────────────╯

╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 對象變更                                                                                           │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 創建的對象:                                                                                       │
│  ┌──                                                                                             │
│  │ ObjectID: 0xea782e392b95749ab43c20d9902f19b2976226391bdbd70e81f380f079932460                  │
│  │ 發送者: 0xb31fc********c57f48                                                                 │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48                                              ) │
│  │ 對象類型: 0x2::package::UpgradeCap                                                          │
│  │ 版本: 920428                                                                               │
│  │ 摘要: 6kC43pZb8YDZ9BDisXc3fmktSWt9PxP13N4QNa1sLank                                          │
│  └──                                                                                             │
│ 變更的對象:                                                                                       │
│  ┌──                                                                                             │
│  │ ObjectID: 0x91cbd3fe342284d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                  │
│  │ 發送者: 0xb31fc********c57f48                                                                 │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48                                              ) │
│  │ 對象類型: 0x2::coin::Coin<0x2::sui::SUI>                                                    │
│  │ 版本: 920428                                                                               │
│  │ 摘要: CDN8E9EuPNgtwiLF77ZxAdx8BXMw27uQzcG1ADxuG9fZ                                          │
│  └──                                                                                             │
│ 發布的對象:                                                                                       │
│  ┌──                                                                                             │
│  │ PackageID: 0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15                 │
│  │ 版本: 1                                                                                    │
│  │ 摘要: 2iv1DT3ARdBDwowswWA87ucPubfbEXfYkrcM1R6QyxWd                                          │
│  │ 模塊: hello                                                                                │
│  └──                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 餘額變更                                                                                           │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│  ┌──                                                                                              │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48                                              )  │
│  │ CoinType: 0x2::sui::SUI                                                                        │
│  │ 金額: -7561080                                                                               │
│  └──                                                                                              │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
  1. 調用函數

我們可以調用剛才發布的合約中的 say_hello 函數,來獲得一個對象。

首先將剛才的 package ID 保存為變量

export PACKAGE_ID=<package object ID>

然後使用相關命令

sui client call --package $PACKAGE_ID --module hello --function say_hello --gas-budget 300000000

如果執行無誤,則會輸出以下內容

同樣的,我們找到 交易效果 塊中的 創建的對象,這次只有一個對象被創建,拿到對應的 ID 0xc3eb50f39ec09e4e2eed994fdf60f855f4841b3591c94ca85e54047ed105280d

Transaction Digest: 3Ys1pYtBSgUiXUYMsK37KPWftcXX5icbbPLgT1f1frPp
╭──────────────────────────────────────────────────────────╮
│ 交易數據                                             │
├──────────────────────────────────────────────────────────┤
│ 發送者: 0xb31fc********c57f48                          │
│ Gas 擁有者: 0xb31fc********c57f48                       │
│ Gas 預算: 300000000 MIST                               │
│ Gas 價格: 1000 MIST                                   │
│ Gas 支付:                                           │
│  ┌──                                               │
│  │ ID: 0x91cbd3fe34228********cd26c54f2a5097a8679fc678b  │
│  │ 版本: 920429                                     │
│  │ 摘要: BgNZWUPLdG1WNxupJjP8R1RbQdqHYmLYP8GXYHEX2bg   │
│  └──                                               │
│                                                    │
│ 交易類型: 可編程                                   │
│   此交易沒有輸入對象                               │
│ ╭────────────────────────────────────────────────────╮   │
│ │ 命令                                           │   │
│ ├────────────────────────────────────────────────────┤   │
│ │ 0  MoveCall:                                   │   │
│ │  ┌                                             │   │
│ │  │ 函數:  say_hello                            │   │
│ │  │ 模塊:    hello                              │   │
│ │  │ 包:   0x96ad76ea3a055****a35350b83a76abd15 │   │
│ │  └                                             │   │
│ ╰────────────────────────────────────────────────────╯   │
│                                                    │
│ 簽名:                                            │
│    FlBbaPmrMt9DNKt9EMug********R8KcJes7dzem52d2CDkFcBA== │
│                                                    │
╰──────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────╮
│ 交易效果                                          │
├──────────────────────────────────────────────────────────┤
│ 摘要: 3Ys1pYtBSgUiXUYMsK37KPWftcXX5icbbPLgT1f1frPp     │
│ 狀態: 成功                                          │
│ 執行時期: 318                                      │
│                                                    │
│ 創建的對象:                                     │
│  ┌──                                             │
│  │ ID: 0xc3eb50f39ec09e4e2e****91c94ca85e54047ed105280d  │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48  ) │
│  │ 版本: 920430                                   │
│  │ 摘要: ZmguJw2kjwwrFYUYuZ8xG4EZcHc6n2CjMibhc9CjYNr   │
│  └──                                             │
│ 變更的對象:                                     │
│  ┌──                                             │
│  │ ID: 0x91cbd3fe342284d********c54f2a5097a8679fc678b   │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48  ) │
│  │ 版本: 920430                                   │
│  │ 摘要: 74GDCP91puviUXMmMFv7EEYSkuP7uMTt4MaPxGJi3JRj  │
│  └──                                             │
│ Gas 對象:                                        │
│  ┌──                                             │
│  │ ID: 0x91cbd3fe342284d******2cd6c54f2a5097a8679fc678b │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48  ) │
│  │ 版本: 920430                                   │
│  │ 摘要: 74GDCP91puviUXMmMFv7EEYSkuP7uMTt4MaPxGJi3JRj  │
│  └──                                             │
│ Gas 成本摘要:                                    │
│    存儲成本: 2340800 MIST                          │
│    計算成本: 1000000 MIST                          │
│    存儲回扣: 978120 MIST                          │
│    不可退還的存儲費用: 9880 MIST                   │
│                                                    │
│ 交易依賴:                                        │
│    65HTDLBC9h1cTbdPcuDPRpL3ZJUGvgWZHaQSpVcnos2R      │
│    FAGtpXnChnj2ZPxoZvt3kAuWY7esvPHGmpHbwAAUcdPX      │
╰──────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ 沒有交易區塊事件 │
╰─────────────────────────────╯

╭──────────────────────────────────────────────────────────╮
│ 對象變更                                          │
├──────────────────────────────────────────────────────────┤
│ 創建的對象:                                     │
│  ┌──                                             │
│  │ ObjectID: 0xc3eb50****47ed105280d             │
│  │ 發送者: 0xb31fc********c57f48                 │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48  ) │
│  │ 對象類型: 0x96ad76****0b83a76abd15::hello::Hello │
│  │ 版本: 920430                                   │
│  │ 摘要: ZmguJw2kjwwrFYUYuZ8xG4EZcHc6n2CjMibhc9CjYNr   │
│  └──                                             │
│ 變更的對象:                                     │
│  ┌──                                             │
│  │ ObjectID: 0x91cbd3fe342284****a5097a8679fc678b  │
│  │ 發送者: 0xb31fc********c57f48                 │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48  ) │
│  │ 對象類型: 0x2::coin::Coin<0x2::sui::SUI>      │
│  │ 版本: 920430                                   │
│  │ 摘要: 74GDCP91puviUXMmMFv7EEYSkuP7uMTt4MaPxGJi3JRj  │
│  └──                                             │
╰──────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────╮
│ 餘額變更                                          │
├──────────────────────────────────────────────────────────┤
│  ┌──                                             │
│  │ 擁有者: 帳戶地址 ( 0xb31fc********c57f48  )  │
│  │ CoinType: 0x2::sui::SUI                       │
│  │ 金額: -2362680                                 │
│  └──                                             │
╰──────────────────────────────────────────────────────────╯

Sui 瀏覽器錢包#

這兩個錢包都暫時只有瀏覽器擴展

Sui Explorer & SuiScan#

Sui 區塊瀏覽器,可以查看鏈上的任何記錄,只要提供地址或 ID。

以 suiscan 為例,我們前面使用 sui client call ... 來調用剛剛發布的合約中的函數,得到了一个 object ID。我們可以直接按一定格式 https://suiscan.xyz/<env>/object/<object ID>,可以看到這個新創建的 object 信息。或者是將 package ID 傳入,也是可以看到相關信息。

這是 package 鏈接:
https://suiscan.xyz/testnet/object/0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15

這是 hello object 鏈接:
https://suiscan.xyz/testnet/object/0xc3eb50f39ec09e4e2eed994fdf60f855f4841b3591c94ca85e54047ed105280d

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。