先月、bitcoin-devメーリングリストで「Bitcoin Core 24.0にFull RBFを導入しよう」という提案が話題になりました。これは機能自体の歴史的経緯のほかにも、レイヤー2の設計やコンセンサスの変更 (ソフトフォーク・ハードフォーク)とは異なる「ポリシールールの変更」がネットワーク利用者に及ぼしうる影響という面で興味深い提案です。

今日はRBFとはなにか、なぜ現状ではすべてのトランザクションがRBFではないのか、そしてすべてのトランザクションがRBFになるメリットをまとめます。

RBFとは

RBFとはReplace-by-Feeの略で、あるトランザクションがブロックに取り込まれる前に、より手数料の高いトランザクションを配信することでそのトランザクションを置き換えることができるという「印」です。RBFが設定されているトランザクションは、後から置き換えるかもしれないことを宣言していることになります。

後からトランザクションを置き換えると便利なシチュエーションは、身近なところでは手数料を低く設定しすぎてトランザクションが取り残されてしまった場合に手数料を高く設定し直したり、何らかの理由で送る金額や宛先を変更したい場合が考えられます。

なぜ現状FULL RBFではないのか

さて、ここで疑問に思う方もいるかもしれません。なぜ、RBFは一部のトランザクションがわざわざ指定するもので、すべてのトランザクションに対して有効ではないのでしょうか。

すべてのトランザクションをRBF有効、すなわち未承認時に限って置換可能として扱うことをFull RBFといいます。(現状の仕組みはトランザクションごとに明示的に設定する必要があるため、opt-in RBFと呼ばれています。)

Opt-in RBFの(※再)導入時である2016年には、ビットコイン支払いの待ち時間を短縮しようとゼロ承認で支払いを受け付ける事業者がそれなりにいました。この行動は、メモリプールに入ってきたトランザクションはいつか必ずブロックに取り込まれるという予想に基づいています。

そこでもしFull RBFが導入されれば、そのような決済システムを利用している業者に対して二重支払い攻撃をするツールが簡単に作れてしまうとして、当時はFull RBFではなくOpt-in RBFを導入したという経緯があります。Opt-in RBFであれば、決済業者はRBFが設定されているトランザクションはゼロ承認では受け付けない、という対応で足りるという発想です。

しかし、この発想は間違っています。RBFはトランザクションやブロックの正当性に無関係なことから、コンセンサスに含まれる仕様ではないため、ビットコインノードに改変を加えることでFull RBFと同等の機能を導入することもできます。これは未承認トランザクションと同じUTXOを使う新しいトランザクションが出現したときに、手数料の高い方を残して低い方を消すというロジックを実装することで実現できます。実際に、手数料を取り逃したくないマイニングプールのノードは多くがこのような改変をしていると考えられています。

したがって、opt-in RBFの登場時点ではこのような改変を加えたノードが少なかったとしても、現状では既にネットワークとしてはFull RBFに近い状態であると考えられます。つまり、RBFを設定していないトランザクションに関しても、ゼロ承認での決済は二重支払いリスクが大きいです。

逆に言えば、今では未承認トランザクションで決済してしまう業者がほぼ絶滅したため、Bitcoin CoreへのFull RBFの実装が提案されました。

※…opt-in RBF自体はビットコインの最初期から存在したが、実装に問題があったため2016年の再導入時まで無効にされていたそうです。

FULL RBFにするメリット

Opt-in RBFからFull RBFに変更するメリットは、すなわち「RBFを設定しないこと」が可能なことによるデメリットがなくなることです。

今回の提案がFull RBFを推進する一番強い理由は、オンチェーンDLC、Dual-fundedライトニングチャネル、Coinjoinなど複数の主体が資金を拠出するトランザクションにおいて、非協力的・敵対的な相手がOpt-in RBF特有の「RBFが無効なトランザクション」を使用してトランザクションの実行を妨害してくる可能性を考慮しなくてよくなる点です。例えばライトニングノードの運営事業者が、競合他社に対してこのようなDoS攻撃を狙う可能性や、DLCで「賭けに負けた側」が嫌がらせとして相手の資金を必要以上の期間拘束することが考えられます。

また、単純にこの攻撃ベクトルの存在がレイヤー2のプロトコル設計を必要以上に難しくしているため、すべてのトランザクションが暗黙的にRBF有効であるというシンプルな仕様のほうがレイヤー2の開発が捗るという指摘もあります。

さらに別の観点からのメリットとしては、ブロックチェーン解析に利用されてしまう特徴点が1つ減るという点が挙げられます。これはブロックチェーンのプライバシーにとって少しはプラスと言えそうです。

本当に1年で導入できるのか

現在ではほとんどの事業者がゼロ承認取引での決済をやめていると考えられますが、未だにRBF無効のトランザクションに関して採用しているところもあるでしょう。

ビットコインにおいて、ソフトフォーク・ハードフォークとなるコンセンサスルールへの変更には非常に慎重な姿勢が取られますが、コンセンサスルールではない「ポリシールール (≒ノードの運用方針)」でしかないRBFに関しても比較的多数のユーザーへの影響が考えられるため、長めの告知期間を経て変更されるのではないかと個人的には予想しています。

まとめ

・Opt-in RBF (Replace-by-fee)は、トランザクションごとに明示的に「未承認なら後から置き換えるかも」と宣言する機能

・2016年には、RBFが無効なトランザクションをゼロ承認で受け付ける決済業者もいた

・2021年現在、多くのマイニングプールのノードは事実上のFull RBFを実装しており、ゼロ承認の危険性も広く認識されている

・Full RBFをBitcoin Core 24.0に導入することで複数人が資金を拠出するタイプのレイヤー2仕様の設計が少し簡単になる可能性が高く、一般利用者のプライバシー面でも若干の改善といえる

・コンセンサスルールではないが多くの事業者等が依存するかもしれない「ポリシールール」への大きな改変は初めてかもしれないため、告知期間等で導入目処が24.0 (2022年)から26.0 (2023年)などに延びる可能性もある