ビットコイン v0.3.10 - オーバーフローバグの​緊急修正

連なるブロックの図の中で 1 つのブロックが赤く強調され警告の斜線が引かれており、その上にはオーバーフローする計算式が示されている。下段には消えていく分岐と、パッチによって太く伸びていく分岐が描かれ、脇に警告三角マークとチェック入りの盾のアイコンが添えられている。

2010年8月15日、ビットコインの重大な脆弱性が悪用された。ブロック 74638 において、184,467,440,737.09551616BTC(約 1,840 億ビットコイン)を無から生成するトランザクションが作成されたのである。このバグはトランザクション出力チェックコードの値オーバーフローであった。2 つの大きな出力の合計がオーバーフローして負の数になり、バリデーションチェックを通過してしまった。

サトシ・ナカモトは bitcoin-list メーリングリストに緊急アラートを発信した:

「*** 警告 *** 問題を調査中だ。問題が解決するまで、2010年8月15日17:05 UTC(ブロック 74638)以降に発生したトランザクションを信頼しないでほしい。」

数時間以内に、サトシはトランザクション出力値の適切なオーバーフローチェックを追加するパッチを含むビットコイン v0.3.10 をリリースした。修正はソフトフォークとしてデプロイされ、更新されたソフトウェアを実行するノードは無効なトランザクションとそれを含むチェーンを拒否した。大多数のマイナーが迅速にアップグレードしたため、正しいチェーン(オーバーフロートランザクションを含まない)が数時間以内に無効なチェーンを追い越し、1,840 億の不正なビットコインは存在しなくなった。

この事件は後に「値オーバーフロー事件」として知られるようになり、CVE-2010-5139 が割り当てられた。

同じ緊急事態を別の角度から扱う関連エントリーが二つある。 値オーバーフロー事件のエントリーはブロック 74638 とバグか悪用かという問いを記録した記述であり、 構造的パラドックスの分析はこの 5 時間のソフトフォーク救済を、ビットコインの分散型設計が緊急時に中央集権的な権限へ依存する最初の可視的な事例として読み解く。