用語集 / プロトコルとアップグレード
Speedy Trial
- Speedy Trialとは?
- Speedy TrialはTaprootで用いられた有効化の設定です。マイナーによる短いシグナリング期間を設け、しきい値を90%に引き下げ、施行を固定された後続のブロック高まで先送りします。
BIP-341で規定されています。
Speedy Trialは、BIP-9のバージョンビットによるデプロイを改変したもので、独自のBIPではなくBIP-341自体に書き込まれています。マイナーには2021年4月24日から8月11日までの109日間、2,016ブロック中1,815ブロックでビット2を立てる猶予が与えられ、施行はブロック709,632に固定されていました。この施行高はシグナリングが始まる前に確定していたため、保有者はルールが切り替わる正確なブロックを事前に知ることができました。
仕組み
Speedy TrialはBIP-9の計数方法をそのまま保ち、そのうち2つの数値を変更し、BIP-9にはなかったパラメーターを1つ追加しています。
BIP-9は、2,016ブロックごとの難易度調整期間においてシグナリングするブロックを数え、1つの期間に十分な数が含まれ次第、デプロイをSTARTEDからLOCKED_INへ移行します。そのしきい値は1,916ブロック、1期間の95%であり、期間の目安は1年、開始時刻から31,536,000秒後とされています。開始時刻とタイムアウトはいずれもmedian time past(あるブロックと直前10ブロックのタイムスタンプの中央値)から読み取られるため、時計は誰かの腕時計ではなくチェーンに属します。
Taprootのデプロイではしきい値が1,815ブロック、90%に引き下げられ、期間はエポックタイムスタンプ1619222400から1628640000までの9,417,600秒とされました。追加されたのはmin_activation_heightです。素のBIP-9では、ロックインしたデプロイは次の難易度調整の境界でACTIVEになるため、ロックインが施行高を固定するのはその直後の2,016ブロックに限られます。Speedy Trialでは、LOCKED_IN状態がチェーンが指定の高さに達するまで繰り返され、そこで初めてACTIVEに移行します。メインネットの高さは709,632で、これはちょうど352回の難易度調整期間、つまり期間の境界に当たります。デプロイは実際にそこで有効化されました。
この分離が構想のすべてです。シグナリングは1つの問いに素早く答え、その後に続く長い間隔は、議論に費やす時間ではなく、他の全員がアップグレードするための時間です。
どこで見られるか
Speedy Trialのパラメーターは、2021年のシグナリング期間中にマイニングされたすべてのブロックのバージョンフィールドで確認できます。
シグナリングするブロックは上位ビット001にデプロイ自身のビットを加えたものを載せるため、ビット2でのTaprootのシグナルはバージョン0x20000004として読み取られます。作業を要求するマイナーはgetblocktemplateを通じて同じデプロイに接します。このRPCの"rules"キーはすでに有効なソフトフォークを列挙し、"vbavailable"キーは保留中の各ソフトフォークをそのビットに対応付けます。BIP-341がこのデプロイに与える名前、したがってマイナーが読む文字列は、単に"taproot"です。
同じデプロイのtestnet3での実行は、この遅延が何のためだったのかを示しています。開始とタイムアウトのタイムスタンプは同一で、しきい値は1,512ブロック、75%、min_activation_heightは0であったため、BIP-9自身の1期間の間隔を超えて先送りされたものは何もなく、高さ2,011,968で有効化されました。メインネットには追加の待機があり、テストネットワークには守るべき経済がありませんでした。signetではルールが常に有効であったため、そこでは試験は行われていません。
Speedy Trial vs UASF
ユーザー活性化ソフトフォーク(UASF)はノード側から結果を強制するものであり、Speedy Trialはその力を意図的に拒否しました。
強制の仕組みはBIP-8にlockinontimeoutとして記述されています。これをtrueに設定すると、デプロイはタイムアウト前にMUST_SIGNAL期間を持ち、その期間に許容される非シグナリングブロックの枠を使い切るとシグナリングしないブロックが無効になるため、マイナーが協力するかどうかにかかわらずロックインが保証されます。BIP-8は、無視できない割合のマイナーからの政治的抵抗が予想されるあらゆるソフトフォークにこのフラグを推奨し、同じ文書の中で、これを有効にしたノードは長期にわたり累積作業量の少ないチェーンに従う可能性があり、互いに優先的に接続する必要が生じうると警告しています。
Speedy Trialにはそのようなフラグはありませんでした。タイムアウト前にしきい値を逃すと、デプロイはFAILEDになり、それ以外のことは何も起きませんでした。これがSpeedy Trialが選んだトレードオフです。有効化の保証はなく、チェーン分裂のリスクもなく、どちらに転んでも安価に答えが出ます。