💧

久々にMove言語を触る(準備編)

2024/10/08に公開

2年ほど前にaptos moveでDEXを作っていたのですが、それ以来moveに触れる機会がありませんでした。
sui moveは初なので復習もかねて1から触ってみます。

作業結果を張り付けているだけです。ここでは詳細な説明はしません。

環境構築

https://docs.sui.io/guides/developer/getting-started/sui-install

とりあえずcliを入れます。
brew install sui

以下を実行しtestnetへ接続する設定を行います。
sui client

$ sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ testnet │ https://fullnode.testnet.sui.io:443 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯

アカウント準備

create account

sui client new-address ed25519

$ sui client new-address ed25519
╭───────────────────────────────────────────────────────────────────────────────────────────╮
│ Created new keypair and saved it to keystore.                                             │
├────────────────┬──────────────────────────────────────────────────────────────────────────┤
│ alias          │ mystifying-chrysoberyl                                                   │
│ address        │ 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e       │
│ keyScheme      │ ed25519                                                                  │
│ recoveryPhrase │ 一応隠しておきます                                                          │
╰────────────────┴──────────────────────────────────────────────────────────────────────────╯

faucet

sui client faucet --address 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e

GET!(先に少し使ってしまったので減ってます)

$ sui client balance 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e
╭────────────────────────────────────────╮
│ Balance of coins owned by this address │
├────────────────────────────────────────┤
│ ╭─────────────────────────────────╮    │
│ │ coin  balance (raw)  balance    │    │
│ ├─────────────────────────────────┤    │
│ │ Sui   986650480      0.98 SUI   │    │
│ ╰─────────────────────────────────╯    │
╰────────────────────────────────────────╯

スマコン作成

ここでは細かい説明は省きます
https://github.com/mk1018/sui_first_package

publish

$ sui client publish --gas-budget 50000000
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING sui_first_package
Successfully verified dependencies on-chain against source.
Transaction Digest: BZoKo27iff3QrUauUiqNrxBmS1ihnbJEX16zgqUeTXbm
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Data                                                                                             │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Sender: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                                   │
│ Gas Owner: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                                │
│ Gas Budget: 50000000 MIST                                                                                    │
│ Gas Price: 1000 MIST                                                                                         │
│ Gas Payment:                                                                                                 │
│  ┌──                                                                                                         │
│  │ ID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                                    │
│  │ Version: 92485315                                                                                         │
│  │ Digest: 9XZFbW8e878zxSd1sTTnqxWPuDYRFr2LuhocUNNLuDAn                                                      │
│  └──                                                                                                         │
│                                                                                                              │
│ Transaction Kind: Programmable                                                                               │
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Input Objects                                                                                            │ │
│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
│ │ 0   Pure Arg: Type: address, Value: "0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e" │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────────────────────────────╮                                  │
│ │ Commands                                                                │                                  │
│ ├─────────────────────────────────────────────────────────────────────────┤                                  │
│ │ 0  Publish:                                                             │                                  │
│ │  ┌                                                                      │                                  │
│ │  │ Dependencies:                                                        │                                  │
│ │  │   0x0000000000000000000000000000000000000000000000000000000000000001 │                                  │
│ │  │   0x0000000000000000000000000000000000000000000000000000000000000002 │                                  │
│ │  └                                                                      │                                  │
│ │                                                                         │                                  │
│ │ 1  TransferObjects:                                                     │                                  │
│ │  ┌                                                                      │                                  │
│ │  │ Arguments:                                                           │                                  │
│ │  │   Result 0                                                           │                                  │
│ │  │ Address: Input  0                                                    │                                  │
│ │  └                                                                      │                                  │
│ ╰─────────────────────────────────────────────────────────────────────────╯                                  │
│                                                                                                              │
│ Signatures:                                                                                                  │
│    azxTPQP629wHcdZHwIZPxhkp1TatZLIdYZOsySqnJxcXgkdBso4UGzt0LaqQbxNfkt/jdeE7q7A3RxsV8YrXCg==                  │
│                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Effects                                                                               │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Digest: BZoKo27iff3QrUauUiqNrxBmS1ihnbJEX16zgqUeTXbm                                              │
│ Status: Success                                                                                   │
│ Executed Epoch: 514                                                                               │
│                                                                                                   │
│ Created Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0x0c3284124534d127638449b1853e84046c6fbddf80298cb23f5b45386f107a15                         │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ Version: 92485316                                                                              │
│  │ Digest: 2pvqq1FB1EGnqdryJGRMPdyJqFMMkucULyQL3seX9xGm                                           │
│  └──                                                                                              │
│  ┌──                                                                                              │
│  │ ID: 0xcc7361967ec8098ece79f5ad6afd881519133613c7ce06933790e85505232965                         │
│  │ Owner: Immutable                                                                               │
│  │ Version: 1                                                                                     │
│  │ Digest: 76iG7juaaqUuF2uBt915rqj4c9ZJ5HPxry4JTECL9U6T                                           │
│  └──                                                                                              │
│  ┌──                                                                                              │
│  │ ID: 0xd8bc8e819ea260a3647c8fbb2d3928fbdbc56d235ef0a4610df1ac9334ade11a                         │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ Version: 92485316                                                                              │
│  │ Digest: 7TsrpdYMXjxaQ1tKuzdP4c88T6Krp5kLPpfwNWWKKQeY                                           │
│  └──                                                                                              │
│ Mutated Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                         │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ Version: 92485316                                                                              │
│  │ Digest: 8xfEi6P5a36Su2iZrEMtq6agqtUm7seTmL2P6j7nWtg9                                           │
│  └──                                                                                              │
│ Gas Object:                                                                                       │
│  ┌──                                                                                              │
│  │ ID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                         │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ Version: 92485316                                                                              │
│  │ Digest: 8xfEi6P5a36Su2iZrEMtq6agqtUm7seTmL2P6j7nWtg9                                           │
│  └──                                                                                              │
│ Gas Cost Summary:                                                                                 │
│    Storage Cost: 10298000 MIST                                                                    │
│    Computation Cost: 1000000 MIST                                                                 │
│    Storage Rebate: 978120 MIST                                                                    │
│    Non-refundable Storage Fee: 9880 MIST                                                          │
│                                                                                                   │
│ Transaction Dependencies:                                                                         │
│    2VBiXoKJAfDeVgi8ntkra1wDszKN2diDdp8u1UiqM3i2                                                   │
│    EHhhGiuAqeb3TRM4g5xhzHFokrVVsGsemXKc7QX1XVc8                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ No transaction block events │
╰─────────────────────────────╯

