第1版の発刊から、ビットコインとオープンブロックチェーンの基盤技術を知るための解説書として長く親しまれている『Mastering Bitcoin』の第3版。本書は、ビットコインの仕組みから、Bitcoin Coreの実装、ウォレットの内部動作、トランザクション、ブロックの構造、ノードとネットワーク、認証・認可、デジタル署名、マイニングにいたるまでを、豊富な図解と実践的なコード例を交えて包括的に解説。第3版では、セグウィット、Bech32、タップルート、タップスクリプト、シュノア署名、ライトニングネットワークといった、最新のビットコイン開発で重要性が高まっている概念が追加されたほか、大幅に内容が更新されています。ビットコインとブロックチェーン技術への理解を深めたいエンジニア、ビットコインや暗号資産ビジネスに興味を持つすべての人にとって必読の一冊。
マスタリング・ビットコイン 第3版
―オープンブロックチェーンとそのプログラミング
Andreas M. Antonopoulos、David A. Harding 著、安土 茂亨、鳩貝 淳一郎 監訳、長尾 高弘 訳
- TOPICS
- Programming , Database
- 発行年月日
- 2025年12月
- PRINT LENGTH
- 416
- ISBN
- 978-4-8144-0144-4
- 原書
- Mastering Bitcoin, 3rd Edition
- FORMAT
- Print PDF EPUB
目次
本書への賛辞
まえがき
1章 イントロダクション
1.1 ビットコインの歴史
1.2 さあ始めよう
1.2.1 ビットコインウォレットの選択
1.2.2 とりあえず始めてみる
1.2.3 リカバリーコード
1.2.4 ビットコインアドレス
1.2.5 ビットコインの受け取り
1.2.6 最初のビットコインの入手
1.2.7 ビットコインの時価の調べ方
1.2.8 ビットコインの送金と受け取り
2章 ビットコインの仕組み
2.1 ビットコインの概要
2.2 オンラインショップからの商品の購入
2.3 ビットコイントランザクション
2.3.1 トランザクションのインプットとアウトプット
2.3.2 トランザクションチェーン
2.3.3 おつり
2.3.4 コイン選択
2.3.5 よくあるトランザクションの形態
2.4 トランザクションの構築
2.4.1 正しいインプットの入手
2.4.2 アウトプットの作成
2.4.3 ブロックチェーンへのトランザクションの追加
2.5 ビットコインのマイニング
2.6 トランザクションによる支払い
3章 Bitcoin Core:リファレンス実装
3.1 ビットコインからBitcoin Coreへ
3.2 ビットコインの開発環境
3.3 Bitcoin Coreをソースコードからコンパイルする
3.3.1 Bitcoin Coreリリースの選択
3.3.2 Bitcoin Coreのビルド設定
3.3.3 Bitcoin Coreの実行可能ファイルのビルド
3.4 Bitcoin Coreノードの実行
3.5 Bitcoin Coreノードの設定
3.6 Bitcoin CoreのAPI
3.6.1 Bitcoin Coreの状態情報の取得
3.6.2 トランザクションの解析とデコード
3.6.3 ブロックの解析
3.6.4 ユーザープログラムからBitcoin Core APIへのアクセス方法
3.7 さまざまなクライアント、ライブラリ、ツールキット
4章 鍵とアドレス
4.1 公開鍵暗号
4.1.1 秘密鍵
4.1.2 楕円曲線暗号の詳細
4.1.3 公開鍵
4.2 アウトプットスクリプト/インプットスクリプト
4.3 IPアドレス:ビットコイン草創期のアドレス(P2PK)
4.4 P2PKHのためのレガシーアドレス
4.5 Base58Checkエンコード方式
4.6 圧縮公開鍵
4.7 レガシーP2SH(Pay to Script Hash)アドレス
4.8 Bech32アドレス
4.8.1 Bech32アドレスの問題点
4.8.2 Bech32m
4.8.3 秘密鍵の形式
4.8.4 圧縮された秘密鍵
4.9 高度な鍵とアドレス
4.9.1 バニティアドレス
4.9.2 ペーパーウォレット
5章 ウォレットの復元
5.1 個別の鍵生成
5.1.1 決定論的鍵生成
5.1.2 子公開鍵の導出
5.1.3 HD鍵生成(BIP32)
5.1.4 シードとリカバリーコード
5.1.5 鍵以外のデータのバックアップ
5.1.6 鍵導出パスのバックアップ
5.2 ウォレットの技術スタックの詳細
5.2.1 BIP39リカバリーコード
5.2.2 シードからのHDウォレットの構築
5.2.3 ウェブストアでの拡張公開鍵の利用
6章 トランザクション
6.1 シリアライズされたビットコイントランザクション
6.2 バージョン
6.3 マーカーとフラグの拡張
6.4 インプット
6.4.1 インプットの個数
6.4.2 アウトポイント
6.4.3 インプットスクリプト
6.4.4 シーケンス
6.5 アウトプット
6.5.1 アウトプットの個数
6.5.2 金額
6.5.3 アウトプットスクリプト
6.6 ウィットネス構造
6.6.1 循環依存
6.6.2 第三者によるトランザクション展性の悪用
6.6.3 相手方によるトランザクション展性の悪用
6.6.4 セグウィット
6.6.5 ウィットネス構造のシリアライズ
6.7 ロックタイム
6.8 コインベーストランザクション
6.9 ウェイトと仮想バイト(vbyte)
6.10 レガシーシリアライズ形式
7章 認可と認証
7.1 トランザクションスクリプトとScript言語
7.1.1 チューリング不完全
7.1.2 ステートレスな検証
7.1.3 スクリプトの組み立て
7.1.4 P2PKH(Pay to Public Key Hash)
7.2 スクリプトによるマルチシグ
7.2.1 CHECKMULTISIG実行時の奇妙な動作
7.3 P2SH(Pay to Script Hash)
7.3.1 P2SHアドレス
7.3.2 P2SHの長所
7.3.3 引出スクリプトと検証
7.4 データ記録アウトプット(OP_RETURN)
7.5 トランザクションのロックタイムの制限
7.5.1 OP_CLTV(Check Lock Time Verify)
7.6 相対タイムロック
7.6.1 OP_CSVによる相対タイムロック
7.7 フロー制御(条件分岐)のあるスクリプト
7.7.1 VERIFYオペコードによる条件分岐
7.7.2 フロー制御を使うスクリプト
7.8 複雑なスクリプトの例
7.8.1 セグウィットのアウトプットとトランザクションの例
7.8.2 セグウィットへのアップグレード
7.9 マークル化代替スクリプトツリー(MAST)
7.10 P2C(Pay to Contract)
7.11 スクリプトレスマルチシグとしきい値署名
7.12 タップルート(Taproot)
7.13 タップスクリプト
8章 デジタル署名
8.1 デジタル署名の仕組み
8.1.1 デジタル署名の作成
8.1.2 署名の検証
8.1.3 署名のハッシュタイプ(SIGHASH)
8.2 シュノア署名
8.2.1 シュノア署名のシリアライズ
8.2.2 シュノアベースのスクリプトレスマルチシグ
8.2.3 シュノアベースのスクリプトレスしきい値署名
8.3 ECDSA署名
8.3.1 ECDSAのアルゴリズム
8.3.2 シリアライズされたECDSA署名(DER)の細部
8.4 署名におけるランダム性の重要性
8.5 セグウィットの新しい署名アルゴリズム
9章 トランザクション手数料
9.1 トランザクション手数料を払うのは誰か
9.2 手数料と手数料率
9.3 適切な手数料率の推定方法
9.4 RBFによる手数料引き上げ
9.5 CPFPによる引き上げ
9.6 パッケージリレー
9.7 トランザクションピンニング
9.8 CPFP carve outとアンカーアウトプット
9.9 トランザクションへの手数料の追加
9.10 手数料スナイピングに対するタイムロックによる防御
10章 ビットコインネットワーク
10.1 ノードのタイプと役割
10.2 ビットコインネットワーク
10.3 コンパクトブロックリレー
10.4 非公開ブロックリレーネットワーク
10.5 ネットワークディスカバリー
10.6 フルノード
10.7 Inventory(在庫)の交換
10.8 軽量クライアント
10.9 ブルームフィルター
10.9.1 ブルームフィルターの仕組み
10.9.2 軽量クライアントのブルームフィルターの使い方
10.10 コンパクトブロックフィルター
10.10.1 GCS(Golomb-Rice Coded Sets)
10.10.2 ブロックフィルターに入れるべきデータ
10.10.3 複数のピアからのブロックフィルターのダウンロード
10.10.4 非可逆圧縮による帯域幅の削減
10.10.5 コンパクトブロックフィルターの使い方
10.11 軽量クライアントとプライバシー
10.12 暗号化され、認証された接続
10.13 メモリプールとオーファンプール
11章 ブロックチェーン
11.1 ブロックの構造
11.2 ブロックヘッダー
11.3 ブロックの識別子:ブロックヘッダーハッシュとブロック高
11.4 ジェネシスブロック
11.5 ブロックチェーン内のブロックのつながり
11.6 マークルツリー
11.7 マークルツリーと軽量クライアント
11.8 ビットコインのテストブロックチェーン
11.8.1 テストネット:ビットコインのテスト用プレイグラウンド
11.8.2 シグネット:PoA(Proof of Authority)テストネット
11.8.3 レグテスト:ローカルブロックチェーン
11.9 テストブロックチェーンを使った開発
12章 マイニングとコンセンサス
12.1 ビットコイン経済と通貨発行
12.2 分散型のコンセンサス
12.3 独立して行われるトランザクションの検証
12.4 マイニングノード
12.4.1 コインベーストランザクション
12.4.2 コインベース報酬と手数料
12.4.3 コインベーストランザクションの構造
12.4.4 コインベースデータ
12.5 ブロックヘッダーの組み立て
12.6 ブロックのマイニング
12.6.1 PoWアルゴリズム
12.6.2 ターゲットの表現形式
12.6.3 難易度調整のためのターゲット変更
12.7 Median Time Past(MTP)
12.8 ブロックのマイニングに成功するまで
12.9 新しいブロックの検証
12.10 ブロックチェーンの組み立てと選択
12.11 マイニングとハッシュ競争
12.11.1 追加ナンス
12.11.2 マイニングプール
12.12 ハッシュレート攻撃
12.13 コンセンサスルールの変更
12.13.1 ハードフォーク
12.13.2 ソフトフォーク
12.13.3 合意に基づくソフトウェア開発
13章 ビットコインのセキュリティ
13.1 セキュリティの原則
13.1.1 セキュアなビットコインシステムの開発の難しさ
13.1.2 信頼の基点
13.2 ユーザーセキュリティのベストプラクティス
13.2.1 ビットコインの物理的な保管
13.2.2 ハードウェア署名デバイス
13.2.3 オーナー自身のアクセスの確保
13.2.4 リスク分散
13.2.5 マルチシグと企業ガバナンス
13.2.6 万一の場合のアクセスの確保
14章 セカンドレイヤーアプリケーション
14.1 構成要素(プリミティブ)
14.2 ビットコインのプリミティブを使って作られたアプリケーション
14.3 カラードコイン
14.3.1 シングルユースシール
14.3.2 P2C(Pay to Contract)
14.3.3 クライアントサイド検証(Client-Side Validation)
14.3.4 RGB
14.3.5 タップルートアセット
14.4 ペイメントチャネルとステートチャネル
14.4.1 ステートチャネルの基本概念と用語
14.4.2 単純なペイメントチャネルの例
14.4.3 チャネルをトラストレスに
14.4.4 非対称で失効可能なコミットメントトランザクション
14.4.5 HTLC(Hash Time Lock Contract)
14.5 ルーティング対応のペイメントチャネル(ライトニングネットワーク)
14.5.1 基本的なライトニングネットワークの例
14.5.2 ライトニングネットワークのトランスポートと経路検索
14.5.3 ライトニングネットワークを使うメリット
付録A サトシ・ナカモト著:ビットコイン論文
ビットコイン:ピアツーピア電子通貨システム
序論
トランザクション
タイムスタンプサーバー
proof-of-work(作業の証明)
ネットワーク
インセンティブ
ディスクスペースの節約
支払いの簡易検証
価値の結合と分割
プライバシー
数学的分析
結論
参考文献
ライセンス
付録B ビットコイン論文の修正まとめ
要旨
トランザクション
proof-of-work(作業の証明)
ディスクスペースの節約
支払いの簡易検証
プライバシー
数学的分析
付録C ビットコイン改善提案(BIP)
監訳者あとがき
索引