
2024年8月6日、サイバーセキュリティ研究者Forensicxsが「Bitcoin Core v0.1: コードウォークスルー」を公開した。同記事は、サトシ・ナカモトが2009年1月8日にリリースした最初のビットコインのソースコードを、全体にわたって分析したものである。
範囲: Forensicxsは、Bitcoin v0.1のコードベースを31,794行(31ファイル)と数えて分析している。C++ で記述され、MIT X11ライセンスの下でリリースされている。
なお、このサイトにあるソースコードの分析では、手元にある元のソースでv0.1のC++のファイルとヘッダーの行数を数え、約19,901行としている。同じ分析は、行数がv0.3.19までに31,909行に増えたとしている。したがって31,794行はForensicxsの記事での数え方によるもので、このサイトで基準にしている値ではない(どのファイルを数えるか、空行・コメント・wxWidgetsのヘッダーを含めるかで値がずれる)。
主な発見
-
コードの内訳: wxWidgetsによるGUIの実装が約18,000行で、単独の部品としては最も大きい。残りの約13,000行は、ブロックチェーンの操作、データベース管理、ネットワーク、スクリプトである。
-
全体の構成: 分析は、コード全体を次のように分けている。それぞれの部分について、その設計がどうしてそうなったかを扱うこのサイトの記事がある:
- 暗号学: Base58アドレスエンコーディング、楕円曲線鍵管理(secp256k1)、SHAハッシュ。詳細は暗号学設計の記事
- ブロックチェーン: トランザクションの検証、ブロックの処理、難易度の調整(2,016ブロックごと)は、合意の仕組みの設計の記事を参照。最初の報酬50 BTCが210,000ブロックごとに半分になるマイニングの仕組みは、通貨の設計の記事を参照
- ネットワーキング: P2P通信、IRCベースのノード発見、メッセージ処理。詳細はP2Pネットワーク設計の記事
- ウォレット: トランザクション管理、コイン選択、残高計算。詳細はウォレット設計の記事
- スクリプトシステム: トランザクションの条件をプログラムで書くためのオペコードを持つ、Forthをもとにしたスタック言語。詳細はトランザクション設計の記事
-
v0.1にハードコードされた技術パラメーター: マイニングの報酬(コインベース)が使えるようになるまで100ブロック、1回の難易度調整は25%〜400%の範囲に制限、目標のブロック間隔10分。
31,794行という数は、ジョシュア・デイヴィスがThe New Yorkerの2011年10月の記事で、2009年1月にサトシが作ったビットコインについて書いた「3万1000行のコード」とも一致する。同じ記事はダン・カミンスキーによるビットコインのコード分析を取り上げている。カミンスキーは、悪用できる欠陥を見つけられなかった。














