🙆‍♀️

メモ

2023/08/30に公開

これをやったときの自分用のメモです。
https://github.com/sui-foundation/sui-move-intro-course/tree/main/unit-one/lessons

lesson1

「 Install Sui Binaries Locally」をやってみる。

前もって必要なものを確認して、指定されているコマンドを実行

cargo install --locked --git https://github.com/MystenLabs/sui.git --branch devnet sui

叩いたらエラーになったが鯨飲はrustcが古かったから。最新版を入れるコマンドを叩く。

rustup update

気を取り直してもう一度コマンドを実行。ビルドにめちゃくちゃ時間がかかった。。

ちなみにdevnet, testnet, mainnetとありそれぞれ開発環境、検証環境、本番環境みたいなものだと理解している。

確認

 ~ % sui --version
sui 1.8.1-005304cf1

無事インストールできた。

Dockerもあるみたいなのでそちらを使ってやればよかったと、今更後悔。。

次のステップはCLIについてとかなので流し読みして先に進める。

lesson2 - Suiプロジェクトについて

ローカルにプロジェクトの作成

sui move new hello_world

みたいな感じでコマンドを打てばプロジェクトが作成される

これで作成されるのは。。

Move.tomlとsourcesフォルダ

「Move.toml」はマニフェストファイルで3つのセクションに分かれているらしい

  • [package] パッケージの名前、、バージョンなど
  • [dependencies] 使うパッケージなどを記述するらしい、package.jsonのdependenciesみたいなものと理解しておく
  • [addresses] Defines aliases for addresses in the package source code
  • よくわからないがこうなってる
hello_world =  "0x0"

結構シンプル?

lesson3, 4 言語について

Functions

  • private public,
  • Entry Functions: transactionで呼び出し可能なもの
    • returnはない
    • entryとfunの前に着く

とりあえずコピペで進めた。

lesson5 - hello world

devnetに作ったパッケージをデプロイする。
コマンドを叩いてみたがgasがなかったのでエラーに

~ % sui client publish --gas-budget 20000000 .
Config file ["/Users/higary/.sui/sui_config/client.yaml"] doesn't exist, do you want to connect to a Sui Full node server [y/N]?y
Sui Full node server URL (Defaults to Sui Devnet if not specified) :
Select key scheme to generate keypair (0 for ed25519, 1 for secp256k1, 2: for secp256r1):
0
Generated new keypair for address with scheme "ed25519" [0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f]
Secret Recovery Phrase : [blind tiny taxi camera doctor noodle eager gate aware tired super end]
[warn] Client/Server api version mismatch, client api version : 1.8.1, server api version : 1.8.0
FETCHING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING hello_world
Successfully verified dependencies on-chain against source.
Cannot find gas coin for signer address [0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f] with amount sufficient for the required gas amount [20000000].

ガスを調達するために、lesson1でやり残していた「Get Devnet Sui Tokens」を進める。
SuiのDiscordにジョインして、テスト用のガスをもらう。特定のフォーマットでメッセージを投げればOKらしい。

faucetは蛇口という意味。蛇口を捻ったらデプロイやトランザクションを実行するリソースをもらえるみたいに理解した。
メッセージを投稿したら、即時にガスがチャージされた。

~ % sui client gas
                             Object ID                              |  Gas Value
----------------------------------------------------------------------------------
 0x75c5b384139650295861c197055b80c62a38d795227458fd6201a43bff67f27b | 10000000000

改めてデプロイを実行。

