RBF は確認前の取引を扱います。BIP125 は Bitcoin Core 0.12 に関連する opt-in シグナルと置換規則を記述しました。Full-RBF はこのシグナルを要求せず、Core 24 で設定可能になり、Core 28 で既定で有効になり、Core 29 で mempoolfullrbf 切り替え設定が削除されました。RBF は合意や確認済みブロックを変えず、ノードがどの有効な未確認の競合取引を保持し中継するかに影響します。
RBF は、使用する入力を少なくとも一つ共有する mempool 内の一件以上の未確認取引を置き換えます。既にブロックで確認された取引は書き換えません。置換取引はデータが変わり txid も異なりますが、必要な署名を含む入力の使用条件を自ら満たす必要があります。 [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core v30.0 — Mempool replacement policy]
BIP125 は少なくとも一つの入力の nSequence が 0xfffffffe 未満なら明示的 opt-in とする方式と、未確認の祖先からのシグナル継承を記述しています。これは歴史的な方針であり合意条件ではありません。Full-RBF はこのシグナルなしでも置換を評価するため、シグナルがなくても置換不能とは限りません。 [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core 0.12.0 release notes]
RBF はローカルな mempool と relay の方針であり、合意規則ではありません。採掘者は他のノードの mempool になかった、合意上有効な競合取引を選べます。Full Node は自身の mempool の以前の選好とは独立に、合意規則で結果のブロックを検証します。 [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core 29.0 release notes]
Bitcoin Core 30 の単一置換取引の方針は、新しい未確認入力や排除する取引数も制限します。同じ UTXO を使用するだけでは足りず、標準性、中継、有効性の規則が必要です。制限は CPU、メモリ、帯域を保護します。パッケージ置換の規則はノードのバージョンごとに別途評価する必要があります。 [Bitcoin Core v30.0 — Mempool replacement policy]
手数料総額は satoshi 単位の金額、手数料率は仮想バイト当たりの sat/vB です。Core 30 の単一置換では、排除される全取引の手数料合計に加え、置換取引のサイズと incrementalrelayfee に応じた費用を払います。手数料率は直接競合する各取引の率を上回る必要があります。率だけを上げたり satoshi を足したりするだけでは不十分です。Core 30 の incrementalrelayfee の既定値は 0.1 sat/vB ですが、ノード設定は異なり得ます。 [Bitcoin Core v30.0 — Mempool replacement policy] [Bitcoin Core 30.0 release notes]
親取引の置換は、その出力を使う子孫も mempool から排除し得るため、必ずしも二つの取引だけの比較ではありません。Core 30 の単一置換では、直接競合する取引自身を含む子孫数の合計を 100 以下に制限します。共通の子孫を複数回数える場合があります。パッケージの手数料や依存関係が置換の成功に影響します。 [Bitcoin Core v30.0 — Mempool replacement policy]
RBF は使用する取引自体を置き換えて手数料を増やします。Child Pays for Parent (CPFP) は親を残し、十分な手数料の子を加えて、採掘者が合算手数料率を評価できるようにします。選択は管理する出力、必要な入力への署名能力、取引グラフによります。CPFP は親を置き換えません。 [Bitcoin Core v30.0 — Mempool replacement policy]
二重使用は同じ UTXO を使う競合する試みです。RBF はノードが自身の方針で未確認の競合取引を選ぶ仕組みです。置換は正当な手数料増額にも、未確認の支払い先変更にも使えます。入力の条件を満たさずに第三者が使う権限を RBF が与えることはありません。 [BIP 125 — Opt-in Full Replace-by-Fee Signaling]
Zero-conf は未確認の支払いを意味し、未設定という意味ではありません。販売者が最初に見た取引がブロックに入る保証はありません。Full-RBF はこの境界を明示します。Zero-conf の受け入れは事業上のリスク判断であり、Bitcoin の最終決済ではありません。 [BIP 125 — Opt-in Full Replace-by-Fee Signaling]
getmempoolentry は未確認取引の状態を示し、testmempoolaccept は署名済みの置換候補一件を、そのノードの現在の mempool と規則に照らして送信せずに試験します。他のノードの受け入れや採掘を保証する結果ではありません。Core 28 は mempoolfullrbf の既定値で full-RBF を有効にし、Core 29 はその設定を削除しました。getmempoolinfo は手数料設定を示しますが、Core 30 の fullrbf フィールドは非推奨です。必ずバージョンと実際の設定を確認してください。 [Bitcoin Core 28.0 release notes] [Bitcoin Core 29.0 release notes] [Bitcoin Core getmempoolinfo RPC] [Bitcoin Core testmempoolaccept RPC] [Bitcoin Core getmempoolentry RPC] [Bitcoin Core v30.0 — Mempool RPC implementation]
理解を深めるには、この項目とあわせて次もお読みください トランザクション手数料, Mempool, CPFP (Child Pays for Parent), 二重支払い, 承認, Fee Rate. 次の項目からも参照されています お釣り出力, 承認, 二重支払い, Fee Rate.