Astar入門 WASMを使って、「Shibuya」テストネット上にコントラクトをデプロイしてみよう!
こんにちは、CryptoGamesのユウキです。
本日は、Astar Networkの「Builders Weekend」の2日目に行われた、「WASM」を用いたコントラクトのデプロイ方法を見ていきます。
現場では高橋さん(私とは別の方です)が解説してくださいました。
では、見ていきましょう。
1 環境構築を行う
では、まずは環境構築を行っていきましょう。
1.Rustの環境構築を行う。
下のページから進んでいきます。
下のように、皆さんの環境に合わせて構築をお願いします。
下の部分までが今回必要な部分です。
2.cargo-contractをインストールする。
では、次のページから進んでいきます。
cargo-contractはink!によって書かれているようです。
下の箇所まで行ってください。
3.swanky-cliをインストールする。
こちらから、インストールを行います。
こちらにあるように、「Swanky Suite」はWASMのスマートコントラクト開発者にとって、オールインワンのツールを目指しているようです。
今回は、バージョンを指定したいので、こちらのコマンドを実施してください。
npm install -g @astar-network/swanky-cli@1.0.7
ここまでで環境構築が完了です。
2 ローカル環境で、コントラクトを作成する
1.テストプロジェクトを作成する
では、まず下のコマンドからテストプロジェクトを作成していきます。
swanky init test_project
今回は、下のように、「ink」を用いて、「flipper」というコントラクトを作りました。
ボタンを押して、trueとfalseが反転するようなコントラクトです。
2.コントラクトのコンパイルを行う
では、下のコマンドで「flipper」コントラクトをコンパイルしてみましょう。
cd test_project
swanky contract compile flipper -v
下のように、コンパイルが行われていきます。
下のようになれば成功です。
3.テストを行う
では、コンパイルができたので、テストを行ってみましょう。
下のコマンドで実施します。
cd contracts/flipper/
cargo +nightly test
下のように、テストが進んでいきます。
下のようになれば成功です。
なお、「lib.rs」を見ると、どのようなテストが実施されたのかが確認できます。
4.swanky-nodeを立ち上げよう
では、ローカル環境でデプロイを行うために、ノードを立ち上げてみましょう。
違うウィンドウを立ち上げ、次のコマンドを実施します。
swanky node start --tmp
すると、このようにノードが立ち上がりました。
5.コントラクトのデプロイを行う
では、この「swanky-node」にコントラクトをデプロイしてみましょう。
次のコードで実施します。
swanky contract deploy flipper --gas 10000000000 --args false --account alice
なお、「--account alice」とあるように、アリスというアカウントでデプロイを行います。
下のように、うまく行ったようです。
このコントラクトアドレスは後ほど使っていきます。
なお、「swanky.config.json」を確認すると、下のように、今回できたコントラクトを確認することができます。
6.コントラクトが動くことを試してみる
では、このコントラクトが動くことを確認してみましょう。
下のように、コントラクト名とメソッド名を指定して、コントラクトを呼び出してみます。
<Timestampの番号>は一つ上の画像にあるように、「swanky.config.json」から確認ができます。
swanky contract call --contractName=flipper -m get -t <Timestampの番号>
このように、動いていることが確認できました。
また、今回は、こちらの「get」という関数を呼び出していました。
7.GUIにコントラクトを反映してみる
では、ローカル環境のテストをGUIでわかりやすく確認していきましょう。
下の「Polkadot/Substrate Portal」に進んでいきましょう。
このような画面になりました。
下の部分から、「ローカル」での接続を確認します。
こちらの「Local Node」になっていることを確認してください。
こちらの「Accounts」からは、このように色々なアカウントがあることが確認できます。
では、ローカルで作成したコントラクトを追加していきましょう。
下のようにして、「Add an existing contract」を選択
先ほどできたコントラクトアドレスを入れて、「Contract ABI」を選択
test_project > contracts > flipper > target > ink の中に「metadata.json」が入っているので、それを選択
下のように反映できましたら、「Save」
これでコントラクトが反映されます。
8.GUIでコントラクトを確認する
今回のコントラクトは「true」か「false」が格納され、「flipper」という関数で入れ替わるようなものです。
今は「true」が入っています。
「exec」から進んで、この値を反転させてみましょう。
「Execute」を選択
「Sign and Submit」を選択
すると、このように「false」に反転することが確認できました。
3 「Shibuya」ネットワークでコントラクトをデプロイする。
では「Shiden」のテストネットワークである、「Shibuya」にデプロイをしてみましょう。
1.polkadot.jsを入れる
まずは「polkadot.js」の拡張機能をブラウザに入れていきます。
すでに入っている方は飛ばしてください。
2.テストアカウントを作成する
こちらからテストアカウントを作成していきます。
「Create new account」を選択
このように「mnemonic seed」が出ます。
こちらは非常に重要な情報なので、他人には見せず、厳重に保管を行ってください。
後ほど使います。
「mnemonic seed」の安全な保管ができましたら、チェックを入れて、「Next step」
アカウント名、パスワードを入れて、進みます。
すると、このようにアカウントができました。
3.テストアカウントを手元のコードに反映させる
では、今できたアカウントを手元のconfigファイルに登録します。
swanky account create
今回はaliasとして、「test_3」として登録しました。
下のように、「swanky.config.json」を見ると登録がされています。
次のコマンドでも確認ができます。
swanky account list
下のように、登録されていることが確認できました。
4.「Shibuya」トークンを取得する
では、「Shibuya」ネットワークで実行するために、「Shibuya」トークンを取得しましょう。
こちらがAstar Networkのホームページです。
ここからDiscordに入れます。
下の、「shibuya-faucet」に入り、「/drip」と打ちます。
すると、「network」と「address」が入力できるので、それぞれ、「Shibuya」「ご自身のアカウント」を入力してEnterを押します。
これで「Shibuya」トークンが取得できます。
5.「Shibuya」ネットワークにデプロイする
では、「Shibuya」ネットワークにデプロイしてみましょう。
次のように実行します。
swanky contract deploy flipper --gas 10000000000 --args false --account <alias名> -n shibuya
すると、下のようにコントラクトアドレスが取得できました。
6.「contracts-ui」でコントラクトを確認する
では、このコントラクトを「contracts-ui」で確認してみましょう。
こちらにいきます。
ネットワークが「Shibuya」になっていることを確認の上、「Add New Contract」を選択
アカウントをデプロイを行ったアカウントに切り替えます。
「Upload Contract Bundle」を選択
「artifacts」の中の「flipper.contract」を選択
反映がされたので、「Next」
今回は初期設定の値が「false」であることを確認の上、「Next」
内容が問題なさそうであれば、「Upload and Instantiate」
「Shibuya」ネットワークであることを確認の上、「Sign the transaction」
これでコントラクトがアップロードされました。
7.コントラクトの動きを確認する
では、試しに触ってみます。
「flip()」を選択して、「Call contract」を行います。
これにより、「false」から「true」になることを想定しています。
「Sign the transaction」を選択
get()で値を確認すると、「true」に変更できていることが確認できました。
今回は以上です。
最後までありがとうございました。
Discussion