Alva

Alva

programmer
github
telegram
email

さあ、動こう - 学 Move 得 Sui(一)

letsmove

Let's Move は、より多くの人々が Move 言語を学ぶことを奨励する SUI のインセンティブプログラムです。

学習ログ (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 フォルダーに置くだけです。

パッケージ命名の問題:

あなたも私と同様に、学習を記録するために各プロジェクトの前に数字を付けている場合、後続のコードコンパイル時にエラーが発生します。

 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.

解決策は 2 つあります。

  1. (推奨) プロジェクト作成時に、番号なしのプロジェクト名を使用する:sui move new hello_move、その後フォルダー名を変更: mv hello_move 03_hello_move

  2. 通常通りプロジェクトを作成し、Move.toml ファイルの [addresses] ブロックで 03_hello_movehello_move に変更します。また、コードを書く際には、パッケージ名は hello_move であることに注意してください。

もう一つの違いは、Move.toml ファイルの [package] ブロックで、name フィールドの名前は sui move new <package_name> のパッケージ名に基づいて直接命名されます。

  1. コンパイル

まず、パッケージに対応するパスに移動し、次のコマンドを実行します。

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. 発行

発行前に、現在アクティブなネットワークとアドレスに注意が必要です。パッケージに対応するパスで、次のコマンドを実行し、パッケージを対応するネットワークに発行します。

sui client publish --gas-budget 100000000

ここでの gas-budget は、モジュール初期化プログラムを実行する際のガス費用の予算を指します。

発行が成功すると、以下の内容が出力されます。注意:毎回実行時に出力内容の一部の値は異なる場合がありますが、内容の構造は大体同じです。

出力は複数のブロックに分かれています。

  • トランザクションデータ

  • トランザクション効果

  • トランザクションイベント

  • オブジェクトの変更

  • 残高の変更

トランザクション効果 ブロックの 作成されたオブジェクト 出力情報を見つけます。ここで OwnerImmutable のオブジェクトが発行されたパッケージです。対応するパッケージ 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
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Data                                                                                             │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Sender: 0xb31fc********c57f48                                                                                │
│ Gas Owner: 0xb31fc********c57f48                                                                             │
│ Gas Budget: 100000000 MIST                                                                                   │
│ Gas Price: 1000 MIST                                                                                         │
│ Gas Payment:                                                                                                 │
│  ┌──                                                                                                         │
│  │ ID: 0x91cbd3fe3422844d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                                    │
│  │ Version: 920427                                                                                           │
│  │ Digest: Gucz8kmhru994mu1SMfsrasg3YjsPkzscj5KKkEmxu4X                                                      │
│  └──                                                                                                         │
│                                                                                                              │
│ Transaction Kind: Programmable                                                                               │
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Input Objects                                                                                            │ │
│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
│ │ 0   Pure Arg: Type: address, Value: "0xb31fc********c57f48                                             " │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────────────────────────────╮                                  │
│ │ Commands                                                                │                                  │
│ ├─────────────────────────────────────────────────────────────────────────┤                                  │
│ │ 0  Publish:                                                             │                                  │
│ │  ┌                                                                      │                                  │
│ │  │ Dependencies:                                                        │                                  │
│ │  │   0x0000000000000000000000000000000000000000000000000000000000000001 │                                  │
│ │  │   0x0000000000000000000000000000000000000000000000000000000000000002 │                                  │
│ │  └                                                                      │                                  │
│ │                                                                         │                                  │
│ │ 1  TransferObjects:                                                     │                                  │
│ │  ┌                                                                      │                                  │
│ │  │ Arguments:                                                           │                                  │
│ │  │   Result 0                                                           │                                  │
│ │  │ Address: Input  0                                                    │                                  │
│ │  └                                                                      │                                  │
│ ╰─────────────────────────────────────────────────────────────────────────╯                                  │
│                                                                                                              │
│ Signatures:                                                                                                  │
│    Hl+Chc7V72WhwKAwJ3T8PrhCibN9T27nZMNmVFpN7FqiTBPSVbxYfL+B5uyp3oRQ463WjGA8/oJ0cxmRfz92BA==                  │
│                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Effects                                                                               │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Digest: FAGtpXnChnj2ZPxoZvt3kAuWY7esvPHGmpHbwAAUcdPX                                              │
│ Status: Success                                                                                   │
│ Executed Epoch: 318                                                                               │
│                                                                                                   │
│ Created Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15                         │
│  │ Owner: Immutable                                                                               │
│  │ Version: 1                                                                                     │
│  │ Digest: 2iv1DT3ARdBDwowswWA87ucPubfbEXfYkrcM1R6QyxWd                                           │
│  └──                                                                                              │
│  ┌──                                                                                              │
│  │ ID: 0xea782e392b95749ab43c20d9902f19b2976226391bdbd70e81f380f079932460                         │
│  │ Owner: Account Address ( 0xb31fc********c57f48                                              )  │
│  │ Version: 920428                                                                                │
│  │ Digest: 6kC43pZb8YDZ9BDisXc3fmktSWt9PxP13N4QNa1sLank                                           │
│  └──                                                                                              │
│ Mutated Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0x91cbd3fe342284d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                         │
│  │ Owner: Account Address ( 0xb31fc********c57f48                                              ) │
│  │ Version: 920428                                                                               │
│  │ Digest: CDN8E9EuPNgtwiLF77ZxAdx8BXMw27uQzcG1ADxuG9fZ                                           │
│  └──                                                                                              │
│ Gas Object:                                                                                       │
│  ┌──                                                                                              │
│  │ ID: 0x91cbd3fe342284d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                         │
│  │ Owner: Account Address ( 0xb31fc********c57f48                                              )  │
│  │ Version: 920428                                                                                │
│  │ Digest: CDN8E9EuPNgtwiLF77ZxAdx8BXMw27uQzcG1ADxuG9fZ                                           │
│  └──                                                                                              │
│ Gas Cost Summary:                                                                                 │
│    Storage Cost: 7539200 MIST                                                                     │
│    Computation Cost: 1000000 MIST                                                                 │
│    Storage Rebate: 978120 MIST                                                                    │
│    Non-refundable Storage Fee: 9880 MIST                                                          │
│                                                                                                   │
│ Transaction Dependencies:                                                                         │
│    27si9MdVQzBrEzHWrbZJThtB7nVSHC1x14EuE5r3o2V2                                                   │
│    GZcMfNx5jvGHsfSKEHJD7jZss7yCHqEGfhVk8Jx8a2N1                                                   │
│    HuSWWnS6ZXZyyBpyoaWf7b8N961SPMUW7q9apQ5VkJTr                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ No transaction block events │
╰─────────────────────────────╯

╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Object Changes                                                                                   │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Created Objects:                                                                                 │
│  ┌──                                                                                             │
│  │ ObjectID: 0xea782e392b95749ab43c20d9902f19b2976226391bdbd70e81f380f079932460                  │
│  │ Sender: 0xb31fc********c57f48                                                                 │
│  │ Owner: Account Address ( 0xb31fc********c57f48                                              ) │
│  │ ObjectType: 0x2::package::UpgradeCap                                                          │
│  │ Version: 920428                                                                               │
│  │ Digest: 6kC43pZb8YDZ9BDisXc3fmktSWt9PxP13N4QNa1sLank                                          │
│  └──                                                                                             │
│ Mutated Objects:                                                                                 │
│  ┌──                                                                                             │
│  │ ObjectID: 0x91cbd3fe342284d015fa2a7da45721d42226cd2cd6c54f2a5097a8679fc678b                  │
│  │ Sender: 0xb31fc********c57f48                                                                 │
│  │ Owner: Account Address ( 0xb31fc********c57f48                                              ) │
│  │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI>                                                    │
│  │ Version: 920428                                                                               │
│  │ Digest: CDN8E9EuPNgtwiLF77ZxAdx8BXMw27uQzcG1ADxuG9fZ                                          │
│  └──                                                                                             │
│ Published Objects:                                                                               │
│  ┌──                                                                                             │
│  │ PackageID: 0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15                 │
│  │ Version: 1                                                                                    │
│  │ Digest: 2iv1DT3ARdBDwowswWA87ucPubfbEXfYkrcM1R6QyxWd                                          │
│  │ Modules: hello                                                                                │
│  └──                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Balance Changes                                                                                   │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│  ┌──                                                                                              │
│  │ Owner: Account Address ( 0xb31fc********c57f48                                              )  │
│  │ CoinType: 0x2::sui::SUI                                                                        │
│  │ Amount: -7561080                                                                               │
│  └──                                                                                              │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
  1. 関数を呼び出す

先ほど発行したコントラクトの say_hello 関数を呼び出して、オブジェクトを取得できます。

まず、先ほどのパッケージ ID を変数に保存します。

export PACKAGE_ID=<package object ID>

次に関連コマンドを使用します。

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

実行が正しければ、以下の内容が出力されます。

同様に、トランザクション効果 ブロックの 作成されたオブジェクト を見つけます。今回は 1 つのオブジェクトが作成され、対応する ID 0xc3eb50f39ec09e4e2eed994fdf60f855f4841b3591c94ca85e54047ed105280d を取得します。

Transaction Digest: 3Ys1pYtBSgUiXUYMsK37KPWftcXX5icbbPLgT1f1frPp
╭──────────────────────────────────────────────────────────╮
│ Transaction Data                                         │
├──────────────────────────────────────────────────────────┤
│ Sender: 0xb31fc********c57f48                            │
│ Gas Owner: 0xb31fc********c57f48                         │
│ Gas Budget: 300000000 MIST                               │
│ Gas Price: 1000 MIST                                     │
│ Gas Payment:                                             │
│  ┌──                                                     │
│  │ ID: 0x91cbd3fe34228********cd26c54f2a5097a8679fc678b  │
│  │ Version: 920429                                       │
│  │ Digest: BgNZWUPLdG1WNxupJjP8R1RbQdqHYmLYP8GXYHEX2bg   │
│  └──                                                     │
│                                                          │
│ Transaction Kind: Programmable                           │
│   No input objects for this transaction                  │
│ ╭────────────────────────────────────────────────────╮   │
│ │ Commands                                           │   │
│ ├────────────────────────────────────────────────────┤   │
│ │ 0  MoveCall:                                       │   │
│ │  ┌                                                 │   │
│ │  │ Function:  say_hello                            │   │
│ │  │ Module:    hello                                │   │
│ │  │ Package:   0x96ad76ea3a055****a35350b83a76abd15 │   │
│ │  └                                                 │   │
│ ╰────────────────────────────────────────────────────╯   │
│                                                          │
│ Signatures:                                              │
│    FlBbaPmrMt9DNKt9EMug********R8KcJes7dzem52d2CDkFcBA== │
│                                                          │
╰──────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────╮
│ Transaction Effects                                      │
├──────────────────────────────────────────────────────────┤
│ Digest: 3Ys1pYtBSgUiXUYMsK37KPWftcXX5icbbPLgT1f1frPp     │
│ Status: Success                                          │
│ Executed Epoch: 318                                      │
│                                                          │
│ Created Objects:                                         │
│  ┌──                                                     │
│  │ ID: 0xc3eb50f39ec09e4e2e****91c94ca85e54047ed105280d  │
│  │ Owner: Account Address ( 0xb31fc********c57f48      ) │
│  │ Version: 920430                                       │
│  │ Digest: ZmguJw2kjwwrFYUYuZ8xG4EZcHc6n2CjMibhc9CjYNr   │
│  └──                                                     │
│ Mutated Objects:                                         │
│  ┌──                                                     │
│  │ ID: 0x91cbd3fe342284d********c54f2a5097a8679fc678b   │
│  │ Owner: Account Address ( 0xb31fc********c57f48      ) │
│  │ Version: 920430                                       │
│  │ Digest: 74GDCP91puviUXMmMFv7EEYSkuP7uMTt4MaPxGJi3JRj  │
│  └──                                                     │
│ Gas Object:                                              │
│  ┌──                                                     │
│  │ ID: 0x91cbd3fe342284d******2cd6c54f2a5097a8679fc678b │
│  │ Owner: Account Address ( 0xb31fc********c57f48      ) │
│  │ Version: 920430                                       │
│  │ Digest: 74GDCP91puviUXMmMFv7EEYSkuP7uMTt4MaPxGJi3JRj  │
│  └──                                                     │
│ Gas Cost Summary:                                        │
│    Storage Cost: 2340800 MIST                            │
│    Computation Cost: 1000000 MIST                        │
│    Storage Rebate: 978120 MIST                           │
│    Non-refundable Storage Fee: 9880 MIST                 │
│                                                          │
│ Transaction Dependencies:                                │
│    65HTDLBC9h1cTbdPcuDPRpL3ZJUGvgWZHaQSpVcnos2R          │
│    FAGtpXnChnj2ZPxoZvt3kAuWY7esvPHGmpHbwAAUcdPX          │
╰──────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ No transaction block events │
╰─────────────────────────────╯

╭──────────────────────────────────────────────────────────╮
│ Object Changes                                           │
├──────────────────────────────────────────────────────────┤
│ Created Objects:                                         │
│  ┌──                                                     │
│  │ ObjectID: 0xc3eb50****47ed105280d                     │
│  │ Sender: 0xb31fc********c57f48                         │
│  │ Owner: Account Address ( 0xb31fc********c57f48      ) │
│  │ ObjectType: 0x96ad76****0b83a76abd15::hello::Hello    │
│  │ Version: 920430                                       │
│  │ Digest: ZmguJw2kjwwrFYUYuZ8xG4EZcHc6n2CjMibhc9CjYNr   │
│  └──                                                     │
│ Mutated Objects:                                         │
│  ┌──                                                     │
│  │ ObjectID: 0x91cbd3fe342284****a5097a8679fc678b        │
│  │ Sender: 0xb31fc********c57f48                         │
│  │ Owner: Account Address ( 0xb31fc********c57f48      ) │
│  │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI>            │
│  │ Version: 920430                                       │
│  │ Digest: 74GDCP91puviUXMmMFv7EEYSkuP7uMTt4MaPxGJi3JRj  │
│  └──                                                     │
╰──────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────╮
│ Balance Changes                                          │
├──────────────────────────────────────────────────────────┤
│  ┌──                                                     │
│  │ Owner: Account Address ( 0xb31fc********c57f48     )  │
│  │ CoinType: 0x2::sui::SUI                               │
│  │ Amount: -2362680                                      │
│  └──                                                     │
╰──────────────────────────────────────────────────────────╯

Sui ブラウザウォレット#

これらのウォレットは現在、ブラウザ拡張機能のみです。

Sui Explorer & SuiScan#

Sui ブロックエクスプローラーでは、アドレスまたは ID を提供することで、チェーン上の任意の記録を確認できます。

suiscan を例にとると、前に使用した sui client call ... で発行したコントラクトの関数を呼び出し、得られたオブジェクト ID を使用します。特定の形式 https://suiscan.xyz/<env>/object/<object ID> に従って、新しく作成されたオブジェクトの情報を確認できます。また、パッケージ ID を渡すことでも関連情報を確認できます。

これはパッケージのリンクです:
https://suiscan.xyz/testnet/object/0x96ad76ea3a055760f257b839668c8c8d113502bcc04b688a35350b83a76abd15

これは hello オブジェクトのリンクです:
https://suiscan.xyz/testnet/object/0xc3eb50f39ec09e4e2eed994fdf60f855f4841b3591c94ca85e54047ed105280d

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。