こんにちは!
株式会社D-ChainでCTOを務めている今田です。
弊社は2024年4月より始まった、ブロックチェーン公開講座にも関わらせていただきました。今回は公開講座に付随して行われた、株式会社Ecdysis主催のSolidity House(以下SH)に行ってきたので、SHでの体験をシェアしつつ、学んだことや感じたことをお伝えできればと思います。
Solidity House とは?
Solidity House (SH)はブロックチェーン技術に関して幅広く学ぶことができる教室です。ブロックチェーンにおけるアーキテクチャから、EVMベースのスマートコントラクトに関わる技術の様々まで学ぶことができます。
佐賀に会場があり、都会では体験できないのどかな時間が流れています。
今回の合宿は5日間にわたって行われました。
周りの様子
合宿1~2日目:基礎と目標設定
初日は主に参加者全員で個別面談が行われ、合宿期間中の目標を設定しました。「どんな技術を深めたいか」「合宿でどんな成果を出したいか」などを一人ひとり確認してもらい、それを基に進行プランが調整されました。その後は、ブロックチェーン技術の基礎の復習に取り組み、スマートコントラクトの基本的な動作やEVMの仕組みについての理解を深める時間が設けられました。
合宿中の講義ではAcount Abstruction(AA)の説明や、EVMのストレージスロットの仕組みについてなど詳しい内容まで説明がありました。SH の人たちが質問に答えてくれる環境になっていて、参加者それぞれが自由に質問していました。
また、SHの人たちが開発しているMeta Contract (MC) というライブラリの使用方法についても講義がありました。プロキシデザインパターンのコントラクトのデプロイ・メンテナンスを簡易化するためのライブラリで、コントラクトの関数単位での実装変更・追加が容易になっています。
所感では、DAOのようなコントラクトを作成する場合には大いに有用だと思います。
DAOの作成を考えている方はぜひドキュメントを読んでみてください(ドキュメントを改善してほしいと伝えておいたのでわかりやすくなっているはず)。
私は、弊社の新規プロジェクトで使用するコントラクトのデザインパターンおよび設計について取り組んでいました。この合宿期間を通して、簡単なプロトタイプ完成を目標にしました。
私は今まで開発にはHardhatを利用してきたのですが、SHではFoundry(Forge)をメインに利用していたため、いい機会だと思い使用方法や機能などについていろいろ試したり質問してみたりしていました。個人的にはコントラクトのテストなどはこちらの方がやりやすいと思いました(変数をストレージから直接変更できたり、AnvilなどのUtilが思いのほかよかった)。
しかし、直接変数をいじるなどの普段は行えないような操作が介入することで、Forgeで作成したテストスイートをクリアしていても、フロントエンドなどの外部から操作したときに正しく初期化や変数代入が行われているかをチェックしないと、思わぬ落とし穴にはまる可能性があると感じました。
AAについての講義の様子
コラム
ストレージスロットについて講義があったと書きましたが、知識を簡単にシェアします。
ストレージスロットとは、コントラクトの変数データが保存されているスロットです。
スマートコントラクトをプロキシデザインパターンで運用する際に、このスロットが衝突する(データの意図しない上書きが起こる)可能性があるため、工夫が必要になります。
少し前まではこの衝突を避けるために、「Gap」という変数追加用のマージンを用意しておくことでアップグレードに対応していました。 しかし、「Gap」を人間が適切に管理・運用するのはなかなか難しいことだったため、新たな解決策が考案されました。
それがERC-7201です。
概要としては、ハッシュを利用した名前空間を変数に対して用意することによって、衝突する可能性を極力減らすという内容になります。むやみに「Gap」を設けるよりもより効率的にストレージ運用が可能になり、現在のスタンダードになっています。
ご存じない方はこれを機に、詳しく調べて使用してみてくださいね!
合宿2~4日目:プロジェクト作成
合宿後半では、参加者それぞれが自身のプロジェクトを作成していきました。
皆さん黙々と作業を進めており、集中して作業する時間が多かったです。
私も作業を進めながら、設計の修正を行ったり懸念点の列挙などの有意義な時間を設けることができました。私の場合2日作業する中でテストの作成が主でしたが、当初の目標としていたプロトタイプ完成を達成することができました。よかったです。
ちなみに私が作成していたのはNFTを利用したガチャのようなシステムでした。
ガチャの仕組みや、権限周りの作りこみを行いました。
そして、合宿場にはなぜかピザ窯があり、お昼には焼きたてのピザが出てきました。SH の人や参加者でピザを作ってみたい人たちがピザを焼いてくれました!どれも美味しかったです。
ピザです。写真撮る前に食べちゃいました。
合宿最終日:成果発表
5日目は成果発表の時間でした。
私のプロトタイプは、最初に思い描いたものよりもシンプルな構造にはなりましたが、実際に動くものを形にすることができました。
時間が短かったため、動いているシステムのプレゼンテーションを行うというよりは、どのようにブロックチェーンを活用しシステムを作成したかの発表でした。他の参加者の発表はどれも興味深く、それぞれが独自の視点でブロックチェーン技術を活用しているのが印象的でした。
時間があれば、簡単なフロントエンドや、AlchemyなどのAAキットなどとのインテグレーションまで実装できればよかったのになぁとは思いましたが、十分いいものが作れたと思います。あともっと観光したかったです。
まとめ
今回のSolidity House では技術的な学習ははもちろん、合宿を通して、参加している他の人とも交流でき、いろんな人のアイデアにも出会うことがきました。
作業場にはコーヒーや茶菓子があって、作業が終われば近くの温泉にもいくことができ、気軽な旅行みたいな感じでお勉強にいけました。
いつも他人と交流があまりない場所で作業することが多いので、今回の合宿を通してたまには誰かと作業するのもいいなと思いました。
皆さんもこのような機会があれば、ぜひ色々参加してみてください!