Build on Suiの名古屋・大阪イベントの第2回の復習と第3回以降のイベント参加準備!
はじめに
Build on Suiの名古屋・大阪イベントに興味もっていただきありがとうございます✨️第1回/第2回と皆様積極的にご参加いただき感謝です✨️
さて、今回も第2回のハンズオンの復習と3回目の学習の準備をやっていきましょう!!第3回目からの参加も大歓迎🔥
第1回の続きとなりますので、まだの方はまずはコチラの記事をお願いします!
今回はNFTのコントラクトをデプロイして、Sui CLIから直接NFTをMINT
してみます。それじゃ、いっくよ〜〜!
Sui CLIを使ってウォレットをインポートしよう(補足)
前回の記事でSuiが入っているかをsui --versionコマンドで確認しましたね!
VSCodeでDevcontainerを開いている状態(ターミナルの最後の表示が#になっていることを確認してください。

前回記事(またはハンズオン内で)作成したSlush WalletのアドレスをSui CLI上で扱えるようにインポートします。
ニンゲンマークから設定画面に移動して「Manage allなんちゃら」からアカウントの管理画面に移動します。


使いたいアカウント(前回Testnet $SUIをGetしたもの)を選択してExport passphraseからパスフレーズのコピーを行います。
パスフレーズは単語が12個または24個並んだ羅列(banana apple orange ・・・・・みたいな)です。お金が入っているアカウントのパスフレーズはセキュリティ上危険なので絶対に他人に教えたり公開してはいけません。お金の入っていない開発用のアカウントを使用しましょう。
コピーしたら以下のコマンドの"パスフレーズ"のところを入れ替えてコマンドをターミナルで実行してみましょう。
sui keytool import "<パスフレーズ>" ed25519
//例 sui keytool import "banana apple orange......" ed25519実行するとこんな感じの表示が出ます!これでインポート完了です!
(パスフレーズ、捨てアカウントなので晒していますが本当はダメです)

インポートしたアドレスをアクティブにする(補足)
インポートしたAddressをSui CLIで操作できるようにするにはもうひとつコマンドが必要です。どのAddressをこれから操作するのか選択してSwichする必要があります。
<操作したいAddress>に自分の先程インポートしたウォレットのアドレスを入力してコマンドを実行するだけ!!簡単簡単✨️
sui client switch --address <操作したいAddress>このようにActive address switched to 0x…..と出てきたら成功ですよ!

念の為中にガス代が入っているか確認しておきましょう。
sui client gas入ってますね!!入ってない場合は前回記事を見てTestnet SUIを請求してください。

【解説】PackageとNFTコントラクトのつながり
Packageは「作品の箱」。箱の中にはModule(モジュール)という部品が入っていて、そこに「型(NFTそのもの)」や「関数(mint など)」というレシピが書いてあります。
この箱(Package)をpublish(デプロイ)すると、ブロックチェーン上にPackage IDという住所が割り当てられ、だれでもその住所+モジュール名+関数名で呼び出せるようになります。
つまり、「コントラクトをデプロイする」=「Packageを公開して、Module内の関数をみんなが呼べる状態にする」ということです。NFTの実体(オブジェクト)は、mint を呼んだときに初めてブロックチェーン上に作られ、あなた(もしくは指定の受取人)の所有物として発行されます。
Move Packageをデプロイしてみよう
では実際にデプロイして、あとでCLIからMINTできる状態にしていきましょう!
ではさっそく準備をしていきます!!
move packageのあるcontractsのところで右クリックをして、統合ターミナルで開くをクリックしてください。

色変わってSuiませんwターミナルの表示がcontracts#になってたらOK!!

ではでは、Moveのpackageをデプロイしてみましょう。
sui client publishコチラを実行してみましょう!
するとゴニョゴニョといろいろ動き出して最終的にこんな感じの表示が出てくればPublish(デプロイ)は完了です✨️素晴らしい🔥
Transaction Digest: 2LKieu6qNeukZKV87rfsUWg5PQxghfWzxgCNTxdRd3mp
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Data │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ Gas Owner: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ Gas Budget: 20346400 MIST │
│ Gas Price: 1000 MIST │
│ Gas Payment: │
│ ┌── │
│ │ ID: 0x677a29239c0336a55f290fec53d6f54510178de22a1c823e712274f1816a56c6 │
│ │ Version: 570638016 │
│ │ Digest: DNPqXZnf127ZfUhYgN1131mnx1GbGWH69hMwFMgY8ZDF │
│ └── │
│ │
│ Transaction Kind: Programmable │
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Input Objects │ │
│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
│ │ 0 Pure Arg: Type: address, Value: "0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16" │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────────────────────────────╮ │
│ │ Commands │ │
│ ├─────────────────────────────────────────────────────────────────────────┤ │
│ │ 0 Publish: │ │
│ │ ┌ │ │
│ │ │ Dependencies: │ │
│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000001 │ │
│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000002 │ │
│ │ └ │ │
│ │ │ │
│ │ 1 TransferObjects: │ │
│ │ ┌ │ │
│ │ │ Arguments: │ │
│ │ │ Result 0 │ │
│ │ │ Address: Input 0 │ │
│ │ └ │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
│ │
│ Signatures: │
│ 5ppVM+b2pRD6Nb8Arts0Vj7q1vTBXrl1oyD5jKsBtne0vtZXL6/pkGX82DgzSQzaoPreHyKBT1vtfv+lxg8XAQ== │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Effects │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Digest: 2LKieu6qNeukZKV87rfsUWg5PQxghfWzxgCNTxdRd3mp │
│ Status: Success │
│ Executed Epoch: 889 │
│ │
│ Created Objects: │
│ ┌── │
│ │ ID: 0x0e3e90398367ad625a89d7cecd04cbf464c965d248d4ebeee51e993bc41b2d8b │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638017 │
│ │ Digest: 3bxm6xsyTUiGNK6UoBhk52X3KJTFoq53VFeZR3HLjtME │
│ └── │
│ ┌── │
│ │ ID: 0x9d7e6e529a9be16daed739685514ab6fb8f4fb54fb9ca5cebe9cfc051b436795 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638017 │
│ │ Digest: 5zebQruLf34eKHwk4Kp8WWRo8WeuNw8HotwkyoJ36hGK │
│ └── │
│ ┌── │
│ │ ID: 0xd3b40f9e443965d1d8a54cae43dc6894346a9890cd2e9836c205a007a6e87415 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638017 │
│ │ Digest: 3x4Ka2SWETptsvDEZY8xV2NQK5AtAMU2yzGdrrRqp3Sm │
│ └── │
│ ┌── │
│ │ ID: 0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a │
│ │ Owner: Immutable │
│ │ Version: 1 │
│ │ Digest: HfxNNtngVUGUNBFYS9ii45FKnLo5HfFEHLNmSnheukkk │
│ └── │
│ Mutated Objects: │
│ ┌── │
│ │ ID: 0x677a29239c0336a55f290fec53d6f54510178de22a1c823e712274f1816a56c6 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638017 │
│ │ Digest: Fq5Qr4Nndx1EJRzjS8ttBy5uzrE7qjUUWdj5UA71zGNZ │
│ └── │
│ Gas Object: │
│ ┌── │
│ │ ID: 0x677a29239c0336a55f290fec53d6f54510178de22a1c823e712274f1816a56c6 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638017 │
│ │ Digest: Fq5Qr4Nndx1EJRzjS8ttBy5uzrE7qjUUWdj5UA71zGNZ │
│ └── │
│ Gas Cost Summary: │
│ Storage Cost: 18346400 MIST │
│ Computation Cost: 1000000 MIST │
│ Storage Rebate: 978120 MIST │
│ Non-refundable Storage Fee: 9880 MIST │
│ │
│ Transaction Dependencies: │
│ 2KEeApqRXkCMTYuN1caxxFNngaGSbBpAFxKwJoGopfZT │
│ 9nxXHzzMxHzEatreyUC1UDemPw5ofTgwDD7f2Q4iwwqd │
│ Dd9pn1zFcSJjinxQewFd2gQdR4XKsHxFioD5MYnwLZQz │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Block Events │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ ┌── │
│ │ EventID: 2LKieu6qNeukZKV87rfsUWg5PQxghfWzxgCNTxdRd3mp:0 │
│ │ PackageID: 0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a │
│ │ Transaction Module: nft │
│ │ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ │ EventType: 0x2::display::DisplayCreated<0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a::nft::WorkshopNFT> │
│ │ ParsedJSON: │
│ │ ┌────┬────────────────────────────────────────────────────────────────────┐ │
│ │ │ id │ 0x9d7e6e529a9be16daed739685514ab6fb8f4fb54fb9ca5cebe9cfc051b436795 │ │
│ │ └────┴────────────────────────────────────────────────────────────────────┘ │
│ └── │
│ ┌── │
│ │ EventID: 2LKieu6qNeukZKV87rfsUWg5PQxghfWzxgCNTxdRd3mp:1 │
│ │ PackageID: 0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a │
│ │ Transaction Module: nft │
│ │ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ │ EventType: 0x2::display::VersionUpdated<0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a::nft::WorkshopNFT> │
│ │ ParsedJSON: │
│ │ ┌─────────┬──────────┬───────┬─────────────────────────────────────────────────┐ │
│ │ │ fields │ contents │ key │ name │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ value │ {name} │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ key │ description │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ value │ {description} │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ key │ image_url │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ value │ {image_url} │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ key │ link │ │
│ │ │ │ ├───────┼─────────────────────────────────────────────────┤ │
│ │ │ │ │ value │ {link} │ │
│ │ ├─────────┼──────────┴───────┴─────────────────────────────────────────────────┤ │
│ │ │ id │ 0x9d7e6e529a9be16daed739685514ab6fb8f4fb54fb9ca5cebe9cfc051b436795 │ │
│ │ ├─────────┼────────────────────────────────────────────────────────────────────┤ │
│ │ │ version │ 1 │ │
│ │ └─────────┴────────────────────────────────────────────────────────────────────┘ │
│ └── │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Object Changes │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Created Objects: │
│ ┌── │
│ │ ObjectID: 0x0e3e90398367ad625a89d7cecd04cbf464c965d248d4ebeee51e993bc41b2d8b │
│ │ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ ObjectType: 0x2::package::Publisher │
│ │ Version: 570638017 │
│ │ Digest: 3bxm6xsyTUiGNK6UoBhk52X3KJTFoq53VFeZR3HLjtME │
│ └── │
│ ┌── │
│ │ ObjectID: 0x9d7e6e529a9be16daed739685514ab6fb8f4fb54fb9ca5cebe9cfc051b436795 │
│ │ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ ObjectType: 0x2::display::Display<0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a::nft::WorkshopNFT> │
│ │ Version: 570638017 │
│ │ Digest: 5zebQruLf34eKHwk4Kp8WWRo8WeuNw8HotwkyoJ36hGK │
│ └── │
│ ┌── │
│ │ ObjectID: 0xd3b40f9e443965d1d8a54cae43dc6894346a9890cd2e9836c205a007a6e87415 │
│ │ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ ObjectType: 0x2::package::UpgradeCap │
│ │ Version: 570638017 │
│ │ Digest: 3x4Ka2SWETptsvDEZY8xV2NQK5AtAMU2yzGdrrRqp3Sm │
│ └── │
│ Mutated Objects: │
│ ┌── │
│ │ ObjectID: 0x677a29239c0336a55f290fec53d6f54510178de22a1c823e712274f1816a56c6 │
│ │ Sender: 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI> │
│ │ Version: 570638017 │
│ │ Digest: Fq5Qr4Nndx1EJRzjS8ttBy5uzrE7qjUUWdj5UA71zGNZ │
│ └── │
│ Published Objects: │
│ ┌── │
│ │ PackageID: 0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a //←こいつ │
│ │ Version: 1 │
│ │ Digest: HfxNNtngVUGUNBFYS9ii45FKnLo5HfFEHLNmSnheukkk │
│ │ Modules: nft │
│ └── │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Balance Changes │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ ┌── │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ CoinType: 0x2::sui::SUI │
│ │ Amount: -18368280 │
│ └── │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯なが〜〜いですが、この中のPackage IDを控えておいてください。
あとでNFTをMINTするときにこれを使って呼び出します。
PackageID: 0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651aPublishしたPackageを呼び出してNFTをミントしてみよう
では最後に、実際に自分でPublishしたコントラクトでNFTがMINTできるのか、確認してみましょう。
sui client call \
--package 0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a \
--module nft \
--function mint \
--args "SuiJapan NFT" "Hello from CLI" "https://hiyokoyarou.com/wp-content/uploads/2017/04/unchi.png" \
--gas-budget 1000000000x****の部分は自身のPackage IDを入れて実行してみてください。
Package(0xdfea3d80d4ba7dedbe4fc94d32dae70d2fd3f14cdf2423ed498453459eb9651a)の中のnftというmodule(部品)の中のmintというfunction(関数)を呼び出したいよ!!と書いてます。
"SuiJapanNFT"や"Hello from CLI"、画像のURLである"https://….."はすべてご自身の好きなように変更してもらっても大丈夫です!
ではやってみましょう!コピペしてEnter!

お!!MINTできたようです!!

またたくさん表示が出てきますが、その中のCreated Objects内のIDをコピーしてSui Scanで確認してみましょう!その際、networkをテストネットに切り替えるのを忘れずにね!!
一部抜粋
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Effects │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Digest: 7FoNtWUC2gyDsqzhUM7zavxnPMb4HZhjEcnYGpLQgnRx │
│ Status: Success │
│ Executed Epoch: 889 │
│ │
│ Created Objects: │
│ ┌── │
│ │ ID: 0x0733ec4f7f01f07864903df48d90b7271a8ebdd01445ea815006a20ac00908ab │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638018 │
│ │ Digest: 7usQ4R4DXPmSXHumxttqVPyJNFawEtZhU9SebmUX3Ces │
│ └── │
│ Mutated Objects: │
│ ┌── │
│ │ ID: 0x677a29239c0336a55f290fec53d6f54510178de22a1c823e712274f1816a56c6 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638018 │
│ │ Digest: FzzKfEtZiARmaxKu7G9sgBwgztN9MSJmcyYgW3tVh6rb │
│ └── │
│ Gas Object: │
│ ┌── │
│ │ ID: 0x677a29239c0336a55f290fec53d6f54510178de22a1c823e712274f1816a56c6 │
│ │ Owner: Account Address ( 0x489507622ad8952aa549fa9456aa7a2edf3a218bbf4c42b4862cb7bc0992eb16 ) │
│ │ Version: 570638018 │
│ │ Digest: FzzKfEtZiARmaxKu7G9sgBwgztN9MSJmcyYgW3tVh6rb │
│ └── │
│ Gas Cost Summary: │
│ Storage Cost: 3207200 MIST │
│ Computation Cost: 1000000 MIST │
│ Storage Rebate: 978120 MIST │
│ Non-refundable Storage Fee: 9880 MIST │
│ │
│ Transaction Dependencies: │
│ 2LKieu6qNeukZKV87rfsUWg5PQxghfWzxgCNTxdRd3mp │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
おっと、ちゃんとMINTできていますね✨️Slush Walletでも。

おわりに
自分でPublishしたコントラクトを呼び出して、NFTをMINTすることに成功しましたね✨️Webサイト上でNFTをMINTするときもボタンを押すと裏で同じようにコマンドが実行されてNFTはMINTされているんですよ👀✨️
さて、第3回の開発者イベントではNFTのコントラクトを実際に書いてみます。3回目以降からの参加も大歓迎ですので是非おこしくださいね✨️
名古屋第3回 10/17(金曜日)
大阪第3回 10/18(土曜日)
