ビットコインのアーキテクチャー進化 — サトシ時代 v0.1 と現行 v27 以降基準の比較

本ページの位置付け

本ページは設計文書シリーズL2 #9 — アーキテクチャー進化(サトシ時代 vs v27+) である。3 つの横断的深掘りの最初。各 L1 ページが 1 つのサブシステムを末尾に簡潔な「二時代比較」節を添えて端から端まで検証するのに対して、本ページはそれらの比較を 8 つのドメインすべてにわたって並置し、単一のドメインページでは提供できない分割アーキテクチャー図を追加する。

範囲。 すべての比較は 2 つの固定参照点を使用する: サトシの v0.1 リリース(2009 年 1 月 3 日)と現行の Bitcoin Core v27 以降基準。中間バージョンは構造的変更を導入した場合にのみ言及する。本ページは社会的・経済的層での設計のずれは扱わない — それらは設計意図と現実の分析で分析される。以下の各節には分割図(左が v0.1、右が v27 以降)と比較表があり、L1 の番号付けに対応する。

1. システム全体のアーキテクチャー

v0.1 と v27 以降の間で最も目に見える変化はアーキテクチャーの分解である。サトシはウォレット、マイナー、GUI、検証エンジン、ネットワーク層を単一データベースに支えられた 1 つのプロセスに融合した単一バイナリーを出荷した。現行の Bitcoin Core はこれらの関心事を異なるモジュール、プロセス、ストレージバックエンドに分離している。

v27 以降 — モジュール構成

IPC

bitcoind

(ノード)

P2P ネットワーク層

検証エンジン

メモリープール

ストレージ層

LevelDB

(UTXO セット + ブロックインデックス)

フラットファイル

(blk*.dat / rev*.dat)

bitcoin-wallet

(論理的に分離;

マルチプロセスは実験的)

SQLite

(記述子ウォレット)

bitcoin-qt

(任意の GUI)

外部マイナー

(getblocktemplate /

Stratum v2 経由)

v0.1 — モノリシック (2009 年 1 月)

単一バイナリ

(bitcoin.exe)

内蔵 GUI

(wxWidgets)

内蔵 CPU マイナー

検証 + 中継

ウォレット(ランダム鍵)

Berkeley DB

(全状態を 1 つの DB に)

側面v0.1(2009 年 1 月)v27 以降基準
バイナリー単一実行ファイル: ウォレット + マイナー + GUI + ノードbitcoind(ノード)、bitcoin-wallet(ウォレット)、bitcoin-qt(GUI)— 別々のバイナリー
プロセスモデル1 プロセス、1 アドレス空間論理的に分離; マルチプロセスは実験的で既定ではない(IPC は Cap’n Proto 経由)
データベースBerkeley DB ですべての永続状態を管理LevelDBUTXO セット、ブロックインデックス)+ フラットファイル(ブロック)+ SQLite(ウォレット)
マイニング内部 CPU マイナー、同一プロセスgetblocktemplate(BIP 22/23)経由の外部化; エコシステムでは Stratum v2
インターフェースリリース時はなし; 直後に基本的な JSON-RPC を追加JSON-RPC(完全な読み書き)、REST(読み取り専用)、ZMQ(プッシュ通知)
暗号ライブラリーOpenSSL(ECDSA/secp256k1); Crypto++(SHA-256libsecp256k1(ECDSA/シュノア署名)、ハードウェアアクセラレーション付き内部 SHA-256

2. ネットワーク層

v27 以降 — ネットワーク

DNS シードブートストラップ

addr / addrv2

(IPv4, IPv6, Tor,

I2P, CJDNS)

コンパクトブロック中継

(BIP 152、約 20 kB)

暗号化トランスポート

(BIP 324, ChaCha20)

全中継 8 +

ブロック中継専用 2 +

フィーラー + アンカー

v0.1 — ネットワーク

IRC ブートストラップ

(lfnet.org の #bitcoin)

addr メッセージ

(IPv4 のみ)

完全ブロック中継

(ピアあたり約 1 MB)

平文 TCP

出方向ピア 8

機能v0.1v27 以降基準主要な BIP / バージョン
ピア発見IRC チャネル + addrDNS シード + addrv2 + peers.dat キャッシュBIP 155(addrv2、v22)
アドレス種別IPv4 のみIPv4、IPv6、Tor v3、I2P、CJDNSBIP 155
アウトバウンドピア8 フルリレー8 フルリレー + 2 ブロックリレー専用 + フィーラー + アンカーv19 以降(ブロックリレー専用)
ブロック中継全ブロックを各ピアに送信(約 1–2 MB)コンパクトブロック: ヘッダー + 短縮 ID(約 20 kB)BIP 152(v0.13)
トランスポート平文 TCP日和見暗号化トランスポート(ChaCha20-Poly1305)BIP 324(v26、v27 でデフォルト)
初期同期逐次: ブロックを 1 つずつヘッダー優先: 並列ブロックダウンロードv0.10
日食攻撃耐性最小限アウトバウンドローテーション、多様な追い出し、アンカーピア、ブロックリレー専用ピアv19 以降

詳細: L1 #1 — P2P ネットワーク設計

3. トランザクション層

v27 以降 — トランザクション

SegWit 形式

(+ marker/flag +

witness フィールド)

ECDSA + Schnorr

(libsecp256k1)

P2PKH, P2SH, P2WPKH,

P2WSH, P2TR

署名は witness 内

(Schnorr: 64 バイト固定)

非展性 txid

(witness を除外)

v0.1 — トランザクション

レガシー形式

(バージョン + 入力 +

出力 + ロックタイム)

ECDSA のみ

(OpenSSL)

P2PK、P2PKH

署名は

scriptSig 内

(70–72 バイト DER)

展性のある txid

機能v0.1v27 以降基準主要な BIP / バージョン
形式レガシー: バージョン + 入力 + 出力 + ロックタイムSegWit: + マーカー/フラグ + WitnessBIP 141(2017)
トランザクション ID完全なシリアライズ済みトランザクションの SHA-256dtxid は Witness を除外; wtxid は含むBIP 141
展性あり — 第三者が scriptSig を変更可能修正済み — Witness が txid から除外BIP 141
スクリプト種別P2PK、P2PKHP2PKH、P2SH、P2WPKH、P2WSH、P2TRBIP 16、141、341
署名方式ECDSA(OpenSSL 経由)ECDSA + シュノア署名(libsecp256k1 経由)BIP 340(2021)
オペコード完全セット(後に無効化されたものを含む)縮小セット; Tapscript が選択されたオペコードを再有効化BIP 342
タイムロック絶対ロックタイムのみ絶対 + 相対(BIP 68)+ スクリプトレベル(OP_CLTVOP_CSVBIP 65、68、112、113
手数料置換未実装; 先着順完全 RBF がデフォルトBIP 125(v0.12 任意選択; v24 オプション追加; v28 デフォルト)
コイン選択単純な最大額優先BnB + ナップサック + 単一ランダム抽選; 無駄指標v27 以降

詳細: L1 #2 — トランザクション設計

4. ブロックとチェーン層

v27 以降 — ブロック構造

80 バイトヘッダー

(BIP 9 versionbits)

主マークルツリー +

witness コミットメント

(コインベース OP_RETURN 内)

4 MWU ウェイト上限

(実測約 1.5〜2 MB)

80,000 sigops/ブロック

(ウェイト調整)

v0.1 — ブロック構造

80 バイトヘッダー

(バージョン 1)

単一マークルツリー

(完全直列化 tx)

明示的サイズ上限なし

(2010 年半ばに 1 MB 追加)

20,000 sigops/ブロック

機能v0.1v27 以降基準主要な BIP / バージョン
ヘッダー形式80 バイト、バージョン 180 バイト、同一構造; 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)
署名操作制限ブロックあたり 20,000ブロックあたり 80,000(ウェイト調整済み); Tapscript のカウント方法は異なるBIP 141、342

詳細: L1 #3 — ブロック・チェーン設計

5. コンセンサス層

v27 以降 — コンセンサス

SHA-256d プルーフオブワーク

(変更なし)

同一アルゴリズム

(off-by-one は合意規則

として保持)

最多ワークチェーン

(強化された nChainWork)

BIP 9 versionbits /

BIP 8 Speedy Trial

assumevalid

(信頼ハッシュ以下では

スクリプト検証を

スキップ)

v0.1 — コンセンサス

SHA-256d プルーフオブワーク

難易度調整

(2,016 ブロックごと、

off-by-one バグ)

最多ワークチェーン

(nChainWork)

フラグデー有効化

(コード直接変更)

ハードコード済み

チェックポイント(DoS 対策)

機能v0.1v27 以降基準主要な BIP / バージョン
ハッシュ関数SHA-256d(二重 SHA-256)同一
チェーン選択最多ワークチェーンnChainWork同一ルール; 永続的追跡が堅牢化
難易度調整2,016 ブロックごと; オフバイワンバグ同一アルゴリズム; バグは保存(修正 = ハードフォーク
ソフトフォーク有効化直接コード変更(フラグデイ)BIP 9 バージョンビット / BIP 8 高速試行BIP 9、BIP 8
スクリプト検証scriptSig + scriptPubKey の結合実行分離評価; SegWit Witness プログラム; TapscriptBIP 141、342
タイムスタンプルール前ブロックのタイムスタンプより大きい中央値タイムパスト (MTP): 直前 11 ブロックの中央値より大きいBIP 113
チェックポイントハードコードされたブロックハッシュassumevalid がチェックポイント機能の大部分を置換v0.14 以降

詳細: L1 #4 — コンセンサス設計

6. 貨幣・インセンティブ層

v27 以降 — 貨幣

3.125 BTC 新規発行分

(期 4、2024 年半減後)

手数料率オークション

(sat/vB)

外部マイナー

(getblocktemplate / Stratum v2)

手数料率で並べた

テンプレート

(SegWit ウェイト計算付き)

v0.1 — 貨幣

50 BTC 新規発行分

(期 0)

大半の

トランザクションが無料

(コイン年齢

による優先度)

内部 CPU マイナー

単純な

ブロックテンプレート

機能v0.1v27 以降基準主要な 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. 暗号層

v27 以降 — 暗号

libsecp256k1

(定時間、監査済み)

ECDSA + Schnorr

圧縮鍵

(33 バイト);

x-only (32 バイト、Taproot)

DER (ECDSA) +

固定 64 バイト (Schnorr)

RFC 6979 決定性

(ECDSA); BIP 340 合成

(Schnorr)

Base58Check + Bech32

(bc1q...) + Bech32m

(bc1p...)

HD 導出

(BIP 32/44/84/86);

記述子ウォレット

v0.1 — 暗号

OpenSSL

(全操作)

ECDSA のみ

非圧縮公開鍵

(65 バイト)

DER エンコード

(可変、70〜72 バイト)

OpenSSL PRNG による

ナンス生成

Base58Check

(P2PKH: 1...)

ランダム鍵プール

(非決定性)

機能v0.1v27 以降基準主要な BIP / バージョン
暗号ライブラリーOpenSSLlibsecp256k1(定時間演算、公式レビュー済み)v0.10(2015)
署名方式ECDSA のみECDSA(レガシー/SegWit v0)+ シュノア署名(TaprootBIP 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-256、SHA-256d、RIPEMD-160(OpenSSL 経由)同一アルゴリズム; ハードウェアアクセラレーション付き内部実装(SHA-NI、ARMv8-A)
署名ハッシュアルゴリズムレガシー署名ハッシュ(入力数に対して二次的)BIP 143(SegWit v0、線形)+ BIP 341(Taproot、エポックタグ付き)BIP 143、341

詳細: L1 #6 — 暗号設計

8. ストレージ層

v27 以降 — ストレージ

LevelDB(UTXO セット +

ブロックインデックス)+ フラットファイル

(ブロック + undo データ)

未使用出力のみ

(outpoint インデックス)

専用 undo ファイル

(rev*.dat、

高速ロールバック用)

剪定(最小 550 MiB)+

assumeUTXO ブートストラップ

v0.1 — ストレージ

Berkeley DB

(全状態を 1 つの DB に)

完全トランザクションを

保存

(使用済み + 未使用)

undo データなし

(再編成 = フォーク点から

再検証)

剪定なし

(全件保存)

機能v0.1v27 以降基準主要バージョン
主要データベースBerkeley DB(すべての状態)LevelDB(UTXO セット + ブロックインデックス); フラットファイル(ブロック)v0.8(2013)
UTXO ストレージ使用済みフラグベクトル付きの完全なトランザクション未使用出力のみ; アウトポイント索引、コンパクトシリアライズv0.8
コインキャッシュ分離キャッシュなし; BDB が読み書きを処理専用メモリー上ライトバックキャッシュ(デフォルト 450 MiB)v0.15 以降
ブロック保存単一 BDB データベース順次フラットファイル(blk*.dat、各約 128 MiB)v0.8
アンドゥデータ保存なし; 再編成 = フォークポイントからの再検証専用 rev*.dat ファイルで高速ロールバックv0.8
剪定不可利用可能; 最低保持量 550 MiBv0.11(2015)
assumeUTXOなしスナップショットベースのブートストラップ、バックグラウンド検証付きv27 以降
ディスクサイズ無視できる程度(チェーンが極めて小さかった)アーカイブで約 650 GB 以上; 剪定で約 10 GB; コイン DB で約 7 GB

詳細: L1 #7 — ストレージ設計

9. ウォレットとインターフェース層

v27 以降 — ウォレット

論理的に分離

(マルチプロセスは

実験的)

記述子ウォレット

(決定論的導出)

SQLite

(wallet.dat、

新形式)

一度のシードバックアップ

(全導出鍵をカバー)

手数料推定 +

RBF + PSBT ワークフロー

v0.1 — ウォレット

ノードバイナリ内に埋込み

(インターフェース

境界なし)

ランダム鍵プール

(独立 100 鍵)

Berkeley DB

(wallet.dat)

バックアップ = ファイルエクスポート

(バックアップ後の新鍵は

復元不可)

手数料推定なし

(トランザクション無料)

機能v0.1v27 以降基準主要な BIP / バージョン
アーキテクチャー単一バイナリーに組み込み論理的に分離; マルチプロセスは実験的で既定ではないv27 以降
鍵生成ランダム鍵プール(100 個の独立した鍵)記述子ウォレット: マスターシードからの決定性導出BIP 380 以降(v23 でデフォルト)
鍵ストレージBerkeley DB(wallet.datSQLite(新形式の wallet.datv26(新規ウォレットで BDB 非推奨)
バックアップモデル新しい鍵の生成後に毎回ファイルをエクスポート記述子バックアップがすべての導出鍵をカバー(生の BIP 32 シード、BIP 39 ではない)BIP 32 + 記述子
署名内部、同一プロセス内部、PSBT(BIP 174/370)、またはハードウェアウォレット(HWI 経由)BIP 174(2018)
マルチデバイス署名サポートなしPSBT ワークフロー: 作成 → 更新 → 署名 → 結合 → 完成BIP 174、370
手数料引き上げ不可手数料置換(bumpfee)、CPFPBIP 125
インターフェースリリース時はなし; 直後に基本的な JSON-RPC を追加JSON-RPC(完全)、REST(読み取り専用)、ZMQ(プッシュ通知)
プロセスモデルモノリシック(ウォレット + ノード + マイナー + GUI)モジュラー: bitcoindbitcoin-walletbitcoin-qtv27 以降

詳細: L1 #8 — ウォレット設計

10. 構造的移行タイムライン

2009–2010v0.1 (2009 年 1 月)モノリシックバイナリ、BDB、IRC、CPUマイナー、OpenSSL1 MB 上限 (2010 年 9月)ブロックサイズ上限、オペコード無効化2012–2013v0.8 (2013 年 3 月)BDB → LevelDB、フラットブロックファイル、 undoデータ2015–2017v0.10 (2015)ヘッダー先行同期、libsecp256k1SegWit — BIP 141(2017 年 8 月)Witness フィールド、4MWU、非展性 txid2018–2021BIP 174 (2018)PSBT ワークフローTaproot — BIP 341(2021 年 11 月)Schnorr、tapscript、鍵/スクリプトパス2023–2025v26 (2023)BIP 324暗号化トランスポート、BDB 非推奨v27 基準 (2024)assumeUTXOスナップショット同期v28 (2024)完全 RBF が既定アーキテクチャー上のマイルストーン: v0.1 → v27 以降

11. 変わったものと変わらなかったもの

15 年にわたる開発が実装を一変させたが、コンセンサスの核心は正確にサトシが出荷したまま残っている。

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/8)

12. 本ページの範囲

本ページはすべてのドメインにわたって 2 つの参照点を比較するが、ドメインページの代替にはならない。各サブシステムの完全な解説は、上記各節の末尾にリンクした L1 ページを参照。

範囲外: