堅牢なスマートコントラクト開発のためのブロックチェーン[技術]入門
堅牢なスマートコントラクト開発のためのブロックチェーン[技術]入門
技術評論社
著者:田篭照博
はじめに
本書構成
Part1 ブロックチェーンと関連技術
Chapter 1 ブロックチェーンの全体像
1.1 ブロックチェーン
ブロックチェーンとは
ビットコインとは
1.2 ビットコインネットワーク
1.3 Ethereum
1.4 ブロックチェーンネットワークの構成要素
P2P(ピア・ツー・ピア)
参加者
トランザクション(取引)
ブロック
分散台帳
マイニング
Chapter 2 ブロックチェーンを理解するための暗号技術
2.1 ハッシュ関数
SHA-256
RIPEMD-160
HASH160
2.2 公開鍵暗号
2.3 楕円曲線暗号
楕円曲線
加算
倍算
秘密鍵と公開鍵の生成法
2.4 デジタル署名
デジタル署名と検証の流れ
Part2 ビットコインネットワーク
Chapter 3 お金のように扱える仕組み
3.1 所有者を特定する「鍵」と「錠」
3.2 送金先となる「アドレス」
Base58Checkエンコード
アドレスを生成する流れ
3.3 鍵を管理する「ウォレット」
3.4 ウォレットの種類
パソコン上のウォレット
モバイルウォレット
取引所のウォレット
ペーパーウォレット
ハードウェアウォレット
Chapter 4 トランザクション
4.1 トランザクションのライフサイクル
4.2 トランザクションの概要
送金の流れ(例)
4.3 トランザクションの構造
Locktimeフィールド
4.4 UTXOと残高
4.5 Locking ScriptとUnlocking Script
スクリプトの検証の仕組み
トランザクションの一部に署名する
Pay to Pubkey
MultiSig(Pay to MultiSig)
Pay to Script Hash(P2SH)
OP_RETURN
Chapter 5 ブロックとブロックチェーン
5.1 ブロックの構造と識別子
5.2 ブロックからトランザクションを検索する(マークルツリー)
マークルツリー
Chapter 6 マイニングとコンセンサスアルゴリズム
6.1 ビザンチン将軍問題と分散型コンセンサス
6.2 Proof-Of-Work
問題を解く=Nonceを見つけること
総当たりでNonceを試す
検証する
改ざんが極めて困難な理由
6.3 トランザクションの集積
6.4 マイナーの報酬トランザクション(coinbaseトランザクション)
6.5 チェーンの分岐(フォーク)
トランザクションが同時に発行された場合
6.6 51%攻撃
Part3 Ethereumとスマートコントラクト開発
Chapter 7 Ethereumとビットコインネットワークの主な違い
7.1 Ethereumの特徴
流通通貨
スマートコンストラクト
アカウント
ブロックのデータ構造
ステート(状態)の遷移
アカウントに紐づく情報
トランザクション、メッセージ、コール
Gas
7.2 ネットワークの種類
パブリックネット
プライベートネット
テストネット
Chapter 8 スマートコントラクト開発の準備とSolidityの基本文法
8.1 環境構築
gethのインストール
Genesisブロックの作成とgethの起動
アカウントの作成
gethコンソールでよく使うコマンド
8.2 Ethereumの公式ウォレット(Mist Wallet)
インストールと起動(Windowsの場合)
インストールと起動(macOSの場合)
Mist Walletアプリケーション
8.3 Remix-Solidity IDE
8.4 Solidity言語仕様
アクセス修飾子
Chapter 9 スマートコントラクトの用途別サンプル
9.1 サンプル(その1)-HelloEthereum
新しいコンストラクトをデプロイする
ソースコードを記述してコンストラクトを指定する
コンストラクトを生成する
Provide maximum feeとパスワードの設定
CONSTRACTS画面から遷移する
トランザクションを発行する
コンストラクトの情報を表示する
トランザクションを実行する
Mist Wallet上でトランザクションの変更結果を確認する
9.2 サンプル(その2)-クラウドファンディング用のコントラクト
コンストラクトを生成する
キャンペーンに成功するケース
キャンペーンに失敗するケース
9.3 サンプル(その3)-名前とアドレスを管理するコントラクト
動作を確認する
9.4 サンプル(その4)-IoTで利用するスイッチを制御するコントラクト
コンストラクトの利用の流れ
9.5 サンプル(その5)-ECサイトで利用するコントラクト
9.6 サンプル(その6)-オークションサービスで利用するコントラクト
9.7 サンプル(その7)-抽選会で利用するコントラクト
Part4 スマートコントラクトのセキュリティ
Chapter 10 スマートコントラクトのセキュリティプラクティス
10.1 Condition-Effects-Interactionパターン
10.2 Withdrawパターン(push vs pull)
push型のパターン
pull型のパターン
10.3 Access Restrictionパターン
事例
10.4 Mortalパターン
10.5 Circuit Breakerパターン
Chapter 11 スマートコントラクトの脆弱性の仕組みと攻撃
11.1 Reentrancy問題
攻撃を受ける側のコンストラクト
攻撃する側のコンストラクト
一連の流れ
割り当てるアドレス
Reentrancy問題を体験する
イベントを確認する
修正後の結果
11.2 Transaction-Ordering Dependence(TOD)
11.3 Timestamp Dependence
11.4 重要情報の取り扱い
11.5 オーバーフロー
Chapter 12 事例から学ぶブロックチェーンのセキュリティ
12.1 サードパーティの脆弱性(Solidity脆弱性)
12.2 クライアントアプリの脆弱性と鍵管理(Jaxx脆弱性)
注意点
おわりに
参考図書
索引