ビットコインの技術的な話題を追っていると、これはハードフォークが必要、これはソフトフォークになる、などとよく聞きます。

多くの場合、この発言は「ハードフォークはソフトフォークより困難である」というニュアンスを含んでいますが、果たして本当にそうなのでしょうか。

今日のコラムでは用語の整理をします。ちなみに、どういうトランザクションやブロックが正常かなどについて全てのノードが同意するコンセンサスルール(以下、「ルール」)に変更がなければソフトフォークもハードフォークも必要ありません。自由参加のソフトウェアアップデートで対応できます。

わかりやすいので2つの違いだけ出オチしておきます。
新ルールが旧来のルールを踏襲していればソフトフォーク、旧来のルールを新ルールで破ることができればハードフォーク。

用語の整理

ビットコインのリファレンス実装であるBitcoin Coreはバージョン間の互換性を重視して設計されています。現在はバージョン0.19が最新ですが、それより前のバージョンでも基本的には動作します。実際にバージョン0.11のノードもいくつか稼働しています。(※0.15、0.16などバグが発見されて使わないほうがよいものもあります)

ソフトフォーク・ハードフォークという用語は、このバージョン間の互換性が双方のバージョンからどう見えるかを表しています。例を使って見ていきましょう。

※※豆知識※※
ソフトウェアの変更がブロックに関するものなら意見が割れる条件でマイニングされたブロックを筆頭にチェーンの分岐が起こりますが、変更がトランザクションに関するものなら先にネットワークが分裂します。

なぜなら、ルールが厳しい方のノードは不正なトランザクションを送ってきたピアと接続を切るようになっているからです。したがって、古いノードと新しいノードのそれぞれを別々のネットワークに分ける力が働きます。その上で、やはりチェーンの分岐が起こります。

ハードフォーク:
旧バージョンのルールが撤廃・緩和されると、ハードフォークが発生します。例えば、ビットコインキャッシュはビットコインのソフトにあるブロックサイズの「上限を大きくする」という緩和を行いました。すると、

従来より大きなブロックを採掘→BTC側は拒否、BCH側はOK
従来どおりの大きさのブロックを採掘→双方OK

新バージョンのマイナーは一番長いチェーンを、旧バージョンのマイナーは分岐前のルールに基づいた一番長いチェーンを作成していくことになります。新ルールによるビッグブロックが含まれたチェーンが旧来のノードからは認められないというハードフォークです。

また別の例として、例えばトランザクションの形式の制限を大幅に緩和するとします。すると、旧バージョンのノードは新種のトランザクションを不正と見なし、配信したノードをbanします。

新ルールと旧ルールのノードがそれぞれのネットワークに分裂し、その中でそれぞれのチェーンを掘り進めながら存続することになります。分裂や分岐により様々な影響が発生するため、(分裂が目的でない場合)短時間のうちにユーザーに能動的にソフトをアップデートしてもらう必要があるので、ハードフォークは一般的に難しいといわれます。

また、市場がハードフォークによる将来の不確実性を好ましくないものと考えていることも、BCH誕生やSegwit2xの価格への影響が物語っています。(ハードフォーク前に下げて、ハードフォークが過ぎたら安堵で上がる)

ソフトフォーク:
旧バージョンのルールが厳格化されたとき、ソフトフォークが発生します。例えば、ブロックサイズの上限がなかった頃、1MBのブロックサイズ上限が導入されたときには、

1MBより大きなブロックを採掘→(旧)はOK、(新)は拒否
1MB以下のブロックを採掘→双方OK

新バージョンでは元々あるルールが厳格化されただけなので、旧バージョンはどちらの条件も認めています。例えば今日、ビットコインがブロックウェイト上限を4MBから2MBに縮小するとなればソフトフォークで行うことができます。ソフトフォークの特徴は、旧来のノードを動かしている一般ユーザーにはアップデートする圧力がそれほど強くかからないという点です(送られてくるトランザクションも、生まれるブロックも旧来のルールも満たしている)。

しかしながら、マイナーなどは旧ルールのまま採掘してもより厳格な新ルールのノードにブロックを受け取り拒否されると経済的損失に繋がりうるので、新ルールを採用するノードが多いほど移行圧力がかかります。

Segwit導入の際はマイナーが抵抗したため、UASF(ユーザー・アクティベート・ソフトフォーク)という運動が起こり、その圧力の結果もあってSegwitがスムーズに導入されたという経緯があります。マイナー以外の一般のフルノードもネットワークに発言権を持つという一つの事例です。

注意点として、ソフトフォークでもしばらくの間はチェーンの分岐が発生する可能性があります。新ルールを採用したノードは旧ルールでのみ有効なブロックやトランザクションを不正とみなすので、単純な2分岐ではなく何度も分岐するような複雑な状況に陥る可能性もあります。

そのようなトランザクションが一般的な用途では考えられない場合でも、特別に作られてネットワークに対する攻撃に使われることがあります。

内容も大事

確かに周囲への影響を含めるとハードフォークを迅速に成功させることが難しいことは明らかですが、それでも一概にハードフォークがソフトフォークより困難であるとは限らないかもしれません。

なぜならば、結局はどちらも提案が受け入れられる必要があるからです。ビットコインの場合、導入以前にソフトフォークもハードフォークもかなり長い期間をかけて慎重に議論されます。

例えば、今まで使うことのできたトランザクションの種類を受け付けなくするソフトフォークを考えてみましょう。署名済みのトランザクションを保管していて、いつか使いたい、というようなケースでは使えなくなっては困ります。他にも、5年以上動かしていないコインは全く動かせなくなる、というような提案はどうでしょうか。ユーザーから抵抗に遭うはずです。

(なお、ソフトフォークに関して、これらの制限をマイナーが何らかの理由で自主的にかけることは当然可能です。現行のルール違反ではないので。)

一方、ハードフォークでも、ネットワークの命運がかかっていることが明らかな場合はすんなり提案が受け入れられるかもしれません。例えばハードフォークが必要な難易度調整アルゴリズムの変更も、もし導入しなければネットワークが全く使い物にならないという状況なら迅速に導入されるかもしれません。

ソフトフォークも困難になっていく?

利用者への影響を最小限に留めるために多くのユーザー、事業者がほぼ同時にソフトウェアを更新する必要があるハードフォークはすでにかなり困難と考えられています。

個人的には、ネットワークの規模が大きくなるにつれUASFのようにユーザーが団結して導入することも難しくなると思いますし、マイナーにもリスク回避のため現状維持のインセンティブがあるのでマイナーが何らかのソフトフォークに乗り気になることも少ないでしょう。

何より、利用上の影響が出る可能性が忌避されそうです。ただでさえ変更が加えにくいビットコインですが、普及していくにつれ、更に固定されていくのではないでしょうか。

まとめ

・ブロックチェーン分岐のこともフォークというが、ハードフォーク・ソフトフォークの文脈ではソフトウェアの互換性の話
新ルールが旧来のルールを踏襲していればソフトフォーク、そうでなければハードフォーク
・ソフトフォークだからといって内容次第で実現可能性は低くなりうる
・ネットワークが大きくなるにつれどちらも困難になっていくのではないか