2017.11.24 (Fri) news

中止されたSegwit2Xハードフォークにバグが発見される

Written by 真田雅幸

Segwit2Xハードフォークは、ビットコインの494784個目のブロックがマイニングされる11月16日頃に起きる予定だったが、その約一週間前に突如としてキャンセルされていた。今回のハードフォークは、ビットコインのブロックサイズを1MBから2MBへと引き上げることを目的とされていた。

ビットコインのブロックサイズを引き上げることで、マイナーはより多くの取引を一つのブロックに取り込む事ができるようになり、取引の承認待ち時間が短縮され、取引手数料が減少することが予想されていた。しかし、Segwit2Xハードフォークは、ハードフォークを提案した側の主要なメンバー達の手によって幕が降ろされた。

一方、計画の中止が発表された後もハードフォークを試みるユーザーが一部存在していた。この一部のユーザーは、今回のハードフォークのソフトウェア「btc1/Segwit2x」を使用し、新たなブロックチェーンへの同期を進めていた。ソフトウェアはジェフ・ガージック氏を中心に開発された。

ユーザーは、ソフトウェアがハードフォーク目前のブロックでストップしていることを発見する。ハードフォークが予定されていた49474目のブロックの2つ前のブロック、49472個目のブロックでソフトウェアは突如として止まってしまった。

今回のハードフォークでは、2MB以上の基礎ブロック(ブロックサイズからWitnessデータを引く)は拒否されるコードが含まれていた。通常のビットコインのコードは1MB以上の基礎ブロックが拒否される仕様になっている。

バグが発生した原因は、ブロックサイズを引き上げるブロックターゲット(今回は49474個目のブロック)を決定するパラメターの演算間違いにより、予定より1ブロック早くブロックサイズを2MBに引き上げてしまっていたことによるものだった。さらに、ハードフォークをするチェーンは、オリジナルチェーン(1MB)とハードフォークをしたチェーン(2MB)を見分けるために、1MB以上のブロックを受け付けるようになっていた。つまり、btc1/Segwit2Xは、29473個目のブロックで1MB以上2MB以下のブロックを待っていたため、49472個目のブロックで止まってしまった。

マイナーは、ハードフォークが494784個目のブロックで起きると信じていたため、49473個目のブロックでは、1MB以上のブロックをマイニングしていなかったようだ。そのため、49473個目のブロックがマイニングされることはなかった。(すでにこのバグは修正済みだ)

今回のようなバグが発生したことは、開発チームが閉鎖的な環境でソフトウェアを開発していたことが原因の一つのようだ。GitHubには、コードのバグを指摘する投稿がいくつかあったが、開発チームはこれを無視して、十分なテストを行わなかったとみられる。

仮にハードフォークが予定通り行われていた場合、マイナーは異変に気付き、49473個目のブロックサイズを引き上げ、新たなブロックをマイニングしていただろう。しかし、取引所側の視点に立ってみると状況はもっと悲惨であった可能性がある。ハードフォークをする予定のブロックがズレていたことにより、ユーザーに付与する新たな分岐コインの数量などにもズレが生じていたことが考えられるからだ。その場合、訴訟などの問題が起きていてもおかしくなかった。

ハードフォークをする場合のコードの変更は、オープンな環境で開発が進められ、多くのテストやリュビューを重ねることが大前提であるべきことが、今回改めて示されたのではないだろうか。さらに、ハードフォークは、ユーザーや取引所、ウォレットを提供する企業などのビットコインのエコシステム内の様々な場所に悪影響を及ぼすリスクがある。


Medium


無料メールマガジン

BTCNの最新ニュースを毎日お昼ごろお届けします!


まだデータがありません。