🦴

substrate-contracts-node に RUST製(ink!産)スマートコントラクトをデプロイしてみた

2022/02/06に公開

前回、何も考えずに ink! で作成したスマートコントラクトを astar-collator に
デプロイしようとしたが、うまくイカなかったため、今回は substrate-contracts-node を
使用してink! で作成したスマートコントラクトをデプロイしてみる。

お題

ink! の Getting started をこなす。
https://paritytech.github.io/ink-docs/getting-started/setup/

実技

ひとまず、 getting start に従ってコマンドを打てばできる。

substrate-contracts-node を起動する。
前回 astar-collator を起動した際に見られたようなログが表示される。

polonity@athena:~/workspace/astar/tutorial$ substrate-contracts-node --dev --tmp
2022-02-06 22:19:14 Substrate Contracts Node    
2022-02-06 22:19:14 ✌️  version 0.5.0-0ec18d9-x86_64-linux-gnu    
2022-02-06 22:19:14 ❤️  by Parity Technologies <admin@parity.io>, 2021-2022    
2022-02-06 22:19:14 📋 Chain specification: Development    
2022-02-06 22:19:14 🏷  Node name: cool-answer-9144    
2022-02-06 22:19:14 👤 Role: AUTHORITY    
2022-02-06 22:19:14 💾 Database: RocksDb at /tmp/substrateUdo3Np/chains/dev/db/full    
2022-02-06 22:19:14 ⛓  Native runtime: substrate-contracts-node-100 (substrate-contracts-node-1.tx1.au1)    
2022-02-06 22:19:15 🔨 Initializing Genesis block/state (state: 0x9a29…4be9, header-hash: 0x1e7f…fd35)    
2022-02-06 22:19:15 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.    
2022-02-06 22:19:15 🏷  Local node identity is: 12D3KooWH2wT1tYQjSyPbRZkgYJkmbPKWAC25saq4fYRobtZVz38    
2022-02-06 22:19:15 📦 Highest known block at #0    
2022-02-06 22:19:15 〽️ Prometheus exporter started at 127.0.0.1:9615    
2022-02-06 22:19:15 Listening for new connections on 127.0.0.1:9944.    
2022-02-06 22:19:16 Accepted a new tcp connection from 127.0.0.1:52882. 

ink! のチュートリアルでは、 canvus というGUIを使用してスマートコントラクトを
デプロイしていたが、私の環境ではデプロイに失敗してしまったため、
polkadot.js で substrate-contracts-node に接続する。
以下のURLを叩けばOK。
https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/

左上にノードの名前が表示されている。
substrate-contracts-node に接続できていることが分かる。

以下が astar-collator に接続したとき。
様子が違うことが分かる。

当然ながら、substrate-contracts-node は、 dapps staking がevent log として
上がらないのも差として確認できる。

また、以下のような画面の場合は、node とブラウザが接続できていない。

いよいよ、ink! で作った スマートコントラクトをデプロイしていく。

前回と同様に、「ディベロッパー」->「コントラクト」->「Upload&deploy code」を押下

好きなキャラクタを選んで[1]、ink! で作成した hoge.contract を選択したら、Nextを押下

好きな額を入力したいところを我慢して次へ

赤枠 「Sign and Submit」を押下

以下のように表示されれば成功。

なお、以下のように値を 0 以外にすると、エラーとなってしまう。。
(ContractTrapped というエラー。)

これで、 contract を実行できるようになる。
BOB に実行してもらう。

赤枠 ▼を押下。

ここで、 flipper の current value が false であることを確認しておく。(初期値)
続いて 赤枠 ▶exec を押下

Execute !と叫びながら Execute を押下

Sign and Submit を押下

以下のように表示されれば成功。

見事 flipper の値が false から true に変わっている。

終わりに

これで今日のミッションコンプリート。
RUST製のスマートコントラクトを書いて遊べる環境が整った。
後は astar がwasm に対応するのを待つばかり。(応援しています)

しかし、遊ぶのはまた今度にして、次は上記RUST製スマートコントラクトのための
フロントエンドAppを作成してみたいと思う。
できたらまた記事にします!

脚注
  1. 僕は...... Alice ちゃん!!!
    ↩︎

Discussion