╭────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Object Changes                                                                                     │
├────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Created Objects:                                                                                   │
│  ┌──                                                                                               │
│  │ ObjectID: 0x0c3284124534d127638449b1853e84046c6fbddf80298cb23f5b45386f107a15                    │
│  │ Sender: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                      │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )   │
│  │ ObjectType: 0x2::package::UpgradeCap                                                            │
│  │ Version: 92485316                                                                               │
│  │ Digest: 2pvqq1FB1EGnqdryJGRMPdyJqFMMkucULyQL3seX9xGm                                            │
│  └──                                                                                               │
│  ┌──                                                                                               │
│  │ ObjectID: 0xd8bc8e819ea260a3647c8fbb2d3928fbdbc56d235ef0a4610df1ac9334ade11a                    │
│  │ Sender: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                      │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )   │
│  │ ObjectType: 0xcc7361967ec8098ece79f5ad6afd881519133613c7ce06933790e85505232965::example::Forge  │
│  │ Version: 92485316                                                                               │
│  │ Digest: 7TsrpdYMXjxaQ1tKuzdP4c88T6Krp5kLPpfwNWWKKQeY                                            │
│  └──                                                                                               │
│ Mutated Objects:                                                                                   │
│  ┌──                                                                                               │
│  │ ObjectID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                    │
│  │ Sender: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                      │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )   │
│  │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI>                                                      │
│  │ Version: 92485316                                                                               │
│  │ Digest: 8xfEi6P5a36Su2iZrEMtq6agqtUm7seTmL2P6j7nWtg9                                            │
│  └──                                                                                               │
│ Published Objects:                                                                                 │
│  ┌──                                                                                               │
│  │ PackageID: 0xcc7361967ec8098ece79f5ad6afd881519133613c7ce06933790e85505232965                   │
│  │ Version: 1                                                                                      │
│  │ Digest: 76iG7juaaqUuF2uBt915rqj4c9ZJ5HPxry4JTECL9U6T                                            │
│  │ Modules: example                                                                                │
│  └──                                                                                               │
╰────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Balance Changes                                                                                   │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│  ┌──                                                                                              │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ CoinType: 0x2::sui::SUI                                                                        │
│  │ Amount: -10319880                                                                              │
│  └──                                                                                              │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯

