Bitcoinブロックチェーンが巻き戻った日
Re: overflow incident May 04, 2021, 03:50:27 PM
投稿者:DannyHamilton
この問題が、最初に発見された際の議論を含むオリジナルのスレッドはこちら:
Bitcoin Discussionサブフォーラム
https://bitcointalk.org/index.php?topic=822.0
開発者&テクニカルディスカッションサブフォーラム
https://bitcointalk.org/index.php?topic=823.0
何者かがコードのバグに気づき、そのバグを利用して意図的に「オーバーフロー」トランザクションを作成したようだ。(誰かが「偶然」そのようなトランザクションを作成することはほぼ不可能だし、誰かが「ハッキング」したわけでもない。)
その後、8:08:49 UTCまでにユーザーがこのトランザクションに気づき始め、Bitcoin Discussionのサブフォーラムでそれについてコメントした。
約1時間後の9:04:11 UTCに開発者がDeveloper & Technical Discussionサブフォーラムでこのトランザクションを可能にしたバグを報告した。
すべてのマイナーはフォーラムの投稿や電子メールリストを通じて、コードの修正が可能になるまでマイニングを停止するようすぐに要請された。多くのマイナーは、事件後、修正前に得たマイニング報酬は、修正版が利用可能になった時点で消滅し、役に立たなくなることに気づいたため、これに従った。このため、この問題のあるチェーンを拡張する新しいブロックの生成時間がスローダウンした。
10:39:42UTC、Developer & Technical Discussionサブフォーラムでの報告から約1時間半後、Gavin Andresen氏がディスカッションスレッドに一時的なコード修正パッチを投稿。誰でも自分のコードのコピーに適用し、マイニングおよびブロック検証に使用するための修正版Bitcoin Coreをコンパイルすることが可能になった。
その20分後(10:59:099 UTC)、Satoshiがディスカッションスレッドに、ソースコードのmasterブランチにマージする予定の修正パッチを投稿。
それから40分後の11:40:19 UTCにSatoshiはバグフィックスのソースコードをmasterブランチにマージし、誰でもダウンロードして実行できるようにした。 誰もがこの新しいコードを使用し、ブロックチェーン全体を最初から同期し直すか、安全にそれを行う技術的な専門知識があれば、ブロックチェーンをオーバーフローより前のブロックに巻き戻し、そこから同期し直すことが推奨された。
約1時間後(12:58:08 UTC)、Satoshiは、公式ソースコードからノードを再構築する技術的知識がないユーザーのために、Windows用のコンパイル済みバイナリ(.exeファイル)をリリースした。
16:16:10UTC(プリコンパイル版バイナリのリリースから約3時間後)までに、Satoshiは、修正されたコードによって構築されたチェーンは、まだコードを更新できていないユーザーによって拡張されているチェーンよりもハッシュパワーが高いと確信。修正されたチェーンはより速く成長し、最終的に問題のあるチェーンを上回ることが明らかになった。
10時間後の翌朝2:59:38 UTCに、Satoshiは、オーバーフローがあったチェーンよりも、修正されたチェーンの方が長くなったと発表した。 この時点で、修正されたコードにアップグレードしていなかったノードでさえ、より長いチェーンを見てそちらに切り替え、問題のあるチェーンを放棄した。これで、この後のすべてのノードは、どうあれ新しいチェーンで実行されるようになる。 それはつまり、ブロックチェーンの再同期は、通常のプルーフ・オブ・ワークの再構成プロセスによって自動的に行われるため、もはや誰もブロックの再同期をマニュアルで行う必要がなくなった。オーバーフロー・トランザクションがあったブロックは高さ74638にあり、オーバーフロー・トランザクションが削除されたチェーンは高さ74689でそのチェーンを追い越した。
最初の通知から、より大きなプルーフ・オブ・ワークのチェーンで完全に修正されるまでの所要時間は、合計18時間51分であった。