~ % sui client publish --gas-budget 20000000 .
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING hello_world
Successfully verified dependencies on-chain against source.
----- Transaction Digest ----
B2BEH1YTSxsAUdsC4GMe3WkDbo9h98Hh8sznknXTwb1N
----- Transaction Data ----
Transaction Signature: [Signature(Ed25519SuiSignature(Ed25519SuiSignature([0, 231, 205, 7, 120, 98, 81, 217, 176, 115, 236, 116, 168, 164, 150, 200, 34, 216, 83, 121, 117, 107, 218, 176, 241, 250, 199, 229, 68, 142, 10, 186, 208, 3, 160, 13, 52, 16, 195, 191, 94, 237, 130, 41, 36, 12, 108, 12, 136, 180, 46, 35, 189, 191, 158, 178, 26, 213, 254, 49, 52, 17, 51, 35, 13, 49, 49, 6, 4, 40, 64, 19, 217, 221, 96, 107, 18, 250, 30, 72, 143, 78, 8, 146, 172, 158, 194, 171, 158, 103, 151, 87, 95, 66, 198, 100, 39])))]
Transaction Kind : Programmable
Inputs: [Pure(SuiPureValue { value_type: Some(Address), value: "0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f" })]
Commands: [
  Publish(<modules>,0x0000000000000000000000000000000000000000000000000000000000000001,0x0000000000000000000000000000000000000000000000000000000000000002),
  TransferObjects([Result(0)],Input(0)),
]

Sender: 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f
Gas Payment: Object ID: 0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99, version: 0x5, digest: 7Fky7ZBRdPmyqG393sqsAHH8yGK3P65p3kPSMkfhEKFm
Gas Owner: 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f
Gas Price: 1000
Gas Budget: 20000000

----- Transaction Effects ----
Status : Success
Created Objects:
  - ID: 0x7eaffe80472f5ebaa92003ed7703d274f069edd37eeb6eef5aeb4ca89e8a8da3 , Owner: Immutable
  - ID: 0x9725aaee6c70533b94a68c48877e7b456335f067e0b58715f5439fd60b33b075 , Owner: Account Address ( 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f )
Mutated Objects:
  - ID: 0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99 , Owner: Account Address ( 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f )

----- Events ----
Array []
----- Object changes ----
Array [
    Object {
        "type": String("mutated"),
        "sender": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        "owner": Object {
            "AddressOwner": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        },
        "objectType": String("0x2::coin::Coin<0x2::sui::SUI>"),
        "objectId": String("0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99"),
        "version": String("6"),
        "previousVersion": String("5"),
        "digest": String("5asXGf1MLeFixH8t1YmiBbvFXwiQ83evVufymNpfkJVd"),
    },
    Object {
        "type": String("published"),
        "packageId": String("0x7eaffe80472f5ebaa92003ed7703d274f069edd37eeb6eef5aeb4ca89e8a8da3"),
        "version": String("1"),
        "digest": String("6nkhKEj7fwiRMRwxZWCtZKkwMoyLxWWJ1u9Ti2Af3QgM"),
        "modules": Array [
            String("hello_world"),
        ],
    },
    Object {
        "type": String("created"),
        "sender": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        "owner": Object {
            "AddressOwner": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        },
        "objectType": String("0x2::package::UpgradeCap"),
        "objectId": String("0x9725aaee6c70533b94a68c48877e7b456335f067e0b58715f5439fd60b33b075"),
        "version": String("6"),
        "digest": String("8QZJqPAzSDF1LJGvKKm4su13eEkb88h5RpGZnHEVHsiw"),
    },
]
----- Balance changes ----
Array [
    Object {
        "owner": Object {
            "AddressOwner": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        },
        "coinType": String("0x2::sui::SUI"),
        "amount": String("-7979080"),
    },
]
~ % sui client gas
[warn] Client/Server api version mismatch, client api version : 1.8.1, server api version : 1.9.0
                             Object ID                              |  Gas Value
----------------------------------------------------------------------------------
 0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99 | 9992020920

devnetを見てみるとPackageできてる。
https://suiexplorer.com/object/0x7eaffe80472f5ebaa92003ed7703d274f069edd37eeb6eef5aeb4ca89e8a8da3?network=devnet

これでデプロイは完了。

Calling a Method through a Transaction

メソッドをコールする。デプロイしたhelloworldを呼び出すentryをつけてるfunctionなので呼び出せる。

