ブロックチェーン
ハードフォークとソフトフォークの違いとチェーンの分裂が発生する条件を考察する
概要
- フォークが起きるのは?
- ハードフォークとソフトフォークの違い
- フォークにおける各シナリオと結果
- フォークの事例
- チェーンのスプリットのデメリット
- まとめ
2019年の1月16日にイーサリアムのコンスタンティノープルというバージョンへのアップデートのハードフォークが予定されています。そこで今回はハードフォークが行われる前に、ハードフォークとソフトフォークの違いやそれぞれに起因するブロックチェーンの分裂、そのメリットやデメリットを実例とともに探っていきます。
注意:本記事でのフォークという言葉はブロックが同時に生成され、一時的に複数のチェーンに分岐してしまう現象のことは含まず、ハードフォークとソフトフォークを総称したものです。この現象に関しての詳細はこちらから。
フォークが起きるのは?
ブロックチェーンでフォークが起きる場合は大きく分けて以下の二つの状況です。
- コンセンサスの相違
- プロトコルのルール変更
ブロックチェーンのフォークとは、本質的に、合意に基づいたソフトウェアアップデートです。ブロックチェーンの運営は、基本的に、フルノードと呼ばれる個々のコンピューターに依存し、フルノードが多ければ多いほどネットワークはセキュアになります。
そして、ブロックチェーンという共有台帳にアクセスするには基本的に同じルールに則ったソフトウェアを利用する必要があります。例えば、ビットコインのソフトウェアはイーサリアムのソフトウェアと異なるため、ビットコインのソフトウェアではイーサリアムのブロックの検証・承認はできません。
また、ソフトウェアのバージョンに関しても基本的に同一のバージョンを利用する必要があります。
例えば、ビットコインの開発者がフルノードの合意を十分に得た上でソフトウェアに新たな特徴を追加したり変更を加えたりするとします。そしてアップデートされたソフトウェアと古いバージョンのソフトウェアとの間に互換性がない場合があります。
このような場合にブロックチェーンでフォークが起こり、チェーンが分裂する可能性もあります。
ハードフォークとソフトフォークの違い
ハードフォーク:旧バージョンのソフトウェアでは新バージョンのトランザクション・ブロックを扱うことができないが、新バージョンのソフトウェアでは旧バージョンのトランザクション・ブロックを扱うことができる。
ソフトフォーク:旧バージョンのソフトウェアでも新バージョンのトランザクション・ブロックを扱うことができるが、新バージョンのソフトウェアは旧バージョンのトランザクション・ブロックを扱うことはできない。
ハードフォークは検証規則を緩和すること、ソフトフォークは検証規則を強化することというイメージが適切です。
旧バージョンと互換性のないアップデートというのは例えばブロックサイズの変更などです。これまでブロックの最大サイズが1MBだったものが8MBに変更されたとします。この場合8MBのブロックはアップデート以前のソフトウェアでは承認することはできません。
また、来たるEthereumのコンセンサスアルゴリズムのPoWからPoSへのアップデートもハードフォークです。まだ実装には至っていませんが、将来的にこれが適応されればイーサリアムはハードフォークし、アップデートをしなかったノードはアップデートしたノードと互換性がなくなります。
こういったアップデートが起きると、ハードフォークが起こります。
これに対して、ソフトフォークは旧バージョンと互換性のあるアップデートであり、ビットコインのSegWit実装がその一例です。SegWitがアクティベートされた際、新しいバージョンのアドレスが作られました。しかし、古いバージョンのアドレスを使用しているノードに影響は特にありませんでした。旧P2SHアドレスを使っているノードはSegWitでないトランザクションを送信することができ、そのトランザクションは認証を通過します。
フォークにおける各シナリオと結果
オフチェーンガバナンスにおいてソフトフォークとハードフォークが発生した時に起こりうる各シナリオとその結果であるチェーンのスプリット(分裂)の有無を説明していきます。
ソフトフォークの場合
ここで注意すべきことは、旧バージョンのソフトウェアでも新しいバージョンのトランザクション・ブロックを扱うことができるということです。
1. 全てのフルノードがアップデート

全てのノードが新しいルールを受け入れ、新しいルールに基づいてブロックを生成するようになります。そのためソフトフォークによって発生した新たなチェーンのみが存続し、チェーンのスプリットはありません。
2. 51%以上のハッシュパワーを持つ数のフルノードがアップデート

このシナリオでは49%以下のハッシュパワーを持つ数のフルノードがアップデートに応じないことになります。しかし、新たなルール下で生成されたブロックは旧ルールと互換性があるため、フルノードがアップデートしなくても新ルールに基づいたトランザクション・ブロックの承認をすることができます。基本的に新チェーンのみが存続し、スプリットはありません。
3. 49%以下のハッシュパワーを持つ数のフルノードがアップデート

このシナリオでは、51%以上のハッシュパワーを持つ数のフルノードがアップデートに応じないことになります。旧バージョンのソフトウェアで新バージョンのトランザクション・ブロックを承認できるため、チェーンは一旦スプリットします。しかし、旧チェーンに多くのハッシュパワーが残り、新チェーンのノードのハッシュパワーが少ないため新チェーンの進行は遅くなります。
最終的には以下の3つ状態のいずれかに収束します。
- 新チェーンがセキュリティのために十分なハッシュパワーを獲得し完全にスプリットし、両チェーンが存続する状態
- 旧チェーンのノードがアップデートし、新チェーンのみが存続する状態
- 新チェーンのノードがダウングレードし、旧チェーンのみが存続する状態
ソフトフォークでは基本的にこのような結果になることはありませんが、理論上発生しうると言えます。
4. 全てのフルノードがアップデートしない

このシナリオでは、なんの変化も発生せず、全てのノードがそれまで通り旧ルールに則ってトランザクション・ブロックの承認を行います。当然チェーンのスプリットも発生しません。
ハードフォークの場合
旧バージョンのソフトウェアでは新しいバージョンのトランザクション・ブロックを扱うことができません。そのため、ハードフォークのアップデートが受け入れられると、それまでの旧ルールでは無効だったトランザクション・ブロックも有効だと判断され承認されますが、新ルールでのみ有効なトランザクション・ブロックは旧ルールでは無効だと判断されます。
1. 全てのフルノードがアップデート

このシナリオの場合、全てのフルノードが新しいルールに従ってブロックを生成・承認するのでハードフォークによって誕生した新たなチェーンのみが存続し、スプリットはありません。
2. 51%以上のハッシュパワーを持つ数のフルノードがアップデート

このシナリオでは、49%以下のハッシュパワーを持つ数のフルノードがアップデートに応じないことになります。旧バージョンのソフトウェアでは新しいバージョンのトランザクション・ブロックを扱うことができないため、チェーンは一旦スプリットします。しかし、新チェーンに多くのハッシュパワーが移り、旧チェーンのノードのハッシュパワーが少ないため旧チェーンの進行は遅くなります。
最終的には以下の状態のいずれかに収束します。
- 旧チェーンがセキュリティのために十分なハッシュパワーを獲得し完全にスプリットし、両チェーンが存続する状態
- 旧チェーンのノードがアップデートし、新チェーンのみが存続する状態
3. 49%以下のハッシュパワーを持つフルノードがアップデート

このシナリオでは51%以上のハッシュパワーを持つ数のフルノードがアップデートに応じないことになります。しかし、旧ルール下で生成されたブロックは新ルールと互換性があるため、アップデートを行ったフルノードも旧ルールに基づいたトランザクション・ブロックの承認をすることができます。したがって、基本的に旧チェーンのみが存続し、スプリットはありません。
4. 全てのフルノードがアップデートしない

このシナリオでは、ソフトフォーク時と同様なんの変化も発生せず、全てのノードがそれまで通り旧ルールに則ってトランザクション・ブロックの承認を行います。当然チェーンのスプリットも発生しません。
フォークの事例
ソフトフォークの事例
ソフトウェアをアップデートしていない参加者もトランザクションの検証と承認に参加でき、大部分の参加者がアップデートしていればネットワークは続行します。ただしアップデートしてない人の機能には影響が出ます。
例えばブロックサイズが1MBから800KBに変更された場合アップデートしていないマイナーは、トランザクションを見ることは可能ですが、新しいブロックを生成しようとする際に不適切と見なされてしまう可能性があるといった様にです。
実際の大規模はソフトフォークの例は、以下のものがあります。
- BIP 66:ビットコインの署名検証の厳格化。
- P2SH:ビットコインネットワークで複数署名が可能にし、セキュリティを高めるためのソフトフォーク
以前はフラグデイ方式といって予告された日にソフトフォークをアクティベートをする手法が取られていましたが、これではアップデートを忘れたマイナーや告知が行き届かなかったマイナーによってチェーンが分裂し、旧バージョンのマイナーによって承認されたトランザクションが新チェーンで承認されておらずユーザーが財産を失うトラブルがありました。現在は徐々に新ルールに移行するような手法が用いられており、この問題は解決されています。
ハードフォークの事例
ソフトフォークと違ってソフトウェアをアップデートしていない参加者は参加できないため、今後一つのチェーンに収束することはありません。また、ハッシュパワーの少ないチェーンにも参加者がいる限り二つのチェーンが存在し続けます。
ハードフォークにはコンセンサスの取れた計画的なハードフォークとコンセンサスの取れていない意図しないハードフォークがあります。
計画的ハードフォークはEthereum Byzantiumなどが例となります。一方コンセンサスの取れていない意図しないハードフォークにはBitcoin CashやTheDao事件に伴ったEthereum Classicという例があります。ちなみにEthereum Classicのハードフォークなどは上記のハードフォークの2の例です。
チェーンのスプリットのデメリット
TheDAO事件の際にハードフォークした結果Ethereum Classicが生まれた件では、ハードフォークにネガティブなイメージを植え付けられましたが、一方で、BTCからBCHが生まれたことには、お金を自由にすることであると好意的な声も多くあります。
チェーンスプリットのデメリットには以下のようなものがあります。
・チェーンのブランド価値が下がる
多くのスプリットを繰り返すと、どのチェーンが”本物”であるか混乱を生み、チェーンの社会的な価値が下がることがあります。
・意見が画一的になる
スプリットが起きるたびにコミュニティ内で多数派でない意見をもつメンバーが新しいコミュニティに引き抜かれていけば、コミュニティ内に多様性がなくなり、意見が画一化されていき、各チェーンが中央集権的になっていってしまいます。
・セキュリティが下がる
スプリットによってハッシュパワーも分裂します。ハッシュパワーの減少は51%攻撃を容易にし、セキュリティを下げます。
・開発キャパシティが減る
あらゆるプロジェクトにはコア開発者が必要です。ブロックチェーン界隈では開発者がそもそも足りておらず貴重な存在です。そのため、開発キャパシティが別ブロジェクトに分裂することはプロジェクトの発展を阻害します。
まとめ
このように、チェーンの分裂は危険性を孕むものではありますが、技術のアップデートはブロックチェーンの進化のために避けては通れません。チェーンの分裂をなるべく避けられるようなコミュニティでの意思決定の手段として、オフチェーンガバナンスが注目されています。オフチェーンガバナンスについてはまた別の機会に解説します。
参考