楽しみながらSolidityの勉強をしてみた

Solidity, Web3.0, スマートコントラクト

お疲れさまです。
次世代ビジネス推進部の荻原です。

今回、業務でスマートコントラクトを書くことになったのでSolidityの勉強をしました。

Solidityの書き方はJavaScriptに似ているのですが、私はあまりJavaScriptを書いたことがなかったので初心者向けのサイトを調べたところ、Ethereumのポータルサイトから楽しく学べそうなサイトがいくつか紹介されていました。

その中から2つやってみた感想を紹介します。

CryptoZombies

0afe9927589d75235716495a3cce3d75.jpg
(引用: https://cryptozombies.io/)

こちらのサイトはサインインやウォレット接続等の事前準備は一切必要なく利用できるサイトです。

Solidityの入門編は6つのレッスンが用意されており、各レッスンはさらに細かいチャプターにわかれています。
チャプターごとに文法等の説明とそれを前提として書くコードの指示があり、サンプルコードを指示通りに埋めていく形式です。
ヒントも見ることができ、チャプターごとに答え合わせを行います。
そして少しずつコントラクトを完成させていき、最終的にゾンビをコレクションしたり戦わせたりするゲームを作ります。

入門編を一通りやってみたのですが、説明が非常に丁寧かつ簡潔でわかりやすかったです。
レッスンもゾンビゲームを作るということに一貫して順序立てられていて、体系的に理解しやすいと思いました。
各レッスンは丁寧に取り組んでも1~2時間程度で終わりました。

言語設定は英語以外にも色々と用意されていますが、日本語を選択すると一部ハングルになっていました…笑
また、何故かゾンビの世界観を意識していそうな口調(?)に訳されてるという個人的に面白い要素があり、その面でも楽しんで取り組むことができました。

注意点としては、使われているSolidityのバージョンがそこそこ古いので書き方が最新のものとは変わっている点があることです。

総合して、Solidityの初心者である自分には最適なサイトでした。

Ethernaut

a3e0ed72e147404df78e665ab67de2fb.jpg
(引用: https://ethernaut.openzeppelin.com/)

Solidityのフレームワークを提供しているOpenZeppelinが提供しているサイトです。
ゲーム形式でSolidityの理解を深めることができます。

こちらは事前準備が必要で、MetaMaskのインストールとブロックチェーンへの接続、テストコインの入手をしておく必要があります。
ブロックチェーンはPolygonのテストネットであるMumbaiやEthereumのテストネットであるGoerli等が利用可能です。

ゲームはそれぞれ独立していて難易度もわかるようになっているので、自分のレベルに合わせて気軽に取り組むことができると思います。

ゲームの進め方は

  1. 各ページ内のボタンでテストネットにコントラクトを発行
  2. 表示されている問題とコントラクトのコードを読み解く
  3. ブラウザのデベロッパーツールでコマンドを実行することでコントラクトのメソッドを実行していき、問題の指示通りの状態を実現する
  4. 最後にまたサイト内のボタンから正解かどうかを確認するトランザクションを発行し、正解ならクリア

というものです。

ゲームのコンセプトとしてはコントラクトのハッキングで、セキュリティ面についても学ぶことができます。

謎解き要素が強く楽しいのですが、文法等の説明はないのでSolidityやJavaScriptの知識がないとかなり難しいかと思います。
また、前述の通り答え合わせはできるのですが、ヒントや解説もサイト内にはないので自分で調べる必要があります。

自分にはまだ難しかったのですが、コードの書き方を勉強しているだけでは学べないセキュリティ面について学ぶことができるので、ある程度Solidityの基本が身についている人には非常に良い勉強ツールだと思いました。

Capture The Ether

実は上記2つと並んでもう1つ紹介されていたため、こちらも遊んでみようとしていました。

Ethernautと似ていて、コントラクトをハックしてポイントを稼ぎます。

面白そうだったのでやってみたかったのですが、利用できるブロックチェーンが、最近Ethereumのアップデートにより非推奨となったRopstenというテストネットのみのようで、遊ぶことができませんでした。

まとめ

今回はSolidityの勉強を楽しく行えそうなサイト2つを紹介しました。
今後も少しずつ取り組んでいつかさらに高度なスマートコントラクト開発をやってみたいと思いました。