用語集 / トランザクションと手数料
Replace-by-fee
別名はRBF、Replace by fee、Opt-in replace by fee、Full-RBFです。
- Replace-by-feeとは?
- Replace-by-feeは、未確認のトランザクションを、より高い手数料を支払うそのトランザクションの別バージョンに差し替えることを可能にする仕組みで、最新のBitcoin Coreは、元のトランザクションがその差し替えをシグナルしていなくても、その差し替えをリレーします。
BIP-125で規定されています。
手数料の見積もりは古くなるため、ビットコインでは送信者がまだマイニングされていない支払いを書き換えられます。置き換え版は元の手数料の全額を再度支払い、さらに仮想バイトあたり少なくとも1サトシを上乗せして支払う必要があるため、手数料の引き上げは決して無料ではありません。実務上のルールは明快です。未確認のものは決済されておらず、引き上げられるのは送信者だけです。
仕組み
置き換えはコンセンサスルールではなくリレーポリシーであり、だからこそフォークなしでその挙動が2回変わりました。
BIP125がオプトイン方式を定義し、Bitcoin Coreが2016年2月23日に0.12.0でこれを搭載しました。送信者は、少なくとも1つのインプットのシーケンス番号を0xfffffffd以下に設定して置き換えを受け入れる意思を示し、ノードはより多く支払う競合トランザクションを転送しました。このフラグを設定しないウォレットは、その利用者自身が修復できない支払いを生み出しました。
その区別はなくなりました。2024年10月にリリースされたBitcoin Core 28.0は-mempoolfullrbfのデフォルトを有効に切り替えたため、適切に接続されたノードは、最初のトランザクションが何をシグナルしたかに関係なく、より多く支払う競合トランザクションを転送するようになりました。フラグのない支払いは「置き換えできない」と今も約束しているウォレット画面は、もはや存在しないネットワークを説明しています。
ノードが置き換えを受け入れるかどうかは4つの条件で決まり、これらの条件は、置き換えが無料の書き換えでネットワークを溢れさせるために使われるのを防ぐためにあります。
- 置き換え版は、排除するすべてのトランザクションよりも高い絶対手数料を支払わなければならず、単に高い手数料率を支払うだけでは足りません。
- また、少なくとも増分リレー手数料以上の追加額を支払わなければならず、この増分リレー手数料はデフォルトで、仮想バイトあたり1サトシに新しいトランザクションのサイズを掛けた額です。
- 元のトランザクションがすでに使用していない未確認のインプットを取り込んではなりません。
- 同時に排除できるトランザクションは100件までであり、競合するすべてのトランザクションの子孫も数えます。
人を驚かせるのは絶対手数料のルールです。大きなトランザクションをより良いレートの小さなトランザクションに切り詰める置き換え版でも、手数料の総額が下がるため、拒否されることがあります。また、支払うのは新しい手数料であり、両方ではないことに注意してください。元のトランザクションは破棄されてマイニングされないため、古い手数料が徴収されることはありません。
Bitcoin Coreはこれをbumpfee RPCとして公開しており、ほとんどのデスクトップウォレットは「increase fee」などのラベルのボタンにこれを組み込んでいます。通常の仕組みは、追加手数料の分だけおつりのアウトプットを減らすことであり、だからこそ、おつりを残さず残高全体を送った支払いは、別のインプットを追加しない限り引き上げられません。
ビットコインを購入するときにこれが重要な理由
置き換えがあなたの問題になるのは、取引所から自分のウォレットへ出金するとき、またはそのウォレットから他の誰かへ送金するときです。
自分のウォレットから送金するのは良いケースです。2:00に手数料率を選び、その後mempoolが混み始めた場合は、トランザクションを開いて引き上げてください。必要になる前にボタンを提供するウォレットを選んでください。これはBitcoin Core、Sparrow、Electrum、Trezor Suiteでは通常の機能であり、手数料を代わりに選び、やり直す手段を与えない多くのスマートフォンウォレットでは欠けている機能です。
取引所からの出金は悪いケースです。そのトランザクションを構築したのは取引所であり、インプットの鍵を保有しているのは取引所であるため、置き換えられるのは取引所だけです。サポート窓口は通常これを行いません。出金バッチが一度に数十人の顧客を処理するためです。受け取る側からできる唯一の手段はchild pays for parentであり、これはあなたに届くコインが、未確認であっても存在した瞬間から使用可能であるため機能します。
受け取るときこそ、置き換えによってあなたの行動の仕方が変わります。個人間マーケットプレイスの売り手、対面取引の当事者、未確認の支払いで商品を引き渡すビットコインATMの運営者は、mempoolを持つ誰もが置き換えを監視できるトランザクションを信頼しています。完全な置き換えがデフォルトになったことは、フラグのないトランザクションは確認ゼロで安全に受け入れられるとする従来の助言が廃止されたことを意味します。ブロックを待ってください。重要な金額については、複数のブロックを待ってください。
停滞した3 sat/vBの出金を引き上げる
自分のウォレットから、ネイティブSegWitのインプット1つとアウトプット2つ(受取人向けとおつり向け)で0.05 BTCを送金するとします。このトランザクションは約141仮想バイトで、3 sat/vBでは423サトシの手数料がかかります。
翌朝、確認される最も安いレートが20 sat/vBで、あなたの支払いは動いていません。引き上げます。置き換え版は同じ141仮想バイトなので、20 sat/vBは2,820サトシの手数料となり、受取人の金額からではなくおつりのアウトプットから差し引かれます。この置き換えのポリシー上の下限は、元の423サトシに、141バイト全体で1 sat/vBを適用した額、すなわち564サトシなので、2,820はこれを余裕をもって上回ります。
あなたが支払うのは3,243サトシではありません。2,820を支払い、最初のバージョンはマイニングされずに消えます。受取人は依然として正確に0.05 BTCを受け取り、トランザクションIDは変わるため、すでに誰かに古いIDを伝えている場合は新しいIDを送る必要があります。
これが高くつくのは、減らせるおつりのアウトプットが残っていない場合です。その場合、ウォレットは別のインプットを追加する必要があり、トランザクションは約209仮想バイトに膨らみ、同じ20 sat/vBで4,180サトシかかります。
Replace-by-fee vs二重支払い
Replace-by-feeと二重支払いの試みは同じ仕組みを使い、違いはお金が最終的にどこへ行くかだけです。置き換えは通常、同じ受取人を維持し、追加の手数料をおつりから出します。二重支払いはアウトプットを書き換えて、コインが送信者に戻るか、まったく別の場所へ行くようにし、商品を引き渡した販売者は何も受け取りません。
どちらも単なる競合トランザクションであり、より多く支払う方が勝つため、どのノードも両者を区別できません。これが、入ってくる支払いに対してウォレットが付けるラベルを信じるのではなく、確認を待つべきだという議論のすべてです。保護となるのはチェーンの深さであり、送信者が表明した意図ではありません。