Bitcoin 的 Fee Bumping 机制介绍

最近研究 Lightning Network 发现有个东西叫做 BumpTransaction,因此专门写一篇笔记。

众所周知,比特币交易的费用系统是一个动态的加价拍卖过程。矿工们会优先选择手续费高的交易来打包进区块,从而获得更多的收益。这就意味着,如果你的交易在交易池中等待时间过长,你可以通过增加交易手续费来提高其优先级,这个过程被称为"Fee Bumping"(费用提高)。

常见的两个模式称为费用替换(RBF)和子代支付(CPFP)。

方法

费用替换(Replace-by-Fee, RBF)

这种方法需要发起原始交易时启用RBF选项。之后可以创建并广播一笔新的交易,使用相同的输入,并增加手续费率。如果新交易的手续费高于原交易,矿工就有动力取消原交易,选择新交易。

具体实施过程如下:

i) 创建原始交易时,需要选择"启用RBF"或类似选项,允许该交易被新交易替换。

ii) 广播原始交易到比特币网络后,等待一段时间(建议12个区块时间)。如果仍未被确认,说明手续费太低。

iii) 使用同一个钱包,创建一笔新交易。输入保持不变,但手续费率需适当提高(通常提高20%以上)。

iv) 广播新交易到网络。如果手续费足够高,矿工就会选择打包新交易,抛弃原交易。

v) 等待新交易被确认。由于高手续费,它应当可以较快被矿工确认。

子代支付(Child-Pays-For-Parent, CPFP)

不需要原始交易启用RBF。创建一笔新交易,将原始交易的输出作为输入之一,同时包含一个新的输出。合理增加新交易的手续费,就能激励矿工优先打包原交易,以获得新交易的手续费奖励。

具体实施过程如下:

i) 等待原始交易一段时间(建议12个区块时间),如果仍未确认,则可以尝试CPFP。

ii) 创建一笔新交易,其中一个输入是原始交易的输出(未花费输出)。

iii) 添加一个新地址作为新交易的输出地址,并支付一定的比特币额度(最小也可以)。

iv) 为新交易设置较高的手续费率(通常是原交易手续费的2倍以上)。

v) 广播新交易到网络后,矿工为了获得新交易的高手续费,会优先将原始交易和新交易一起打包进区块。

vi) 等待两笔交易都被确认,原始交易的确认时间将大幅缩短。

RBF 和 CPFP 的利弊

两种方法各有利弊。RBF更直接有效,但需要钱包支持启用该选项。CPFP无需特殊设置,但新交易可能暴露隐私。在手续费率极低或网络拥堵严重时,可能需要尝试多次才能成功。总的来说,这两种方式都可提高交易确认速度,但应审慎使用,避免滥用费用提高机制。

生效条件

值得注意的是,Fee Bumping 只对未经确认的交易有效。一旦原交易被矿工打包进区块,它就无法被替换了。此外,增幅后的手续费金额需要高于原交易一定数额,否则也无法生效。

在 LN 的用例

创建交易时的技巧

在 LN 中,可以创建一个交易,其交易输出是一个 dust(即低于 dust limit),然后后续再按需提高手续费。这样可以避免一开始就缴纳过多的费用。

在使用过程中调整费用

以 LDK 为例,两种情况下产生费用调整。对应于 BumpTransactionEvent 枚举的 ChannelClose 和 HTLCResolution。

  1. 通道关闭 ChannelClose

    • 当我们关闭通道的时候,正常情况下,广播承诺交易,然后结算通道完成。

    • 然而,如果承诺交易当前的费率太低,可能需要很长时间才能在比特币网络上确认,特别是在网络拥堵时。

    • 因此,需要使用 Child-Pays-For-Parent(CPFP)技术,创建子交易,其中包括额外的输入从而满足目标费率。

    • “ChannelClose”事件提供了构建和广播子锚定交易的必要信息,以调整承诺交易的费率。

  2. HTLC解决 HTLCResolution

    • 当一个通道在链下单方面关闭时,作为闪电网络支付过程的一部分的HTLC(Hash Time Locked Contracts)需要在链上解决。

    • 如果 HTLC 解决交易的费率太低而无法及时确认,可能也需要进行费用调整。

    • HTLCResolution 事件提供了构建和广播必要交易以解决这些HTLC的信息,可能需要费用调整以确保及时确认。

参考