Hard Fork は、古いノードとの後方互換性を保たずにブロックや取引の有効性ルールを変えることです。新しい非互換のチェーンを追うには、ノードが新ルールを採用する必要があります。変更の発表や採掘能力の増大だけで、それを強制することはできません。
アンナとパヴェルは、それぞれ Full Node を運用しています。Bitcoin のルールを独立して確認するコンピューターです。アンナは大きなブロックを許す新ソフトウェアを入れ、パヴェルは従来の上限を残します。新しい条件を満たす一方、古い上限を超えるブロックが届くと、アンナは受け入れ、パヴェルは拒否します。接続の故障ではありません。共通の履歴に何を含めてよいかについて、プログラムの判断が異なるのです。 これが Hard Fork の実際の意味です。「アップグレード」と呼んでも、パヴェルのコンピューターは自分のルールを無視しません。それぞれの分岐で誰かがブロックを作り、人々が利用すれば、両方が続く可能性があります。参加者が一つのルールに移れば、二つの稼働ネットワークが残るとは限りません。 [1]
古いノードは、非互換のブロックと、その上に積み重ねられた分岐を拒否します。ただし、永久に止まるわけではありません。マイナーが旧ルールに沿って別の分岐を伸ばせば、そのブロックを受け入れ続けられます。そのような続きがなければ、自分が有効と判断した最後のブロックにとどまります。決め手は賛同者の人数ではなく、ソフトウェアのルールです。非互換の分岐を追うには、運用者が意識してルールを変える必要があります。 [1]
Bitcoin Cash は 2017 年 8 月 1 日、ブロック高 478559 で Bitcoin から分岐しました。当時の Bitcoin ノードが受け入れる上限より大きなブロックを許すルールを採用し、独自のチェーンを続けました。Bitcoin ノードは BCH のルールでしか有効にならないブロックを拒否し、BCH ノードは自分たちのルールに沿った履歴を追いました。これは同じネットワーク内で Bitcoin を置き換える更新ではなく、独立したネットワークを作った Hard Fork の例です。 [3] [4]
ウォレットで受け取ってまだ使っていない金額を考えてください。Bitcoin では、この未使用の出力を UTXO として記録します。共通の過去を持つ分岐はその記録を引き継ぎ、その後は別々に管理します。必要な鍵を自分で管理し、両ネットワークがその出力を認め続けるなら、通常は両方で対応するコインを使えます。ただし価値が倍になるわけではありません。それぞれに需要のある別の資産です。取引所に預けた資金では、もう一方のコインを受け取れるかは取引所の付与方針にも左右されます。 [4] [6]
両方の分岐にコインがあっても、片方だけで支払いたいことがあります。保護がなければ、誰かが署名済み取引をコピーしてもう一方にも送信し、そちらでも有効になる可能性があります。これが replay リスクです。対象ネットワークの保護とウォレットの対応を確認してください。例えば、署名に含めるデータを定める sighash のルールを変えることで、取引を特定のチェーンに結び付けられます。アドレスの見た目が違えば区別しやすくなりますが、それだけでは暗号学的なリプレイ保護にはなりません。 [3]
有効化とは、新ルールを適用し始めると定められた時点です。ブロック高はチェーン上の位置を表します。所定の日付、ブロック高、マイナーのシグナルは、更新を受け入れた参加者の足並みをそろえる助けになります。しかし、更新を受け入れていないノードのソフトウェアは変えられません。両方のルールを使う経済的に重要な参加者が残れば、両チェーンが続く可能性があります。そのため、Hard Fork への移行計画では、ネットワークが分かれるリスクも考える必要があります。 [1]
ここでのガバナンスは、参加者が変更をどう決めるかということです。ティッカーは BTC や BCH のような資産の取引記号です。開発者はコードを公開し、マイナーは採掘能力の投入先を変え、企業は取引記号と入金方針を選び、利用者はソフトウェアを選べます。しかし、そうした選択だけで、他のノードがブロックを検証するルールは変わりません。十分な数の独立した参加者が両方のルールを維持し、価値を認めれば、分岐は続く可能性があります。ただし、互換性のない変更が必ず二つの長期稼働ネットワークを作るわけではありません。一方の分岐を「更新」と呼ぶことは社会的な呼び方であり、ブロックを検証するルールではありません。 [1]
新しい通貨を作るつもりがなくても、ネットワークが分かれることはあります。2013 年 3 月には、取引の入力数が異例に多いブロックを、一部の古いノードが処理できなくなりました。データベースのロック数の上限に達したためです。ロックは、同時に動く処理が同じデータを書き換えないようにする仕組みです。新しいバージョン 0.8 は別のデータベースを使っており、このブロックを受け入れました。マイニングプールの BTC Guild と Slush はバージョン 0.7 に戻し、古いノードも受け入れる分岐で採掘を続けました。その分岐の累積作業量が上回ると、新しいノードもそちらに切り替わりました。これは意図せず生じたソフトウェアの不一致を解消した出来事であり、Bitcoin Cash のように独立したネットワークを長期に維持する取り組みとは異なります。 [2]
Soft Fork は、従来のルールを厳しくする変更です。新しい制約を満たすブロックは、古いルールも満たします。そのため、古いノードは追加の制約を自分では確認しなくても、そのブロックを受け入れられます。Hard Fork にはこの互換性がありません。新しいソフトウェアが受け入れるブロックでも、古いルールには違反する場合があります。それを受け入れるには、古いノードの運用者がソフトウェアのルールを変える必要があります。ただし、Soft Fork でも分裂しない保証はありません。マイナーが追加の制約に違反するブロックを作れば、新旧のノードで判断が分かれることがあります。 [1]
旧ルールで受け入れる全ブロックを V(old)、新ルールで受け入れる全ブロックを V(new) とします。新ソフトウェアが V(old) の外にあるブロックを一つでも受け入れるなら、その変更は Hard Fork です。つまり V(new) は V(old) の部分集合ではありません。有効な範囲が広がる場合も多いですが、判断の基準は互換性です。新しいノードが受け入れるブロックを古いノードが拒否する可能性があるなら、古いノードはルールを変えずに新チェーンを追い続けることはできません。 [1]
Chainwork は、分岐全体のブロックを採掘することで示された累積作業量です。一方、Hashrate は採掘計算の速度を表します。ノードが累積作業量の最も大きい分岐を選ぶのは、自分のルールに従うチェーンの中からです。ルールに違反するブロックは、作業量が増えても受け入れられません。したがって、冒頭のパヴェルは、大多数のマイナーがその先で採掘しているという理由だけで、大きすぎるブロックを受け入れることはありません。Proof of Work は有効な分岐の間で選択を決められますが、ノードの運用者に代わってルールを選ぶことはできません。 [1]
まずネットワーク、対応ウォレット、リプレイ保護を確認します。見慣れたコイン名や似たアドレスだけでは不十分です。分岐したコインの受け取りを約束する未知のサービスに、ウォレットの復元用の単語である Seed Phrase を入力してはいけません。自分のノードなら、ソフトウェアの版、接続先ノード、最後に受け入れたブロック、分岐点のブロックの指紋も確認できます。この指紋がハッシュです。ネットワークの資料と照合してください。Web のエクスプローラーは、自分で行うルールの検証の代わりにはなりません。 [5] [6]
理解を深めるには、この項目とあわせて次もお読みください Soft Fork, コンセンサスルール, Full Node, Reorg, ブロックサイズ戦争, UTXO. 次の項目からも参照されています Soft Fork, BIP (Bitcoin Improvement Proposal), Reorg, ブロックサイズ戦争.