最近フォークが流行っています。暗号通貨界でフォークといえば「分岐(厳密には分裂という言葉の方が正しい)」を意味します。ビットコインがソフトフォークでSegWitをアクティベートさせたと思いきや、ビットコインキャッシュがハードフォークを行いBCHが誕生し、今月はビットコインゴールドのハードフォークが控えています。また、現段階で起こるかは分かりませんが11月にはSegWit+2MBブロックを実現させるためのSegWit2Xのハードフォークが予定されています。
フォークが起こるのはビットコインだけではなく、あらゆるコインがフォークを行っています。Ethereumも今月バージョンアップデートのためにハードフォークを行いました。コードネームMetropolisの前半部分であるByzantiumです(Ethereumはいちいち名前がカッコイイですね)。
様々な形のフォーク
一言でフォークといってもビットコインキャッシュのハードフォークとEthereumのハードフォークは質が異なります。またSegWitのソフトフォークとSegWit2Xのハードフォークも異なります。個々のフォークの詳細についてはこの記事では述べませんが、様々なフォークがあるということです。
この記事ではソフトフォークとハードフォークの違いを簡単に說明したいと思います。
特にビットコインの文脈においては何となく「ハードフォークよりソフトフォークの方が好ましい」、だから「ハードフォークは危険である」というようなイメージを持っている方も多いかもしれません。ハードフォークにはネットワーク分裂の可能性があるという意味で、ハードフォークを警戒するのは間違っていないのですが、ソフトフォークはソフトだから柔らかいけど、ハードフォークはハードだから硬い、だからハードフォークはヤバイというわけではありません。
また「仕様の変更が及ぶ範囲が広い」とか「ラディカルな設計変更がある」のような主観的な基準でハードフォークかソフトフォークかが決まるわけでもありません。
しりとりで学ぶソフトフォーク/ハードフォーク
通常のしりとりに以下のルールを加えた生き物しりとりを考えます。このルールがブロックチェーンにおけるプロトコル(=ルール)に相当します。
ルール①
しりとりに使える単語は動物を表す単語のみ
しりとりの参加者がルールを守っているかどうか確認するため審査員を3人用意します。この審査員がトランザクションの検証を行うノードに相当します。
ルール①に従ったしりとりの流れ
ゴリラ→ラッコ→コブラ→ラクダ→ダイオウイカ→・・・
(※イカは動物に含まれます)
審査員①、審査員②、審査員③「問題なし」
ルールを厳格にする
ここでルールをルール②に変更します。
ルール②
しりとりに使えるのは哺乳類を表す単語のみ
※このルールはダイオウイカ以降に有効
ルール②はルール①をより厳格にしたものであることに注意して下さい。ルール②を守っていれば、ルール①は必ず守ることになります。これがソフトフォークです。
ルール②に従ったしりとりの流れ
ゴリラ→ラッコ→コブララクダ→ダイオウイカ→カモシカ→カバ→・・・
ここで審査員による判定があるのですが、審査員③がルール②を無視してルール①のまま審査を続けたとしましょう。つまり審査員③はルール①「しりとりに使える単語は動物を表す単語のみ」のみで判定を行うことになります。しかしカモシカもカバも動物なので、、、
審査員①、審査員②、審査員③「問題なし」
こうなります。
重ねて説明しますが、ルール②はルール①をより厳しくしたルールです。ルール②を守っていれば必然的にルール①を守ることになります。ルールのアップデートを行った審査員①と審査員②が「問題なし」と判定したケースにおいて、審査員③が「問題あり」という決断を下す可能性がないということが重要です。
これがソフトフォークです。
ルールを緩和する
では、もしルール①をルール②に変更する代わりに、ルール①を緩和して、
ルール③
しりとりに使える単語は生物を表す単語のみ
※このルールはダイオウイカ以降に有効
というように変更したとしましょう。
ルール②への変更と違って、ルール③を守っていても、ルール①を守ることにはならないことに注意して下さい。ルール③は生物であればなんでも良いので、植物でも菌類でもOKです。ルールの緩和、これがハードフォークです。
ルール③に従ったしりとりの流れ
ゴリラ→ラッコ→コブララクダ→ダイオウイカ→カキ→キュウリ
ルール①が緩和されて生物であれば動物でなくても良くなったので、カキとキュウリが登場しています。ここで審査員③がルール③への更新を忘れ、ルール①に基いて審査を行ったとしましょう。
審査員①、審査員②「問題なし」
審査員①と審査員②はルール③(しりとりに使える単語は生物を表す単語のみ)に基いて判定を行うので、カキもキュウリも問題ありません。しかし、
審査員③「失格」
となります。審査員③はルール①に基いて判定を行うので、未だ「しりとりに使えるのは動物を表す単語のみ」です。カキとキュウリは動物ではないのでルールを守っていません。審査員間で判定が分かれてしまいました。これがネットワーク分裂です。
ルール③への移行後、ルールのアップデートを行った審査員①と審査員②が「問題なし」と判定したケースにおいても、審査員③が「問題あり」と判断を下す可能性があるということが重大です。しりとりの場合、上記の例のように、新ルールに移行しない審査員がいた場合、新ルールでは問題ないが旧ルールでは失格となるような単語が登場した時点で、審査が割れてしまいます。
このようにネットワークの分裂が起こってしまう可能性があるため、ハードフォークは警戒されるのです。ハードフォークに対してソフトフォークはルールの厳格化によって行われるので、ルールの厳格化を行わなかった審査員のみから失格の判定を行われることはありません。
フォークが持つ意味合いは中立
このようにハードフォークにはリスクがあるのですが、全てのハードフォークが危険かというと決してそんなことはなく、コンセンサスの取れたハードフォークは比較的円滑に行われます。このあたりはEthereumがディフィカルティボム(Ethereumネットワークの採掘難易度を急上昇させる処置)を設定するなどして、旧ルールに拘泥するインセンティブをなくし、より安全にハードフォークを行うように工夫しています(ディフィカルティボムがあれば、ネットワークの分裂が置きないかというとそうでもないのですが、各ノードの確固たる意志を持たない偶発的な分裂を防ぐことができます)。

The DAO事件の救済措置としてのハードフォークは満場一致のコンセンサスが得られなかったためEthereumとEthereum Classicにネットワークが分裂してしまいました。
今後も次々とフォークが発生し、取引所やウォレット開発者を困らせ続けると思いますが、その際にこの記事の説明が少しでも役に立てば嬉しい限りです。