~ % sui client call --function mint --module hello_world --package 0x7eaffe80472f5ebaa92003ed7703d274f069edd37eeb6eef5aeb4ca89e8a8da3 --gas-budget 10000000
[warn] Client/Server api version mismatch, client api version : 1.8.1, server api version : 1.9.0
----- Transaction Digest ----
7uDVL9vpowKraUQDE3mD3SmaXaAizqBjd4AGhJ2MmPpR
----- Transaction Data ----
Transaction Signature: [Signature(Ed25519SuiSignature(Ed25519SuiSignature([0, 84, 75, 240, 148, 138, 157, 117, 116, 218, 246, 57, 145, 203, 88, 92, 230, 46, 212, 101, 78, 94, 237, 101, 228, 224, 156, 195, 103, 179, 80, 247, 119, 208, 158, 150, 70, 230, 3, 179, 186, 54, 189, 217, 243, 152, 198, 154, 24, 7, 76, 206, 116, 159, 246, 0, 205, 145, 2, 17, 151, 210, 36, 15, 14, 49, 49, 6, 4, 40, 64, 19, 217, 221, 96, 107, 18, 250, 30, 72, 143, 78, 8, 146, 172, 158, 194, 171, 158, 103, 151, 87, 95, 66, 198, 100, 39])))]
Transaction Kind : Programmable
Inputs: []
Commands: [
  MoveCall(0x7eaffe80472f5ebaa92003ed7703d274f069edd37eeb6eef5aeb4ca89e8a8da3::hello_world::mint()),
]

Sender: 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f
Gas Payment: Object ID: 0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99, version: 0x8, digest: GHZafXQqpRXoMA9LZA7AaVLrcXpEETXtTSC9fxwaccHG
Gas Owner: 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f
Gas Price: 1000
Gas Budget: 10000000

----- Transaction Effects ----
Status : Success
Created Objects:
  - ID: 0x74f0ba283599fd3f6d12bfb6ef0445b2c451aa36d8b29a630be7d0c8e2ddcaa7 , Owner: Account Address ( 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f )
Mutated Objects:
  - ID: 0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99 , Owner: Account Address ( 0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f )

----- Events ----
Array []
----- Object changes ----
Array [
    Object {
        "type": String("mutated"),
        "sender": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        "owner": Object {
            "AddressOwner": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        },
        "objectType": String("0x2::coin::Coin<0x2::sui::SUI>"),
        "objectId": String("0xc9414b11bb5211300e6f65e23b43c5b1826cb73eeb4176a90e8a71cc0bcabf99"),
        "version": String("9"),
        "previousVersion": String("8"),
        "digest": String("BBykHYkAEzXnup7azkV6nTTaacDvUb9HaNGtgoAHcwTD"),
    },
    Object {
        "type": String("created"),
        "sender": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        "owner": Object {
            "AddressOwner": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        },
        "objectType": String("0x7eaffe80472f5ebaa92003ed7703d274f069edd37eeb6eef5aeb4ca89e8a8da3::hello_world::HelloWorldObject"),
        "objectId": String("0x74f0ba283599fd3f6d12bfb6ef0445b2c451aa36d8b29a630be7d0c8e2ddcaa7"),
        "version": String("9"),
        "digest": String("8FMThKPvX1DMqesHXZ7BWCFkRv1dN1XiiDh8kFrqgYj1"),
    },
]
----- Balance changes ----
Array [
    Object {
        "owner": Object {
            "AddressOwner": String("0x9354e46a13398a7184da2b25f3751470f9024128091ac3d447579bafbb3af24f"),
        },
        "coinType": String("0x2::sui::SUI"),
        "amount": String("-2507080"),
    },
]

こちらもdevnetで確認
https://suiexplorer.com/txblock/7uDVL9vpowKraUQDE3mD3SmaXaAizqBjd4AGhJ2MmPpR?network=devnet

hello worldした感覚は全くないけどこれでできたっぽい。

Discussion