実行

https://suiscan.xyz/testnet/account/0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e/portfolio

$  sui client ptb \ 
        --assign forge 0xd8bc8e819ea260a3647c8fbb2d3928fbdbc56d235ef0a4610df1ac9334ade11a \
        --assign to_address 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e  \             
        --move-call 0xcc7361967ec8098ece79f5ad6afd881519133613c7ce06933790e85505232965::my_module::new_sword forge 3 3 \
        --assign sword \
        --transfer-objects "[sword]" to_address \                                                        
        --gas-budget 20000000
Transaction Digest: 3X7wdwUNz1q7NnibVVvjGv9bjHWqqHj8BTTGVCcGrrwE
╭─────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Data                                                                            │
├─────────────────────────────────────────────────────────────────────────────────────────────┤
│ Sender: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                  │
│ Gas Owner: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e               │
│ Gas Budget: 2988000 MIST                                                                    │
│ Gas Price: 1000 MIST                                                                        │
│ Gas Payment:                                                                                │
│  ┌──                                                                                        │
│  │ ID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                   │
│  │ Version: 92485316                                                                        │
│  │ Digest: 8xfEi6P5a36Su2iZrEMtq6agqtUm7seTmL2P6j7nWtg9                                     │
│  └──                                                                                        │
│                                                                                             │
│ Transaction Kind: Programmable                                                              │
│   No input objects for this transaction                                                     │
│   No commands for this transaction                                                          │
│                                                                                             │
│ Signatures:                                                                                 │
│    1rjvKkkTzKK+gZW+jHb+nW7KzlQ41MRO2W5lfRfEDBQh8iNRzjqmsW1ibmiJlhEhfv8jKoWXqm0JKOJL25mJBQ== │
│                                                                                             │
╰─────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Effects                                                                               │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Digest: 3X7wdwUNz1q7NnibVVvjGv9bjHWqqHj8BTTGVCcGrrwE                                              │
│ Status: Success                                                                                   │
│ Executed Epoch: 514                                                                               │
│ Mutated Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                         │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ Version: 92485317                                                                              │
│  │ Digest: Crrrcid5ivZrhzjtLdZhLsusduqnJehNWSFQmLn8kQ3F                                           │
│  └──                                                                                              │
│ Gas Object:                                                                                       │
│  ┌──                                                                                              │
│  │ ID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                         │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ Version: 92485317                                                                              │
│  │ Digest: Crrrcid5ivZrhzjtLdZhLsusduqnJehNWSFQmLn8kQ3F                                           │
│  └──                                                                                              │
│ Gas Cost Summary:                                                                                 │
│    Storage Cost: 988000 MIST                                                                      │
│    Computation Cost: 1000000 MIST                                                                 │
│    Storage Rebate: 978120 MIST                                                                    │
│    Non-refundable Storage Fee: 9880 MIST                                                          │
│                                                                                                   │
│ Transaction Dependencies:                                                                         │
│    BZoKo27iff3QrUauUiqNrxBmS1ihnbJEX16zgqUeTXbm                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ No transaction block events │
╰─────────────────────────────╯

╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Object Changes                                                                                   │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Mutated Objects:                                                                                 │
│  ┌──                                                                                             │
│  │ ObjectID: 0xbee1d78a4e5c09f210da55e9583bfbf919b5421fda1799c5979006671040ecb3                  │
│  │ Sender: 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e                    │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e ) │
│  │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI>                                                    │
│  │ Version: 92485317                                                                             │
│  │ Digest: Crrrcid5ivZrhzjtLdZhLsusduqnJehNWSFQmLn8kQ3F                                          │
│  └──                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Balance Changes                                                                                   │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│  ┌──                                                                                              │
│  │ Owner: Account Address ( 0x2cc80886077a04dceb2d0b939a1e9498769ff73ebe1afd74a910da7bf340c97e )  │
│  │ CoinType: 0x2::sui::SUI                                                                        │
│  │ Amount: -1009880                                                                               │
│  └──                                                                                              │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯

最後に

次はCoinを作ります。

Discussion