前言
在比特币网络中,交易的确认依赖于矿工将其包含在区块中,并通过工作量证明的过程进行验证。然而,由于区块容量限制和网络拥堵等原因,某些交易可能需要更长的时间才能被确认。RBF (Replace-by-fee)是一种比特币交易费用策略,允许发送者对未确认的交易进行修改,以增加手续费或者完全替换交易,从而提高交易被确认的优先级。RBF 已经在 2016 年 2 月份引入 Bitcoin Core 0.12 ,它的引入旨在提高比特币交易的可靠性和灵活性。
什么是 Full RBF?
BIP125,也被称为 Opt-in Full Replace-by-Fee(Opt-in Full RBF),是一个比特币改进提案,它为交易引入了一个信号政策,表明它们可以在 mempool 中被替换。允许发送者调整之前发送的声明过可替换的交易,以应对确认延迟或进行其他有用的替换操作。BIP125 规定了交易可以声明替换性的两种方式:
显式信号:如果交易的任何输入的 nSequence 数小于(0xffffffff - 1),则认为交易是可替换的。通过设置较低的 nSequence 数,交易明确表示其愿意被替换。
继承信号:未明确信号可替换性的交易仍然可以被替换,前提是它们的祖先交易(提供当前交易输入的先前交易)中有任何一个声明可替换性并且仍未确认。
然而,这种允许交易的发送者在交易中声明是否允许替换的选择性 RBF 存在一种特定的攻击,特别是针对于建立在比特币上、依赖多方提供输入构建交易的协议,如闪电网络、coinjoin 协议和谨慎日志合约等发起的。攻击者花费了自己为多方交易提供的输入,秘密地准备另一笔与多方交易相冲突的交易,设置为不许替换,并抢先将交易发送给大部分节点从而阻止多方交易的传播。
因此比特币开发者 Antoine Riard 提出 Full Replace-by-fee(Full RBF)并已合并到 Bitcoin Core 24.0 中。此更新在 Bitcoin Core 中引入了一种新配置选项,叫做 mempoolfullrbf,如果这个开关开启了,节点会允许一切交易被替换,即使交易自身并没有用合适的 nSequence 数值表态。Full RBF 是在 Opt-in Full RBF 基础上的一种改进,它移除了声明是否允许替换的限制,允许在任何情况下都可以替换交易。交易者如果想要修改一笔未确认的原始交易,可以创建一笔替换交易,至少包含与原始交易相同的输入,设置更高的手续费,当矿工将包含替换交易的区块添加到比特币区块链上时,替换交易被确认并取代原始交易,而原始交易被废弃。
节点确定替换交易主要依靠交易的输入和交易 ID 进行识别和区分。每个交易在比特币网络中都有一个唯一的交易 ID,由交易的哈希值表示。当一个节点接收到多个具有相同输入的交易时,节点会根据交易 ID 来识别它们。替换交易必须使用与原始交易相同的输入(UTXO),这意味着它们共享相同的交易 ID。节点会比较交易的输入和交易 ID 来确保替换交易是与原始交易相对应的。
争议
Full RBF 在比特币生态中引起了一些争议。支持采用 Full RBF 的人认为 Full RBF 是比特币网络的自然状态,解决了资金重复花费的问题,使用 RBF 策略可以更准确地预测哪笔交易会被确认。并且 Full RBF 提供更大的灵活性,允许发送者在任何时候都能够替换交易。这种灵活性对于需要调整手续费或更改交易细节的情况非常有用,尤其是在使用第二层解决方案(L2)如闪电网络时。发送者可以根据当前网络状况和自身需求来调整交易,提高交易确认的优先级,有助于提高 L2 解决方案的整体安全性和性能。
反对者认为 Full RBF 始终会给接受未确认交易作为结账手段的企业带来更高的重复花费风险。交易在任何时候都可以被替换,这可能增加了交易的不确定性和处理时间。并且 Full RBF 会导致零确认(0-conf)交易的可用性下降,可能会对比特币作为支付工具的吸引力产生负面影响。此外,交易者即使选择了支持 RBF 的钱包,并启用了 RBF 功能,该钱包在广播交易时也有可能会因钱包软件的实现和配置而广播给所有连接的节点,包括未升级的节点。如果未升级的节点去打包了原始交易,同时升级了的节点打包了替换交易,就会存在双花风险或者导致区块链分叉。
关于在主网启用 Full RBF 的讨论
Peter Todd 对那些宣称正在运行 Bitcoin Core 24.x 版本并在 IPv4 地址上接受传入连接的完整节点进行了调查。他发现约 17% 的节点启用了 Full RBF 并成功传播完 Full RBF 替代交易。这表明这些节点使用了将 mempoolfullrbf 配置选项设置为 true 的配置,该选项的默认值是 false。(2022 年 12 月 23 日)
Daniel Lipshitz 认为启用 Full RBF 的动机应该是增加交易费用,并在必要时促进更快地接受区块,而不妨碍目前 0-conf(零确认)交易的使用情况。所以他建议用一个新的交易(TRX2)来取代 mempool 中现有的交易(TRX1),要么 TRX1 和 TRX2 的输出(地址和金额)应该相同,要么 TRX2 应该包括 TRX1 的额外输出。在这两种情况下,至少需要一个额外的输入来增加费用。这种方法允许在交易发布后增加网络费用,而不会失去 0-conf 用例。通过对选择性 RBF和 Full RBF 的访问,用户可以选择增加费用,同时仍然保留对 0-conf 交易的选择,并了解其风险。(2022 年 12 月 11 日)
不同团体启用 Full RBF 的动机不同,优化短期手续费的矿工自然会更喜欢 Full RBF。 Anthony Towns 认为矿工不总是优化短期手续费,他们可能会采取长期视角,考虑跨多个区块的手续费收入,而不是追求即时收益。而长期来看,Full RBF 可能会减少链上交易和手续费收入,或者导致支付方式转向闪电网络、稳定币或其他加密货币。(2022 年 12 月 13 日)
相关链接:
https://bitcoinops.org/en/topics/replace-by-fee/
https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki
https://www.btcstudy.org/2022/11/09/oncoming-discussions-of-full-rbf-by-zhao/
https://www.btcstudy.org/2022/08/03/full-rbf-in-bitcoin-core/