
[Solidity] ブロックチェーンプログラミングの始め方2022年版
はじめに
巷ではFTXとBinanceによってCryptoの歴史を揺るがすどうのこうのが行われてはおりますが、今日は市況は棚上げして技術の話をしたい気分です。
申し遅れましたが、ブロックチェーンエンジニアをしている @wbydo です。BCGの開発をしています(Twitterの同IDが取れない・・・。)
自分は、元はサーバーサイドエンジニアをしていましたが、2021年バブルを機にスイッチしてブロックチェーンエンジニアになりました。
そのときに感じたのは、これらです。
日本語情報が少ない
日本語に限らず体系的な情報が少ない
2017年の情報が多い(前回バブル)
2021年に新しいソリューションがたくさん生まれて結局デファクトスタンダードが変わった
まぁ、ブロックチェーンプログラミングなんてものはニッチもニッチなので仕方がないんですが、
そんな荒野をひと区切り駆け抜けたと思うので、今だから見える最速ルートを記録に残してみようと思いました。
これから書くこと/書かないこと
私が思う現状でのSolidity学習ルート最適解
プログラミング自体は出来る方が前提(初学者は対象外)※1
仮想通貨取引をしたことがある、FT/NFTを触ったことがある方が前提 ※2
非EVM互換チェーン(Solana、Polcadot、Aptosなど)のプログラミングもこの記事のスコープ外
個別の用語はここで詳細な解説はしない
後日、個人的なwikiへのリンクを貼り直す可能性はある
あるがもう眠い
Step0
「これから書くこと」の前提をクリアしましょう。
※1にかかった方は、ひとまず軽くで良いので Progate を挟むのがオススメです。
挟まずともワンチャンなんとかなりますが、それなりの気合と根性が必要になります。「気合・根性・気合と根性を維持する動機付け」の3つを揃えるか、地道に Progate をやりましょう。
※2にかかった方は、数百円〜数千円単位のお遊びで良いので、やってみるとよいです(これは投資アドバイスではありません)。
FTとはなにか、NFTとはなにか、それらをどうやって手に入れるのか・手放すのか、一連のやり取りの中でMetaMaskがどんな挙動をするのか、あたりをざっと頭に入れるとコードが書きやすいです。
Step1
毎度おなじみ、CryptoZombies をやりましょう。
ゴールは「Solidityってよくある静的型付けOOP言語だな」を理解することです。
以下のような章立てがありますが、「Solidity Path: Beginner to Intermediate Smart Contracts」だけで問題ありません。
Solidity Path: Beginner to Intermediate Smart Contracts
Chainlink Path: Decentralized Oracles
Advanced Solidity Path: Get In-depth Knowledge
そして「Lesson6: App Front-ends & Web3.js」のJavaScript部分のぶん投げっぷりに笑いましょう。
まぁとはいえ、予約語が独特だったり、独自文法があって多少ややこしいんですが、本質的にはただのOOP言語だなという理解です。
Step2
Loot のNFTのコードを読みましょう。
https://etherscan.io/address/0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7#code
ゴールは「openzeppelin のテンプレートを継承してERC721トークンを作るとは何ぞ」を理解すること。
正直Loot Projectはアップデートが進んで今やどうなっているのか把握していませんが、元祖になったNFTは完全フルオンチェーンでSolidityプログラミングの基礎が詰まっています。
contract Loot
の部分を読むことを目指しつつ、
contract ERC721
まで遡れたら最高です。
「なーんだNFT即売早押しとかやってるけど、結局owner(tokenId => address)の記憶領域に自分のアドレス保存する勝負なだけか、どっちらけ〜。」と思えたら乾杯。
参考としてLootとは何ぞやの解説記事です。
Step3
Loot ではなく自分の好きなNFTを作って、テストネットにデプロイしましょう。
ゴールは、「 Hardhat の使い方を覚える」ことです。
ここまでの学習の流れで、「Web3.js」「Truffle」というツールが目に入った可能性もありますが(CryptoZombiesにも出てきましたね。)、それらは2017年前後の時代に活躍したもので、2020-2021年にはHardhatに置き換わりました。今からの学習であれば、それらは使わないと決めきりHardhatを使う選択をすることをオススメします。
Step3の参考記事
Goal
Step3までが出来れば、ブロックチェーンプログラミングの初歩は一通りマスターしたと言えるでしょう。おめでとうございます。
Advance
次なるステップへのネタ帳を連ねておきます。
UniswapV2の仕組みを知る
DeFiの仕組みの礎である Uniswap は声に出して読みたいコントラクトのひとつですね。とはいえ実は仕組みの概要は知っているものの熟読したことはないんです。いつかやりたい。
V2のdocsは以下です。
V2の美しさに思いを馳せたらV3に足を突っ込みましょう。「集中流動性とは?」は以下の動画がわかりやすいです。
私は、さすがにV3のコードリーディングは腰が引けてしまうくらいのレベル感です。
FTを作るにはどうしたら?を考える
ERC721が作れたのであれば同じ要領でERC20も簡単です。「openzeppelinあり、特殊な仕掛けはなし」という条件であればOrenoCoin.solは10行に満たないです。
ただし、法律との兼ね合いは慎重に(これは法的アドバイスではありません)。
単体テストにFoundryを使ってみる
Hardhat環境では、JS/TSで単体テストを書く必要がありますが、それをSolidityにできる(= PJをSolidityで完結させられる)のがウリのツールです。
自分はTSに抵抗がないので使用したことはないですが、Fuzz testingなどの独自機能もあるので用途があう場合には良さそうです。
使い分けに関する納得感のある考察
https://tech.fracton.ventures/entry/2022/08/02/164215
'フルオフチェーン'NFTを作ってみる
Decentralizeな思想では「フルオフチェーン(笑)」とはなりがちですが、
やはりなにかソリューションを作り上げるにあたって、オフチェーン技術ってとっても大事なんです。
そこであえてフルオフチェーンのNFTを作ってみると、何が必要なのか、どこが難しいのかがわかるきっかけになるのではと思います。
Dappsを作ってみる
要はフロントエンドとコントラクトが協調して動作する何かです。NFTだとMintサイトが一番それっぽいですね。
Hardhatを使ったなら、ethers.jsの使い方もある程度わかるはず。React(なり何なり)を使って、ethers.jsでの処理をブラウザで実行すれば良いのがイメージです。
Move言語を覚えてAptos, Suiチェーンに挑戦
なんだか最近注目されているみたいです。
歴史や深い知識を学ぶ
良記事を掲載させて頂いてそちらに譲ります。
おわりに
新しい領域の学習には検索ノイズに踊らされてしまったりすることもあると思いますが、Step1, Step2, Step3の軸はブラさずに調査を進めるのが最短と思います。ぐぐった結果、2017年情報なのに気付かず混乱するというのが一番の罠な気がしています。
正直それなりに広まり終えた情報かなとも思うので、この記事を読んで「大したこと書いてないな」と思ったアナタはきっと何らかのエッジを掴んでることでしょう。
思えなかったアナタも大丈夫、Stepは3つしかない。私もまだまだ精進中です。一緒に頑張りましょう。