术语表 /交易与手续费
手续费替换
又称 Replace-by-fee、RBF、按手续费替换、自愿加入的 replace-by-fee、Full-RBF。
- 手续费替换是什么?
- Replace-by-fee 允许将一笔未确认的交易替换为支付更高手续费的自身版本,新版本的 Bitcoin Core 无论原交易是否已发出可替换信号,都会转发这一替换交易。
规定于 BIP-125。
费率估算会过时,因此比特币允许发送方改写尚未被挖出的付款。替换交易必须重新支付原交易的全部手续费,并且每虚拟字节至少再多付1聪,因此提高手续费从来不是免费的。对您来说,实用规则很直接:任何未确认的交易都不算结算完成,而且只有发送方才能提高手续费。
运作方式
替换是一项中继策略,不是共识规则,因此它的行为曾两度改变,却没有发生任何分叉。
BIP125 定义了需主动选择的版本,Bitcoin Core 于2016年2月23日在0.12.0中发布了该版本。发送方通过把至少一个输入的序列号设为0xfffffffd 或更低,表明愿意被替换,节点随后会转发支付更多手续费的冲突交易。没有设置该标志的钱包,生成的付款连其用户自己也无法修复。
这种区别已经不复存在。Bitcoin Core 28.0于2024年10月发布,把 -mempoolfullrbf 的默认值改为开启,因此连接良好的节点现在会转发支付更高手续费的冲突交易,无论第一笔交易发出了什么信号。任何仍然承诺未设标志的付款“无法被替换”的钱包界面,描述的都是一个已不存在的网络。
节点是否接受替换,取决于四个条件,这些条件的作用是防止替换被用来以免费改写淹没网络:
- 替换交易支付的绝对手续费必须高于其所驱逐的每一笔交易,而不仅仅是费率更高。
- 它还必须额外支付至少相当于增量中继费的金额,该费用默认为每虚拟字节1聪,乘以新交易的大小。
- 它不得引入原交易未曾花费的未确认输入。
- 它一次最多只能驱逐100笔交易,其中包括与之冲突的所有交易的后代交易。
绝对手续费规则最容易让人意外。把一笔大交易缩减为一笔较小的交易、费率更优的替换交易,仍可能被拒绝,因为手续费总额下降了。还请注意,您支付的是新的手续费,而不是两笔:原交易会被丢弃,永远不会被挖出,因此旧的手续费不会被收取。
Bitcoin Core 把这项功能提供为 bumpfee RPC,大多数桌面钱包把它包装成标为“提高手续费”或类似名称的按钮。通常的机制是按额外手续费的金额缩减找零输出,因此如果某笔付款发送了全部余额、没有留下找零,就无法在不增加另一个输入的情况下提高手续费。
购买比特币时为何重要
当您从交易所提币到自己的钱包,或从该钱包向他人转账时,替换就成了您需要处理的问题。
从自己的钱包转账是好的情形。如果您在02:00选定了费率,之后内存池变得繁忙,请打开该交易并提高手续费。请在需要之前就选择提供该按钮的钱包:这是 Bitcoin Core、Sparrow、Electrum 和 Trezor Suite 中的常规功能,而在许多替您选定手续费、又不给您回头路的手机钱包中则没有这项功能。
从交易所提币是不好的情形。该交易由交易所构建,输入的密钥由其持有,只有它才能替换这笔交易。客服通常不会这样做,因为其提币批次同时为数十位客户服务。从接收方一侧,您唯一的办法是子交易为父交易付费(child pays for parent),其原理是:到达您手中的币从产生的那一刻起就可以花费,即使尚未确认。
在接收时,替换会改变您应有的做法。在点对点交易平台上的卖家、面对面交易的卖家,或在收到未确认付款后就放出商品的比特币 ATM 运营方,信任的是一笔任何拥有内存池的人都能看到被替换的交易。完全替换成为默认设置,意味着旧的建议,即未设标志的交易在零确认时接受是安全的,已经作废。请等待一个区块。对于金额重要的交易,请等待多个区块。
提高一笔停滞的3 sat/vB 提币交易的手续费
假设您从自己的钱包发送0.05 BTC,使用1个原生 SegWit 输入和2个输出,一个给收款方,一个用于找零。该交易约为141虚拟字节,按3 sat/vB 计算,手续费为423聪。
次日早晨,能够确认的最低费率是20 sat/vB,而您的付款没有任何进展。您提高手续费。替换交易仍是同样的141虚拟字节,因此20 sat/vB 意味着手续费为2,820聪,从找零输出中扣除,而不是从收款方的金额中扣除。这笔替换交易的策略下限是原来的423聪,加上141字节乘以每虚拟字节1聪,即564聪,因此2,820聪轻松达标。
您支付的不是3,243聪,而是2,820聪,第一个版本则因未被挖出而作废。收款方仍然恰好收到0.05 BTC,交易 ID 会改变,因此如果您已经把旧的 ID 给了别人,就需要把新的 ID 发给对方。
当没有找零输出可以缩减时,成本就会变高。这时钱包必须再增加一个输入,交易大小增至约209虚拟字节,同样的20 sat/vB 此时要花费4,180聪。
手续费替换 vs 双花
手续费替换和双花尝试使用相同的机制,区别仅在于资金的最终去向。替换通常保持收款方不变,并从找零中扣除额外的手续费。双花则改写输出,使币回到发送方手中或流向别处,交出商品的商家什么也得不到。
没有任何节点能分辨二者的差别,因为两者都只是相互冲突的交易,支付更高的那笔胜出。这正是应当等待确认、而不是相信钱包给收到的付款贴上的标签的全部理由。保护来自区块链中的深度,而不是发送方声明的意图。