跳转到正文
buybitcoinsmart

术语表 /交易与手续费

手续费替换

又称 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 双花

手续费替换和双花尝试使用相同的机制,区别仅在于资金的最终去向。替换通常保持收款方不变,并从找零中扣除额外的手续费。双花则改写输出,使币回到发送方手中或流向别处,交出商品的商家什么也得不到。

没有任何节点能分辨二者的差别,因为两者都只是相互冲突的交易,支付更高的那笔胜出。这正是应当等待确认、而不是相信钱包给收到的付款贴上的标签的全部理由。保护来自区块链中的深度,而不是发送方声明的意图。

请勿混淆

常见问题

可以用 replace-by-fee 取消一笔比特币交易吗?

只在有限的意义上可以,而且只能通过创建该交易的钱包操作。在付款尚未确认期间,您可以用一笔冲突交易替换它:该交易花费相同的输入,把资金转回您自己,并支付更高的手续费。一旦交易确认,就无法撤销。

我仍需要在钱包中启用 replace-by-fee 吗?

就网络而言不需要。自2024年10月的 Bitcoin Core 28.0起,无论原交易是否发出了信号,节点都会转发支付更高手续费的冲突交易。这项设置在您自己的钱包内仍然重要,因为有些钱包只在其标记过的交易上提供加价按钮。

我从交易所提币的交易尚未确认。可以对它使用 replace-by-fee 吗?

不可以。替换需要为输入签名的私钥,而交易所提币的私钥由交易所持有。在您这一侧,可用的工具是 child pays for parent:用一笔高手续费交易花费收到的这笔币,矿工会一并处理两笔交易。

接着阅读

相关术语

交易与手续费中的更多术语

阅读本页英文版