用語集 / プロトコルとアップグレード
ユーザー主導型ソフトフォーク
別名はUASFです。
- ユーザー主導型ソフトフォークとは?
- ユーザー主導型ソフトフォークは、ノード運営者が選んだ期日に新しいルールを強制するため、それを無視するマイナーは、単に投票で負けるのではなく、生成したブロックが拒否されることになります。
BIP-148で規定されています。
この考え方は通常の処理の順序を逆転させます。ハッシュパワーが準備完了をシグナルするのを待つのではなく、支払いを受け取るノードが、それ以降はルールに適合しないブロックを拒否するという日付を告知します。BIP-148はその日付を2017年8月1日に設定し、その現実味のある脅威が、2016年11月から続いていたシグナリングの行き詰まりを終わらせたと広く評価されています。
仕組み
ルールが最終的に強制されるのはマイニングではなく検証であり、ユーザー主導型ソフトフォークはこの事実の上に成り立っています。
ノードは、どのブロックが有効かを自ら判断します。人々が実際に決済に用いる取引所、決済処理業者、カストディアンといった経済の十分な部分が、ルールに適合しないブロックを拒否するソフトウェアを稼働させれば、そうしたブロックを生成するマイナーは、誰も受け取らないコインで支払いを受けることになります。ブロック報酬は、それが乗っているチェーンが買い手の認識するチェーンである場合にのみ価値を持つため、いかなる投票も行われないまま、インセンティブはルールへの適合へと向かいます。
このメカニズムはしきい値ではなく日付です。BIP-148は、2017年8月1日以降、すべてのブロックがSegWitへの準備完了をシグナルすることを要求し、そうしないブロックをノードが孤立させるよう指示しました。これはルールの厳格化であるため、適合するチェーンは一度もアップグレードしなかったノードにとっても有効なままです。これが取り除かないのは分岐のリスクです。ハッシュパワーの大部分がルールに適合しないブロックをマイニングし続ければ、ルールを強制する側の累積作業量は少なくなり、どちらかの側が折れるまで2つのチェーンが併存します。
BIP-8は後にこの手法を汎用的なパラメーター一式に変えました。BIP-9と同じようにシグナルを数えますが、lockinontimeout(通常はLOTと略されます)を追加します。LOTをfalseに設定すると、マイナーがしきい値に達しなければデプロイメントは単に失効します。LOTをtrueに設定すると、タイムアウトのブロック高で無条件にロックインし、これが設定フラグとして表現されたユーザー主導型ソフトフォークになります。
実際の事例
2017年の一連の出来事はビットコインにおいて唯一完了した事例であり、順を追って知っておく価値があります。BIP-148は2017年3月にShaolin Fryという名前の開発者によって公開され、春の間にノード運営者に採用されていきました。8月の期限を前に、マイナーは7月にBIP-91を採用し、マイナー間でSegWitのシグナリングを義務化しました。その後SegWitは2017年8月8日のブロック479,808でロックインし、2017年8月24日のブロック481,824から強制可能になりました。期日は、それが要求した結果がすでに確保されていたため、長期的な分岐を起こさずに過ぎました。
この手法はTaprootの前に再び浮上しました。2020年後半から2021年前半にかけて、議論はもっぱらBIP-8のLOTをtrueにしてリリースするか、falseにしてリリースするかという点に集中し、LOTをtrueにした代替クライアントが公開され、妥協案はSpeedy Trialとなり、これは短期間のウィンドウを設定し、強制的なアクティベーションを行わないものでした。マイナーは2021年6月にしきい値に達したため、この問題は試されることはありませんでした。
ビットコインを保有している場合の要点は、自分のノードを運用することがこうした仕組みに重みを与えるという点です。ユーザー主導型ソフトフォークは検証するユーザーを数えるものであり、残高をすべて取引所に置いている人は、自分のソフトウェアではなく、その取引所のソフトウェアによって代表されます。
ユーザー主導型ソフトフォークvsハードフォーク
ユーザー主導型ソフトフォークはルールを厳格化し、ハードフォークはルールを緩和します。2017年の混乱は、どちらも分岐のリスクを伴っていたことに起因していました。BIP-148のもとでは、古いウォレットは引き続き機能し、結果として生じたチェーンはソフトウェアのあらゆる以前のバージョンにとって有効なままでした。これはまさにハードフォークが約束できないことです。分岐のリスクは一時的なものでマイナーの行動に依存していましたが、ハードフォークの分岐は最初の非互換ブロックから設計に組み込まれています。