社内向けに用意した、スマートコントラクト開発者を目指す人のためのSolidity等の勉強方法を案内です。
※およそ半年以上前に作成した資料なので、近日中にアップデート予定です。
💡 こんにちは、リードエッジにてリードエンジニアをしているへいきょです。元々ReactやFirebaseをメインに触っており、マッチングサービスやSNSを開発してきました。
Solidityやスマートコントラクト開発は世界的にもまだ歴史が浅く、特に日本ではそれらを扱えるエンジニアはほぼ市場に流通していないのが現状です。
なので、熱意を持って集中的にコミットすれば国内有数のブロックチェーンエンジニアとして突き抜けた存在になることも目指せるでしょう。
本資料が皆さんの飛躍の一助になれば幸いです。
スマートコントラクトの特徴
- Solidityによるスマートコントラクトは「サーバーサイドの開発」というイメージに近い。ただし従来のサーバーサイド開発と大きく異なるのは、自分たちで個別のサーバー(あるいはDB)を用意せず、Ethereumメインネットワーク(あるいは他の通貨のネットワーク)を世界で唯一のサーバーとして共有する。
💡 ReduxやVuex等のFLUXに基づいたState Management(状態管理)の経験がある方には、Single State Of Truth(「信頼できる唯一の情報源」)という言い方が分かりやすい。EthereumメインネットワークをSingle State Of Truthとするのがスマートコントラクト開発。
- **スマートコントラクトは一度Deployしたら修正できない。**ブロックチェーン的な特徴と言える。例えばスマートコントラクトにセキュリティ上の問題点があった場合、新しくスマートコントラクトをDeployし直すしかない。
- スマートコントラクト上でコードを実行するのには費用がかかる。上記で紹介したように全員で一つのサーバーを共有するので、余計な処理やデータ転送でネットワークが重くなるのを避けるためにこのようにコードの実行に課金されるように設計された。つまり、メモリ単位でのコードの最適化が求められる(冗長なコードを書くとユーザーに余計なお金を払わせることになってしまう)。昨今の可読性を重視してフロントエンド的な書き方とは対照的で、むしろCやJavaのような古い言語の書き方や競プロの書き方に近い。
- Solidityはどんな言語に似ていると言えるか。SolidtiyはJavaScriptをベースに開発され、大元の記法は共通している。しかし、厳格な静的言語であるSolidityと、動的言語であるJavaScriptでは埋められらない隔たりがあるというのが個人的な所感。むしろTypeScriptに近いと言った方が正確。
◎「SolidtiyはJavaScriptを元に開発された」
△「正:「SolidtiyはJavaScriptに似た言語である」
◯「SolidityはTypeScriptの経験があるエンジニアと親和性が高い」
求める能力的な要件
必須要件
- プログラミングやComputerScienceのバックグラウンドがある
個人的な所管ですが、Pythonで競プロをやっていた方や、研究の手段としてプログラミングをしていた方は親和性が高いと思います。
-
Solidityで「セキュアかつある程度最適化された」スマートコントラクトが実装できる
-
英語で情報集することに抵抗がない(ある程度は英語での情報収集が必須になるため。ただし、研究で使用するような英語よりは遥かに容易)
望ましい要件
- Reactによるフロントエンド開発の経験(業務レベルでなくて良い)
Reactのキャッチアップについては現状では必要ないですが、希望者には別途ご案内します。僕がReact入門の電子書籍出そうと思っているくらいなので、最短のフローをご案内できます
-
Moralisを利用してNFTマーケットプレイスの実装ができる
- Moralisの使い方
- MoralisのDB設計
Moralisとは簡単に言うとDapps開発を簡易化するためのサービスです(Web3におけるFirebaseのようなものです)。
開発の工数を大幅に削減できます。
ただし、スマートコントラクトの実装はどのみち必須です。
具体的な実装予定の機能
NFTマーケットプレイスを開発します。
リリースに必要な最小限度の機能(いわゆるMVP)から始めて、ユーザー間でのC2Cな二次流通機能、ボンディングカーブ等の高度な機能の実装を予定しています。
初期段階で必須
- NFTのMINT
- NFTのTransfer
- NFTの売買(※Transferとほぼ同じ)
将来的に実装したい機能
- NFTの価格のボンディングカーブ
- Programable NFT
学習リソース
まずやるべきこと
市販の書籍ではSolidityの文法・記法そのものに対して十分な紙幅が割けられていない。Solidityの公式ドキュメントでも推奨されている教材で実装をハンズオンで体験できる。
書籍の紹介
『ブロックチェーン実践入門: ビットコインからイーサリアム、DApp開発まで』
「そもそもブロックチェーンとは?ETHの仕様とは」が気になる方向け。ブロックチェーンの基礎やETHの仕様について技術的な側面からインプットしておくとSolidityやDapps開発等の学習効率も良い。
『SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで』(オライリー)
題名ほどスマートコントラクトについて掘り下げていない。
『マスタリングイーサリアム』(オライリー)
ETHの著者による書籍。有名だが、難解でおすすめできない。
公式ドキュメント
常に公式ドキュメントは読むべき。
公式ドキュメントを理解するためにその他の教材や資料が存在する。
Solidity公式ドキュメント(和訳)(ただし、和訳版は多少バージョンが古いです)
Web上の資料(随時更新)
基本的に日本語の記事は質が良くないが、たまに良記事もある。が、やはり日本語での情報収集は当てにしない方が無難です。
Web開発者がスマートコントラクト開発で戸惑いがちなポイント8個
【Solidity】event の半分は優しさで出来ている話
Ethernaut 全22問を解いてみた (0.Hello Ethernaut ~ 22.Shop)