Bitcoin Core 24.0からのFull RBF既定化についての議論まとめ
この1週間ほど世間の話題はFTXの信用不安問題で持ちきりですが、ビットコイン開発者の多くは全然違う論争に巻き込まれていました。Bitcoin Coreの次期リリースである24.0において、ノードのポリシーとしてFull RBF (mempoolfullrbf)というものが導入される予定のところ、これに反対する意見が出たためです。
結果的には導入継続という流れになりましたが、このように誰でも意見・議論できることがビットコイン開発における健全性維持の1つの仕組みです。
それでは議論の内容を見ていきましょう。
RBFとは
RBFとはReplace-by-Feeの略で、配信したがまだブロックに取り込まれていないトランザクションを、より高い手数料を払って置換することをいいます。トランザクション作成時にそのトランザクションにRBF有効のフラグが立てられている場合、同じコインを使用する別のトランザクション、つまり相反するトランザクションを配信して古いものを置き換えることができます。(置換されるトランザクションより手数料が高いこと、置換されるトランザクションがまだブロックに取り込まれていないことが条件)
一部のウォレットではRBFが既定で有効になるようにトランザクションを生成していて、ブロックに取り込まれるまでの間に自分に送るトランザクションで上書きすることで送金を「キャンセル」したり、あるいは手数料が低すぎてなかなか取り込まれない場合に手数料を追加することができます。これはビットコインウォレットのユーザービリティ向上につながる機能です。
ちなみに実はRBFが有効になっていなくても同様のことを行うことは理論上できます。なぜなら、ブロックに取り込まれていないトランザクションの扱いはコンセンサスの問題ではなく、各ノードに任されているポリシールールと呼ばれるものだからです。ただ、既定の設定ではビットコインノードはRBFが有効になっていないトランザクションについて相反するトランザクションを受信した場合、最初に受信した以外を無視してしまう(First-seen rule)ため、当該トランザクションがマイナーの元に届きにくいです。
例えば相反するトランザクションが順を追って2つ配信されたとして、必ずしも同じ順番で自分のノードまで伝播されるとは限りません。したがって、「どちらが先だったか」について合意は得られません。ビットコインのユーザーから見れば単にブロックに片方だけが取り込まれれば問題ないのです。
ポリシールールの変更
今回問題となったのは、Bitcoin Core 24.0においてmempoolfullrbf (Full RBF)という設定を既定にするという変更が予定されていたためです。この設定はまさに上述した「RBFが無効のものであれば最初のトランザクションのみを再配信する」という内容を覆し、「実際の状況にかかわらず全てのトランザクションをRBF有効とみなして取り扱う」というものです。
この設定が普及するとRBFを有効にしていないトランザクションでもより確実にトランザクションのキャンセルや手数料追加を行うことができるようになり、利便性が改善するほか、LNなどでトランザクション手数料を低く抑えることによって時間を稼ぐ攻撃方法(Transaction Pinning)が難しくなります。
一方で反対意見はというと、ゼロ承認取引を活用している事業者からのものが主でした。
ゼロ承認取引は今までよりも更に非推奨に
ゼロ承認取引とは文字通りブロックに取り込まれておらず、まだメモリプールに存在するだけの送金トランザクションと、それをもって着金とみなす商習慣のことを言います。
ビットコインのブロック生成間隔は平均で10分間と長いため、ユーザー体験を改善するためにゼロ承認取引は昔から一定の利用がされてきました。例えばレジでの小売決済やATMでのビットコイン換金時にユーザーがその場に数十分間もとどまる必要のないように、事業者がゼロ承認取引のリスクを引き受けることで即時決済を擬似的に再現します。トランザクションを置き換える手間を増やすためにRBF無効を条件とする場合が多いようです。
最近のゼロ承認取引のヘビーユーザーには人気ライトニングウォレットのMuunなども含まれます。Muunはユーザーが即時にライトニングウォレットに入金できるよう「ゼロ承認アトミックスワップ」を使用しています。
今回異論を述べたのは主にMuun, Synonym, Bitrefillの3社でした。
無論、前述した通り悪意あるユーザーはそれでも不正ができてしまうので大きな金額の取引には向きませんが、一定の割合で不正を行うユーザーがいるというリスク評価が行える事業者はFull RBFによってRBF無効のトランザクションも置き換えられやすくなるとリスクが大きくなり、ビジネスが成立しなくなると主張しています。
結果的には反対意見は取り下げられました。ブロックに取り込まれる前のトランザクションを置き換えることがより簡単にできることで、今後ビットコインでのゼロ承認取引の利用は縮小していくでしょう。個人的にはゼロ承認取引の利用はビットコインのコンセンサス外の部分なので存在しても良いとは思いますが、RBFのフラグが無効でも実は置き換えられることが分かりにくいことなどエレガントさはないと感じていたので、Full RBFの導入が続行され良かったと思います。
余談、ビットコインキャッシュはライトニングよりオンチェーンスケーリング+ゼロ承認取引という組み合わせを推していたため、今回のゼロ承認取引は実際に使われているからBitcoin Coreもそれを尊重すべきだ!の声にはどこか懐かしさを感じました。
追記
最終的に既定ではmempoolfullrbfは無効の状態で24.0をリリースすることが決定しました。ノード運用者やマイナーが自発的に有効化することで徐々にRBF無効の未承認トランザクションも置き換えられるという常識を普及させていき、未承認トランザクションをもって決済とみなす商習慣が廃れた頃にmempoolfullrbf=trueを既定にする方針のようです。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション