Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書
Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書
翔泳社
著者:株式会社FLOC
執筆協力:赤澤直樹
はじめに
本書の対象読者
本書のサンプルの動作環境とサンプルプログラムについて
第1部 ブロックチェーンの概要と構成技術
第1章 ブロックチェーンの概要と学ぶ意味
1.1 分散システムとブロックチェーン
1.1.1 集中システムと分散システム
1.1.2 ブロックチェーンが成し遂げたこと
1.2 ブロックチェーンの構造
1.2.1 ブロックとチェーンの構造
1.2.2 たくさんのコンピュータによって共有されている
1.2.3 ブロックチェーンの特徴
1.3 ブロックチェーンの型
1.3.1 パブリックチェーン
1.3.2 プライベートチェーン
1.3.3 コンソーシアムチェーン
1.3.4 ブロックチェーンの活かし方は工夫次第
1.4 スマートコントラクト
1.4.1 ブロックチェーン2.0とプラットフォーム型ブロックチェーン
1.4.2 スマートコンストラクトと分散型アプリケーション(DApps)
1.5 ブロックチェーンの歴史
1.5.1 ブロックチェーン前史(1990年代前半~2000年代前半)
1.5.2 サトシナカモトによる論文発表(2008年~2010年)
1.5.3 アルトコインの急増(2011年~2019年現在)
1.5.4 プラットフォーム型ブロックチェーンの誕生(2015年~2019年現在)
1.5.5 プライベート(コンソーシアム)チェーンの誕生(2015年~2019年現在)
1.5.6 ブロックチェーンや周辺技術が多様化(現在~)
1.6 増えるユースケース
1.6.1 トレーサビリティの向上
1.6.2 分散型ゲーム
1.6.3 パラメトリック保険
1.6.4 分散型SNS
1.6.5 IoTとの連携
1.7 ブロックチェーンを学ぶ意義
章末問題
第2章 ブロックチェーンの構成技術
2.1 暗号技術
2.1.1 暗号学的ハッシュ関数
2.1.2 公開鍵暗号方式
2.1.3 電子署名
2.2 P2Pネットワーク
2.2.1 P2Pネットワークとは
2.2.2 クライアント-サーバー方式との比較
2.2.3 ブロックチェーンにおけるP2Pネットワーク
2.2.4 フルノードとSPVノード
2.3 コンセンサスアルゴリズム
2.3.1 P2Pネットワーク上でただ1つの真実を決める
2.3.2 Proof of Workとは
2.3.3 Proof of Workのプロセス
2.3.4 ハッシュパワーと難易度調整
2.3.5 Proof of Workのデメリット
2.3.6 その他のコンセンサスアルゴリズム
章末問題
第2部 Pythonの基本
第3章 Pythonの概要と開発環境の準備
3.1 なぜPythonなのか
3.1.1 バージョンについて
3.2 開発環境の構築
3.2.1 Anaconda(アナコンダ)とは
3.2.2 Anacondaのインストールにあたっての留意点
3.2.3 Anacondaのインストール方法
3.2.4 インストール手順を進める
3.2.5 Anacondaで仮想環境を作成する
章末問題
第4章 Pythonの基本文法
4.1 演算
4.2 ビット演算子
4.3 変数
4.4 関数
関数変数のスコープ
4.5 データ型
4.5.1 主なデータ型
4.5.2 データ型の確かめ方
4.6 リスト(配列)
4.6.1 リスト
4.6.2 インデックス
4.6.3 配列の扱い
4.7 辞書
4.7.1 辞書型
4.7.2 要素の扱い方
4.8 JSON
4.9 制御文(if文、for文、while文)
4.9.1 比較演算子
4.9.2 if文
4.9.3 for文
4.9.4 while文
章末問題
第5章 オブジェクト指向とクラス
5.1 オブジェクト指向
5.1.1 オブジェクト指向とは
5.1.2 オブジェクト指向のメリット
5.2 クラス
5.2.1 クラス
5.2.2 インスタンス
5.3 特殊メソッド
5.3.1 初期化する特殊メソッド
5.3.2 文字列型へ変換する特殊メソッド
5.3.3 オブジェクトを辞書型のように扱う特殊メソッド
章末問題
第6章 モジュールとパッケージ
6.1 モジュールとパッケージ
6.1.1 モジュール
6.1.2 パッケージ
pid
6.2 import文
6.2.1 import文の使い方
6.2.2 import文の注意点
6.3 if _ _name_ _ == '_ _main_ _’:
章末問題
第3部 ブロックチェーンの仕組み
第7章 ブロックチェーンの構造
7.1 ハッシュ関数
7.1.1 ハッシュ関数とは
7.1.2 ハッシュ関数の種類
7.1.3 ハッシュ関数を使ってみよう
7.2 ブロックの中身
7.2.1 ブロック内部の構造
7.2.2 ブロックヘッダ
7.2.3 トランザクション
章末問題
第8章 アドレス
8.1 アドレスが生成されるプロセス
8.1.1 アドレスとは
8.1.2 アドレスが生成されるまでの全体像
8.2 秘密鍵の生成
8.2.1 秘密鍵の種は「乱数」
8.2.2 秘密鍵を生成してみよう
8.3 公開鍵の生成
8.3.1 公開鍵を生成してみよう
8.3.2 (発展編)楕円曲線
8.3.3 (発展編)楕円曲線暗号
8.3.4 (発展編)秘密鍵から公開鍵を生成
8.3.5 公開鍵のフォーマット
8.4 アドレスの生成
8.4.1 可読性を高める工夫
8.4.2 Base58
8.4.3 Base58Check
8.44 アドレスを生成する
章末問題
第9章 ウォレット
9.1 ウォレットとは
9.1.1 ウォレットは秘密鍵を管理している
9.1.2 ウォレットの安全性と利便性
9.1.3 秘密鍵をより扱いやすくするために
9.2 非決定性ウォレットと決定性ウォレット
9.2.1 非決定性ウォレット
9.2.2 決定性ウォレット
9.3 階層的決定性ウォレット(HDウォレット)
9.3.1 HDウォレットの概要
9.3.2 マスター秘密鍵、マスター公開鍵、チェーンコード
9.3.3 マスター鍵を生成してみよう
9.3.4 子鍵の生成
9.3.5 子秘密鍵を生成しよう
9.3.6 拡張鍵
9.3.7 強化導出鍵
9.3.8 HDウォレットのパス
章末問題
第10章 トランザクション
10.1 ビットコインブロックチェーンのトランザクション
10.1.1 ビットコインにおけるトランザクションデータの構造
10.1.2 実際のトランザクションデータを確認
10.1.3 トランザクションデータを取得してみよう
10.2 UTXO
10.2.1 UTXO
10.2.2 アカウントベース方式とUTXO方式
10.2.3 UTXOを取得してみよう
10.3 コインベース取引
10.3.1 コインベース取引
10.3.2 実際のコインベース取引を確認しよう
10.4 スクリプト言語
10.4.1 スクリプト言語
10.4.2 CP_CODE
10.5 トランザクションの種類
10.5.1 Locking ScriptとUnlocking Script
10.5.2 トランザクションの種類
10.5.3 P2PKH(Pay-to-Public-Key-Hash)
10.5.4 P2PK(Pay-to-Public-Key)
10.5.5 P2SH(Pay-to-Script-Hash)
章末問題
第11章 Proof of Work
11.1 Proof of Work
11.1.1 Proof of Workのプロセス
11.1.2 Proof of Workで改ざんが難しい理由
11.2 ブロックヘッダを作る
11.2.1 ブロックヘッダの復習
11.3 Nonceを変えてハッシュ計算
11.3.1 ハッシュ計算のイメージ
11.3.2 Difficulty bitsとDifficulty Target
11.3.3 ブロックヘッダのハッシュ化
11.3.4 条件に合うハッシュ値が見つからない場合
章末問題
第4部 ブロックチェーンを作る
第12章 実装するブロックチェーンの概要を確認しよう
12.1 実装するブロックチェーン
12.1.1 実装するブロックチェーンの構造
12.1.2 機能について
12.1.3 カスタマイズについて
12.2 実装にあたっての留意点
12.2.1 初学者を想定した構築
12.2.2 実用には使えない
12.2.3 マイニングの成功時間
第13章 プレーンブロックチェーンを作ろう
13.1 プレーンブロックチェーン
13.1.1 プレーンブロックチェーンの実装
13.1.2 出力結果
13.2 プレーンブロックチェーンの解説
13.2.1 2つのクラス
13.2.2 個々のブロックを定義する「Blockクラス」
13.2.3 ブロックの関係性を定義する「Blockchainクラス」
章末問題
第14章 カスタマイズしてみよう
14.1 難易度調整(Retargeting)
14.1.1 難易度調整のルール
14.1.2 難易度調整が行われる理由
14.1.3 難易度調整の仕組みを確認する
14.2 マークルルート
14.2.1 マークルルートの復習
14.2.2 マークルルートとマークルツリーの意義
14.2.3 マークルルートの実装方針
14.2.4 マークルルートを計算してみよう
章末問題
第5部 ブロックチェーンをさらに学ぶ
第15章 ブロックチェーン開発の最前線
15.1 スケーラビリティ問題への挑戦
15.1.1 スケーラビリティ問題
15.1.2 ブロックサイズの拡張とデータの効率化
15.1.3 ライトニングネットワーク
15.1.4 サイドチェーン技術
15.2 ブロックチェーンの多様化
15.2.1 イーサリアム(Etherreum)
15.2.2 IOTA
15.2.3 量子耐性のあるブロックチェーン
15.3 暗号技術の進化
15.3.1 シュノア署名
15.3.2 ゼロ知識証明
15.3.3 準同型暗号
15.3.4 章末問題
第16章 より学びたい人のために
16.1 情報収集を続けよう
ビットコインに関する公式の情報源
ブロックチェーン全般の情報源
16.2 さらに学習範囲を広げよう
オンラインのみの学習サービス
オフライン中心の教育学習サービス
16.3 Bitcoin Coreを導入してみよう
Bitcoin Coreとは
Bitcoin Coreのインストールにあたっての注意点
インストール方法
ディレクトリの説明
データを取得してみよう
16.4 ブロックチェーンのカスタマイズを進めてみよう
本書で扱ったプレーンブロックチェーン
より"リアル"に近づける
他の言語で実装してみる
新技術を取り込んでみる
16.5 DApps開発に挑戦してみよう
DApps開発プラットフォーム
プラットフォームの選び型
章末問題
Appendix 章末問題の解答
おわりに
謝辞
INDEX
著者プロフィール
執筆協力者プロフィール