
本ページの位置付け
本ページは設計文書シリーズのL2 #9「アーキテクチャー進化(サトシ時代vs v27+)」である。3つの横断的深掘りの最初。各L1ページが1つのサブシステムを末尾に簡潔な「二時代比較」節を添えて端から端まで検証するのに対して、本ページはそれらの比較を8つのドメインすべてにわたって並置し、単一のドメインページでは提供できない分割アーキテクチャー図を追加する。
範囲。すべての比較は2つの固定参照点を使用する: サトシのv0.1リリース(2009年1月8日)と現行のBitcoin Core v27以降基準。中間バージョンは構造的変更を導入した場合にのみ言及する。
本ページは社会的・経済的層での設計のずれは扱わない。それらは設計意図と現実の分析で分析される。以下の各節には分割図(左がv0.1、右がv27以降)と比較表があり、L1の番号付けに対応する。
1. システム全体のアーキテクチャー
v0.1とv27以降の間で最も目に見える変化はアーキテクチャーの分解である。サトシはウォレット、マイナー、GUI、検証エンジン、ネットワーク層を1つのプロセスに融合した単一バイナリーをリリースした。その足元を支えていたのはBerkeley DBの索引とフラットブロックファイルである。現行のBitcoin Coreはこれらの関心事を異なるモジュール、プロセス、ストレージバックエンドに分離している。
| 側面 | v0.1(2009年1月) | v27以降基準 |
|---|---|---|
| バイナリー | 単一実行ファイル: ウォレット + マイナー + GUI + ノード | bitcoind(ノード)、bitcoin-wallet(ウォレット)、bitcoin-qt(GUI)— 別々のバイナリー |
| プロセスモデル | 1プロセス、1アドレス空間 | 論理的に分離; マルチプロセスは実験的で既定ではない |
| データベース | Berkeley DBが索引とウォレットを管理; ブロックデータはフラットファイル | LevelDB(UTXOセット、ブロックインデックス)+ フラットファイル(ブロック)+ SQLite(ウォレット) |
| マイニング | 内部CPUマイナー、同一プロセス | getblocktemplate(BIP 22/23)経由の外部化; エコシステムではStratum v2 |
| インターフェース | リリース時はなし; JSON-RPCはv0.2.6(2010年2月)で追加 | JSON-RPC(完全な読み書き)、REST(読み取り専用)、ZMQ(プッシュ通知) |
| 暗号ライブラリー | OpenSSL(ECDSA/secp256k1); Crypto++(SHA-256) | libsecp256k1(ECDSA/シュノア署名)、ハードウェアアクセラレーション付き内部SHA-256 |
2. ネットワーク層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| ピア発見 | IRCチャネル + addr | DNSシード + addrv2 + peers.datキャッシュ | BIP 155(addrv2、v0.21) |
| アドレス種別 | IPv4のみ | IPv4、IPv6、Tor v3、I2P、CJDNS | BIP 155 |
| アウトバウンドピア | 入方向も含めた接続が15本になるまで、出方向の接続を開く。出方向8本の固定は2010年8月から | 8フルリレー + 2ブロックリレー専用 + フィーラー + アンカー | v19以降(ブロックリレー専用) |
| ブロック中継 | ブロック全体を、大きさにかかわらず各ピアに送信 | コンパクトブロック: ヘッダー + 短縮ID(約20 kB) | BIP 152(v0.13) |
| トランスポート | 平文TCP | 日和見暗号化トランスポート(ChaCha20-Poly1305) | BIP 324(v26、v27でデフォルト) |
| 初期同期 | 逐次: ブロックを1つずつ | ヘッダー優先: 並列ブロックダウンロード | v0.10 |
| エクリプス攻撃耐性 | 最小限 | アウトバウンドローテーション、多様な追い出し、アンカーピア、ブロックリレー専用ピア | v19以降 |
詳細はL1 #1「P2Pネットワーク設計」 を参照。
3. トランザクション層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| 形式 | レガシー: バージョン + 入力 + 出力 + ロックタイム | SegWit: + マーカー/フラグ + Witness | BIP 141(2017) |
| トランザクションID | 完全なシリアライズ済みトランザクションのSHA-256d | txidはWitnessを除外; wtxidは含む | BIP 141 |
| 展性 | あり — 第三者がscriptSigを変更可能 | 修正済み — Witnessがtxidから除外 | BIP 141 |
| スクリプト種別 | P2PK、P2PKH | P2PKH、P2SH、P2WPKH、P2WSH、P2TR | BIP 16、141、341 |
| 署名方式 | ECDSA(OpenSSL経由) | ECDSA + シュノア署名(libsecp256k1経由) | BIP 340(2021) |
| オペコード | 完全セット(後に無効化されたものを含む) | 縮小セット; Tapscriptでは無効化されたオペコードがOP_SUCCESSxになる | BIP 342 |
| タイムロック | 絶対ロックタイムのみ | 絶対 + 相対(BIP 68)+ スクリプトレベル(OP_CLTV、OP_CSV) | BIP 65、68、112、113 |
| 手数料置換 | nSequenceによる置き換え(手数料の仕組みではない)、2010年8月に無効化; 以降は先着順 | 完全RBFがデフォルト | BIP 125(v0.12任意選択; v24オプション追加; v28デフォルト) |
| コイン選択 | ちょうどの額、なければ無作為の部分和1,000回か目標額を上回る最小の硬貨(ナップサックの祖先) | BnB + ナップサック + 単一ランダム抽選 + CoinGrinder; 無駄指標 | BnBはv0.17、単一ランダム抽選と無駄指標はv23、CoinGrinderはv27 |
詳細はL1 #2「トランザクション設計」 を参照。
4. ブロックとチェーン層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| ヘッダー形式 | 80バイト、バージョン1 | 80バイト、同一構造; BIP 9シグナリングビット | BIP 9 |
| ブロックバージョン | 常に1 | バージョンビット(0x20000000ベース + シグナルビット) | BIP 9(2016) |
| マークルツリー | 完全なシリアライズ済みトランザクション上の単一ツリー | プライマリーツリー(ストリップ済みトランザクション)+ コインベース内のWitnessコミットメント | BIP 141 |
| サイズ制限 | v0.1では制限なし; 2010年に1 MB追加 | 4 MWUウェイト制限 | BIP 141(2017) |
| Witnessディスカウント | 存在しない | Witnessバイトは1/4ウェイト(1 WU対4 WU) | BIP 141 |
| コインベースデータ | 最大100バイトの任意データ | BIP 34: ブロック高の接頭辞が必須 | BIP 34(2013) |
| 署名操作制限 | v0.1では制限なし; 2010年に20,000追加 | ブロックあたり80,000(ウェイト調整済み); Tapscriptのカウント方法は異なる | BIP 141、342 |
詳細はL1 #3「ブロック・チェーン設計」 を参照。
5. コンセンサス層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| ハッシュ関数 | SHA-256d(二重SHA-256) | 同一 | — |
| チェーン選択 | 最長チェーン(ブロック高の比較、nBestHeight) | 最多ワークチェーン(nChainWork、v0.3.3以降) | — |
| 難易度調整 | 2,016ブロックごと; オフバイワンバグ | 同一アルゴリズム; バグは保存(修正 = ハードフォーク) | — |
| ソフトフォーク有効化 | 直接コード変更(フラグデイ) | BIP 9バージョンビット; TaprootはSpeedy Trial(BIP 9の変形) | BIP 9 |
| スクリプト検証 | scriptSig + scriptPubKeyの結合実行 | 分離評価; SegWit Witnessプログラム; Tapscript | BIP 141、342 |
| タイムスタンプルール | 直前11ブロックの中央値(median-time-past)より大きい(v0.1から存在) | 同一の受理ルール; BIP 113がMTPをロックタイム評価にも拡張 | BIP 113 |
| チェックポイント | v0.1にはなし; 2010年7月(v0.3.2)にハードコードされたチェックポイントを追加 | assumevalidがチェックポイント機能の大部分を置換 | v0.14以降 |
詳細はL1 #4「コンセンサス設計」 を参照。
6. 貨幣・インセンティブ層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| 総供給量上限 | 20,999,999.9769 BTC | 同一 — コンセンサスで凍結された定数 | — |
| 新規発行分の計算 | nSubsidy >>= (nHeight / 210000) | 同一の演算; シフト64以上のゼロガード | — |
| 手数料の挙動 | 大半のトランザクションは無料; コイン年齢による優先度 | 手数料率オークション(sat/vB); コイン年齢優先度は廃止 | — |
| CPFP | 未実装 | 祖先認識メモリープール; パッケージ評価 | v0.13以降 |
| ブロックテンプレート | 内部マイナー; 素朴な順序 | getblocktemplate(BIP 22/23); 手数料率順ソート | BIP 22、23 |
| Witnessディスカウント | 存在しない | Witnessバイトは1/4ウェイト | BIP 141 |
詳細はL1 #5「貨幣設計」 を参照。
7. 暗号層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| 暗号ライブラリー | OpenSSL | libsecp256k1(定時間演算) | v0.10(2015年、署名); v0.12(2016年、検証) |
| 署名方式 | ECDSAのみ | ECDSA(レガシー/SegWit v0)+ シュノア署名(Taproot) | BIP 340(2021) |
| 鍵形式 | 非圧縮公開鍵(65バイト) | 圧縮(33バイト); x-only(32バイト、Taproot) | BIP 340 |
| 署名展性 | あり — s値を変更可能 | Low-Sルール(BIP 146)でECDSAを制限; シュノア署名は展性なし | BIP 146 |
| ナンス生成 | OpenSSL擬似乱数生成器 | RFC 6979決定性(ECDSA); BIP 340合成(シュノア署名) | RFC 6979 |
| ハッシュ関数 | SHA-256d、RIPEMD-160はOpenSSL経由; 採掘SHA-256は同梱Crypto++ | 同一アルゴリズム; ハードウェアアクセラレーション付き内部実装(SHA-NI、ARMv8-A) | — |
| 署名ハッシュアルゴリズム | レガシー署名ハッシュ(入力数に対して二次的) | BIP 143(SegWit v0、線形)+ BIP 341(Taproot、エポックタグ付き) | BIP 143、341 |
詳細はL1 #6「暗号設計」 を参照。
8. ストレージ層
| 機能 | v0.1 | v27以降基準 | 主要バージョン |
|---|---|---|---|
| 主要データベース | Berkeley DB(索引 + ウォレット) | LevelDB(UTXOセット + ブロックインデックス); フラットファイル(ブロック) | v0.8(2013) |
| UTXOストレージ | 使用済みフラグベクトル付きの完全なトランザクション | 未使用出力のみ; アウトポイント索引、コンパクトシリアライズ | v0.8 |
| コインキャッシュ | 分離キャッシュなし; BDBが読み書きを処理 | 専用メモリー上ライトバックキャッシュ(デフォルト450 MiB) | v0.15以降 |
| ブロック保存 | フラットファイル(blk*.dat)、約2 GBでローテーション | 順次フラットファイル(blk*.dat、各約128 MiB) | v0.8 |
| アンドゥデータ | 不要; 使用済みのトランザクションもBDBの索引に残り、再編成では使用済みの印を外すだけ | 専用rev*.datファイルで高速ロールバック | v0.8 |
| 剪定 | 不可 | 利用可能; 最低保持量550 MiB | v0.11(2015) |
| assumeUTXO | なし | スナップショットベースのブートストラップ、バックグラウンド検証付き | v26(loadtxoutset); v28(本番のスナップショット) |
| ディスクサイズ | 無視できる程度(チェーンが極めて小さかった) | アーカイブでブロックだけ約774 GB(2026年10月); 剪定で約10 GB | — |
詳細はL1 #7「ストレージ設計」 を参照。
9. ウォレットとインターフェース層
| 機能 | v0.1 | v27以降基準 | 主要なBIP / バージョン |
|---|---|---|---|
| アーキテクチャー | 単一バイナリーに組み込み | 論理的に分離; マルチプロセスは実験的で既定ではない | v27以降 |
| 鍵生成 | 独立したランダム鍵; 100鍵の予備はv0.3.14(2010年10月)から | 記述子ウォレット: マスターシードからの決定性導出 | BIP 380以降(v23でデフォルト) |
| 鍵ストレージ | Berkeley DB(wallet.dat) | SQLite(新形式のwallet.dat) | v26(新規ウォレットでBDB非推奨) |
| バックアップモデル | 新しい鍵の生成後に毎回ファイルをエクスポート | 記述子バックアップがすべての導出鍵をカバー(生のBIP 32シード、BIP 39ではない) | BIP 32 + 記述子 |
| 署名 | 内部、同一プロセス | 内部、PSBT(BIP 174/370)、またはハードウェアウォレット(HWI経由) | BIP 174(2018) |
| マルチデバイス署名 | サポートなし | PSBTワークフロー: 作成 → 更新 → 署名 → 結合 → 完成 | BIP 174、370 |
| 手数料引き上げ | 不可 | 手数料置換(bumpfee)、CPFP | BIP 125 |
| インターフェース | リリース時はなし; JSON-RPCはv0.2.6(2010年2月)で追加 | JSON-RPC(完全)、REST(読み取り専用)、ZMQ(プッシュ通知) | — |
| プロセスモデル | モノリシック(ウォレット + ノード + マイナー + GUI) | モジュラー: bitcoind、bitcoin-wallet、bitcoin-qt | v27以降 |
詳細はL1 #8「ウォレット設計」 を参照。
10. 構造的移行タイムライン
11. 変わったものと変わらなかったもの
17年にわたる開発が実装を一変させたが、コンセンサスの核心はサトシがリリースした当時のまま正確に残っている。
v0.1以来不変のもの:
- SHA-256dプルーフオブワーク
- 2,016ブロック難易度調整(オリジナルのオフバイワンバグを含む)
- UTXOモデル
- 2,100万枚の供給上限
- 210,000ブロック半減期
- コインベース成熟期間(100ブロック)
- secp256k1曲線
- 10分のターゲットブロック間隔
- 許可不要の参加
v0.1以来変革されたもの:
- ストレージエンジン(BDB索引 + フラットブロックファイル → LevelDB索引 + フラットファイル + SQLiteウォレット)
- 暗号ライブラリー(OpenSSL → libsecp256k1)
- 署名方式(ECDSAのみ → ECDSA + シュノア署名)
- ブロック容量(制限なし → 1 MB → 4 MWU)
- トランザクション形式(レガシー → SegWit)
- スクリプトシステム(全オペコード + 結合実行 → 縮小セット + 分離評価 + Tapscript)
- 鍵管理(独立したランダム鍵 → HD導出 + 記述子)
- ピアトランスポート(平文 → 暗号化)
- ピア発見(IRC → DNSシード + addrv2)
- マイニングインターフェース(内部CPU → getblocktemplate経由の外部化)
- 初期同期(逐次 → ヘッダー優先 + assumeUTXO)
- 手数料市場(無料 → RBF/CPFP付き手数料率オークション)
- プロセスアーキテクチャー(モノリシック → モジュラー)
- ソフトフォーク有効化(フラグデイ → BIP 9バージョンビット)
- チェーン選択ルール(ブロック高のみの比較、nBestHeight → 最多ワークチェーン、nChainWork)
このうちHD鍵導出、SegWit、ECDSAからシュノア署名への移行、そしてlibsecp256k1自体の4項目は、一人の人物にたどり着く。ピーター・ウィーユはBIP 32、BIP 141、BIP 340/341を単独または共同で執筆し、2013年にlibsecp256k1を立ち上げた。
12. 本ページの範囲
本ページはすべてのドメインにわたって2つの参照点を比較するが、ドメインページの代替にはならない。各サブシステムの完全な解説は、上記各節の末尾にリンクしたL1ページを参照。
範囲外:
- 社会的・経済的なずれ(マイニングの集中化、カストディー、ガバナンス、スケーリング。設計意図と現実の分析を参照)
- セキュリティーモデル(脅威分析、51% 攻撃の経済学。L2 #11「セキュリティーモデル」を参照)
- エコシステム(Lightning、サイドチェーン、Ordinals。L2 #10「エコシステム設計」を参照)
- サトシのコーディングスタイル(サトシのコード分析とWindows開発環境エントリーを参照)
Windowsの開発環境の分析は、同じずれをツールチェーンから読んでいる。































