📖

各チャプターの概要 | Solidity Programming Essentialsを読む

2022/08/02に公開

イーサリアムの知識を整理するために2022年6月発売のSolidity Programming Essentials 2nd Editionを読み進める試みです。

Solidity Programming Essentials: A guide to building smart contracts and tokens using the widely used Solidity language, 2nd Edition (English Edition)

読書ログは以下のスクラップで逐次更新していきます。
https://zenn.dev/mah/scraps/ea8c79961ae8c8

各チャプターの概要

現時点で必要な知識については一通りまとめられている感覚。目次を見るだけでスマートコントラクトについて学ぶ必要のあるトピックが分かる。

Chapter 1:ブロックチェーン、イーサリアム、スマートコントラクト入門

  • ブロックチェーン基礎知識:用語、技術的なメリット、解決しようとしている課題、など
  • イーサリアム特有の概念:外部アカウント(Externally owned accounts)、コントラクトアカウント、ガスなど
  • 暗号技術:ハッシュ、暗号化、鍵の使い方
  • その他:トランザクション・アカウントの作成方法、トランザクション毎のガスの支払方法、メッセージコールとトランザクションの違い、コードの保存と状態管理

https://zenn.dev/mah/articles/7578360064b739

Chapter 2:EthereumとSolidityのインストール

  • Ethereumプラットフォームを利用したプライベートブロックチェーンの作成方法
  • Ganacheのインストール、Solidityコントラクトの開発、テスト、デプロイに使用するプロセスの紹介
  • MetaMask(ウォレット)のインストール
  • Remix(Ethereum IDE)の紹介

https://zenn.dev/mah/articles/c0d500d23956f2

Chapter 3:Solidityの紹介

  • Solidityの様々なバージョンの理解(pragmaによるバージョン指定)
  • Solidityの全体像の把握:ステート変数、関数、定数関数、イベント、修飾子、構造体など
  • データ型の理解:値型と参照型、記憶型とメモリ型(storageとmemory)

https://zenn.dev/mah/articles/c5fc79118ac9f7

Chapter 4:グローバル変数と関数

  • transaction-related、contract-relatedなグローバル変数と関数
  • ecrecoverを用いたパブリックアドレスの復元

https://zenn.dev/mah/articles/d5ac605342c1c7

Chapter 5:式と制御構造

  • if...else文やswitch文を利用した制御構造
  • whileループ、forループの紹介

Chapter 6:スマートコントラクトの書き方

  • スマートコントラクトの設計、定義と実装
  • オブジェクト指向言語としてのSolidityの扱い方:継承、多重継承、抽象クラスとインターフェース宣言など
  • 再利用可能なコントラクト(ライブラリ)

https://zenn.dev/mah/articles/12a8dbe84ef33b

Chapter 7:関数、修飾子(modifier)、フォールバック

  • 入力を受け取って出力を返す基本的な関数
  • 状態を変更せずに既存の状態を出力するだけの関数
  • 修飾子(modifier)の実装方法
  • フォールバックの実装方法
  • Receive関数の実例サンプル

https://zenn.dev/mah/articles/a726d6111b2e86

Chapter 8:例外、イベント、ログ

  • Solidityにおける重要な例外、イベント、ログ
  • エラーが起きたときに呼び出し元へ適切にEtherを返す設計

https://zenn.dev/mah/articles/35d8af20cc025c

Chapter 9:Truffleの基礎とユニットテスト

  • Truffleのコンセプトの理解
  • Truffleのライフサイクルを通じた基礎の理解:プロジェクト作成、ファイル構造、構成の変更、サンプルコントラクト作成、テスト、デプロイ、マイグレーション
  • ユニットテストの書き方(スマートコントラクトに対するテストの実行)

https://zenn.dev/mah/articles/053c763c9cc522

Chapter 10:コントラクトのデバッグ

  • Remixやイベントなど複数のツールを使ったトラブルシューティングやデバッグ
  • コードのステップ実行を通じてコードを変更する方法について

https://zenn.dev/mah/articles/c9ecd64b2a0e53

Chapter 11:アセンブリプログラミング

  • 変数、スコープ、ブロックの操作や値の返し方、メモリやステートスロットの操作、コントラクト関数の呼び出し
  • アドレスがコントラクトアドレスかどうかの判断に関連するアセンブリ例

https://zenn.dev/mah/articles/9b2dbee85eac80

Chapter 12:アップグレード可能なスマートコントラクト

  • アップグレード不可能なコントラクトから、様々な戦略を用いてアップグレード可能なコントラクトを記述するまでの道のりを紹介
  • キーワード:継承、合成、プロキシコントラクト、アップグレード可能なストレージ

https://zenn.dev/mah/articles/339082de4ba05e

Chapter 13:セキュアなコントラクトの書き方

  • セキュアなコントラクトに関するベストプラクティス
  • 一般的な脆弱性とその回避方法の紹介:リエントランシー攻撃、オーバーフロー/アンダーフロー攻撃

https://zenn.dev/mah/articles/3ccf52c7cb60df

Chapter 14:トークンコントラクトの書き方

  • ERC20(Fungibleトークン)、ERC721(NFT:Non-Fungibleトークン)の書き方
  • ERC165やERC223の実装

https://zenn.dev/mah/articles/2810ef62f9f879

Chapter 15:Solidityデザインパターン

  • 参照、関連、埋め込みを使用したスマートコントラクト内およびコントラクト間のエンティティモデリング
  • エンティティに対するCRUD操作の例
  • 所有権、複数所有権、複数署名のコントラクト
  • haltable or stoppableなスマートコントラクトについての説明

https://zenn.dev/mah/articles/a71c8d411c8aa3

Discussion