👏

Astar入門 WASMを使って、「Shibuya」テストネット上にコントラクトをデプロイしてみよう!

2022/12/21に公開

こんにちは、CryptoGamesのユウキです。

本日は、Astar Networkの「Builders Weekend」の2日目に行われた、「WASM」を用いたコントラクトのデプロイ方法を見ていきます。

現場では高橋さん(私とは別の方です)が解説してくださいました。
https://twitter.com/realtakahashi1

では、見ていきましょう。

1 環境構築を行う

では、まずは環境構築を行っていきましょう。

1.Rustの環境構築を行う。

下のページから進んでいきます。

https://docs.substrate.io/install/

下のように、皆さんの環境に合わせて構築をお願いします。

下の部分までが今回必要な部分です。

2.cargo-contractをインストールする。

では、次のページから進んでいきます。
https://use.ink/getting-started/setup/

cargo-contractはink!によって書かれているようです。

下の箇所まで行ってください。

3.swanky-cliをインストールする。

こちらから、インストールを行います。
https://docs.astar.network/docs/wasm/sc-dev/swanky/

こちらにあるように、「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」に進んでいきましょう。
https://polkadot.js.org/apps

このような画面になりました。

下の部分から、「ローカル」での接続を確認します。

こちらの「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」の拡張機能をブラウザに入れていきます。

すでに入っている方は飛ばしてください。
https://polkadot.js.org/extension/

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のホームページです。
https://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」で確認してみましょう。

こちらにいきます。
https://contracts-ui.substrate.io/

ネットワークが「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