見出し画像

ここから始めるPlasm Network:第四回:solidityをWASMに変換してスマートコントラクトをデプロイする方法

みなさん、こんにちは。Fintertechの高橋です。
本日は「ここからはじめるPlasm Network」の第4回目となります。前回予告した通り、「EthereumでSolidityやってたからPlasm NetworkでもContract実装したいけど、Rustは・・・」という方に向けた技術をご紹介させて頂きます。
Hyperledger Solangというプロジェクトであり、Solidityで実装されたコントラクトをink!ベースのWASMにコンパイルして変換してくれるという凄いプロジェクトになります。

(1) Plasm Networkとは何か~ノード起動方法まで☆前々々回
(2) テストネットValidatorになる方法☆前々回
(3) WASMベース(ink!)のスマートコントラクトの開発とデプロイ方法☆前回
(4) solidityをWASMに変換してスマートコントラクトをデプロイする方法 ★今回
(5) EVMベース(Remix)でのスマートコントラクトの開発とデプロイ方法

はじめに

まずはプロジェクトのリンクからです。Hyperledger Solangにアクセスして下さい。今回はこのページからサンプル等を引用させて頂きつつ、Plasm Dustyテストネットにコントラクトをデプロイするところまでやっていきたいと思います。
今回のプログラムは以下の通りです。

(1)Solangをインストールする
(2)サンプルプログラムを準備してSolangでコンパイルする
(3)ローカルノードを実行してコントラクトをデプロイする
(4)Dustyテストネットにコントラクトをデプロイする

(1)Solangをインストールする

ではまず、自分のコンピューターにSolangをインストールして使えるようにしていきましょう。ソースコードを落としてきてビルドする方法もありますが、Dockerコンテナを使う方法が非常に簡単で秀逸なので、今回はそちらでやっていきたいと思います。Docker環境の構築方法はこちらでは説明を割愛させて頂きます。
以下の手順でやっていきましょう。
- dockerバージョンの確認
- SolangイメージのPull
- Solangバージョンの確認
実際に実行した画面も貼っておきますので、参考にして下さい。

docker --version
docker images
docker pull hyperledgerlabs/solang
docker images
docker run --rm -it hyperledgerlabs/solang --version

画像1

(2)サンプルプログラムを準備してSolangでコンパイルする

solangの準備が出来たので、次はサンプルプログラムを準備します。solangが用意してくれているサンプルサイトにアクセスして、flipperのソースをコピーして「solang_flipper.sol」として保存しましょう。

vim solang_flipper.sol

ファイル名に合わせて、contrcact名も「solang_flipper」に変更しておいて下さい。
あまり意味はないのですが、第二回をやって頂いた方は既にDusty上にflipperコントラクトが存在すると思うので、それと区別をつけるくらいの意味です。
準備が出来ましたら、solangを使ってコンパイルしていきましょう。以下のコマンド実行後に、「solang_flipper.contract」が作成されていれば成功になります。

docker run --rm -it -v $(pwd):/sources hyperledgerlabs/solang -o /sources /sources/solang_flipper.sol

画像2

(3)ローカルノードを実行してコントラクトをデプロイする

ここからは第二回で実施した内容とほぼ同じなので、是非第二回目を思い出してやってみて下さい。手順を概観すると以下のようになります。
- Plasm Nodeを実行します。※エラーが出る場合は、purge-chainをお忘れなく
- Plasmポータルにアクセスして、作成したcontractファイルをアップロードします。
- アップロードしたcontractをデプロイします。

画像3

(4)Dustyテストネットにコントラクトをデプロイする

こちらも第二回で実施した内容とほぼ同じなので、細かい説明は割愛させて頂きますが、是非やってみて下さい。万が一テストネットトークンが不足している方でfaucetから貰えない場合は、日本語チャンネルで私宛にご連絡下さい。

画像4

番外編

腕に覚えのある開発者の方は以前「Hello World by Polkadot」ハッカソンのPlasm Networkの問題にもなったSimpleAuction.solをsolangでコンパイルしてデプロイすることに挑戦してみて下さい。ハッカソンでは中級編でした。

まとめ

少々短いですが、今回はこれにて終了です。
いかがでしたでしょうか?solidityを学んだ人がRustに移行するにはそれなりに学習コストが必要だと思っています。特にCとかC++をやったことがない人にとってはなおさらではないでしょうか?そう思った時に、慣れたsolidityでPlasm Networkのコントラクトが実装出来ることは非常に良いことだと思っています。またEthereum上にのっているスマートコントラクトを再実装することなくPolkadot上に移行することも可能になります。他のネットワークではuniswapをPolkadotにのせる試みもおこなわれているようです。
さて最終回である次回は、Remixからのコントラクトのデプロイに挑戦していきたいと思いますので、是非引き続きよろしくお願い致します。ではまた。
興味を持って頂けた方は是非、Plasm Networkのコミュニティに参加して下さい。
Website | Twitter | Telegram | Discord | GitHub