📖
各チャプターの概要 | Solidity Programming Essentialsを読む
イーサリアムの知識を整理するために2022年6月発売のSolidity Programming Essentials 2nd Editionを読み進める試みです。
読書ログは以下のスクラップで逐次更新していきます。
各チャプターの概要
現時点で必要な知識については一通りまとめられている感覚。目次を見るだけでスマートコントラクトについて学ぶ必要のあるトピックが分かる。
Chapter 1:ブロックチェーン、イーサリアム、スマートコントラクト入門
- ブロックチェーン基礎知識:用語、技術的なメリット、解決しようとしている課題、など
- イーサリアム特有の概念:外部アカウント(Externally owned accounts)、コントラクトアカウント、ガスなど
- 暗号技術:ハッシュ、暗号化、鍵の使い方
- その他:トランザクション・アカウントの作成方法、トランザクション毎のガスの支払方法、メッセージコールとトランザクションの違い、コードの保存と状態管理
Chapter 2:EthereumとSolidityのインストール
- Ethereumプラットフォームを利用したプライベートブロックチェーンの作成方法
- Ganacheのインストール、Solidityコントラクトの開発、テスト、デプロイに使用するプロセスの紹介
- MetaMask(ウォレット)のインストール
- Remix(Ethereum IDE)の紹介
Chapter 3:Solidityの紹介
- Solidityの様々なバージョンの理解(pragmaによるバージョン指定)
- Solidityの全体像の把握:ステート変数、関数、定数関数、イベント、修飾子、構造体など
- データ型の理解:値型と参照型、記憶型とメモリ型(storageとmemory)
Chapter 4:グローバル変数と関数
- transaction-related、contract-relatedなグローバル変数と関数
- ecrecoverを用いたパブリックアドレスの復元
Chapter 5:式と制御構造
-
if...else
文やswitch
文を利用した制御構造 - whileループ、forループの紹介
Chapter 6:スマートコントラクトの書き方
- スマートコントラクトの設計、定義と実装
- オブジェクト指向言語としてのSolidityの扱い方:継承、多重継承、抽象クラスとインターフェース宣言など
- 再利用可能なコントラクト(ライブラリ)
Chapter 7:関数、修飾子(modifier)、フォールバック
- 入力を受け取って出力を返す基本的な関数
- 状態を変更せずに既存の状態を出力するだけの関数
- 修飾子(modifier)の実装方法
- フォールバックの実装方法
- Receive関数の実例サンプル
Chapter 8:例外、イベント、ログ
- Solidityにおける重要な例外、イベント、ログ
- エラーが起きたときに呼び出し元へ適切にEtherを返す設計
Chapter 9:Truffleの基礎とユニットテスト
- Truffleのコンセプトの理解
- Truffleのライフサイクルを通じた基礎の理解:プロジェクト作成、ファイル構造、構成の変更、サンプルコントラクト作成、テスト、デプロイ、マイグレーション
- ユニットテストの書き方(スマートコントラクトに対するテストの実行)
Chapter 10:コントラクトのデバッグ
- Remixやイベントなど複数のツールを使ったトラブルシューティングやデバッグ
- コードのステップ実行を通じてコードを変更する方法について
Chapter 11:アセンブリプログラミング
- 変数、スコープ、ブロックの操作や値の返し方、メモリやステートスロットの操作、コントラクト関数の呼び出し
- アドレスがコントラクトアドレスかどうかの判断に関連するアセンブリ例
Chapter 12:アップグレード可能なスマートコントラクト
- アップグレード不可能なコントラクトから、様々な戦略を用いてアップグレード可能なコントラクトを記述するまでの道のりを紹介
- キーワード:継承、合成、プロキシコントラクト、アップグレード可能なストレージ
Chapter 13:セキュアなコントラクトの書き方
- セキュアなコントラクトに関するベストプラクティス
- 一般的な脆弱性とその回避方法の紹介:リエントランシー攻撃、オーバーフロー/アンダーフロー攻撃
Chapter 14:トークンコントラクトの書き方
- ERC20(Fungibleトークン)、ERC721(NFT:Non-Fungibleトークン)の書き方
- ERC165やERC223の実装
Chapter 15:Solidityデザインパターン
- 参照、関連、埋め込みを使用したスマートコントラクト内およびコントラクト間のエンティティモデリング
- エンティティに対するCRUD操作の例
- 所有権、複数所有権、複数署名のコントラクト
- haltable or stoppableなスマートコントラクトについての説明
Discussion