跳转到正文
buybitcoinsmart

术语表 /交易与手续费

子为父付费

又称 Child pays for parent、CPFP。

子为父付费是什么?
Child pays for parent 通过在第二笔交易中花费低手续费交易的未确认输出来挽救该交易,第二笔交易的手续费足以覆盖两笔交易,因为矿工会将这两笔交易合并评估。

矿工并不逐笔挑选交易。自2016年8月发布的0.13.0版本起,Bitcoin Core 按祖先费率选择交易,因此出价慷慨的子交易会把出价吝啬的父交易一并拖入同一个区块。正是这一设计,使收款方在付款卡住时有办法自行处理,而不必等待一个可能永远不会回应的付款方。

运作方式

费率是一个比值,而子为父付费(child pays for parent)的做法,是提高一组交易的整体费率,而不是单笔交易的费率。

矿工填充区块时,希望每个虚拟字节获得尽可能多的聪。当内存池中的某笔交易依赖于一笔未确认的父交易时,挖矿代码无法单独选取它,因此会评估整个祖先集合:父交易与子交易的手续费之和,除以两者的大小之和。如果这个数值高于其他竞争者,两笔交易都会被打包。Bitcoin Core 的挖矿选择自0.13.0版本起一直如此,该版本用按祖先费率排序取代了简单的逐笔排序。

不妨亲手算一次。假设父交易为141个虚拟字节,费率为1 sat/vB,即141聪。您希望这一对交易达到25 sat/vB。花费这枚币的单输入、单输出子交易约为111个虚拟字节,因此整个交易包为252个虚拟字节,总共需要6,300聪。父交易已经贡献了141聪,因此子交易必须承担6,159聪,相当于子交易自身的费率约为55 sat/vB。子交易总是要支付溢价,因为它除了为自己的字节购买区块空间,还要为别人的字节购买区块空间。

这里有两项限制。默认情况下,一条未确认交易链的祖先或后代不得超过25笔,这一整个交易家族的总大小上限约为101千虚拟字节,因此无法无限叠加子交易。此外,中继并非自动完成:多年来,一笔用于提升费用过低的父交易的子交易,本身会被已经丢弃该父交易的节点拒绝,因此 Bitcoin Core 28.0于2024年10月加入了针对一个父交易配一个子交易的机会式中继,使这一对交易作为一个整体在网络中传播。

同样的依赖关系还有更恶劣的一种形式。如果他人能够给一笔共享的未确认交易附加一笔体积很大、手续费很低的子交易,就可以撑大整个交易家族的大小,使提高该交易的费用变得代价极高。这种攻击称为交易钉死(transaction pinning),也正因如此,闪电网络和其他合约协议现在采用受限的交易拓扑,而不是依赖普通的费用提升。

购买比特币时为何重要

子为父付费是收款方唯一可用的手续费补救办法,因此是处理交易所提币停滞的工具。

过程是这样的:您从交易所提币,交易所把您的付款与另外五十笔合并成一个批次,按几小时前自行选定的费率发送;随后费用压力上升,这一批次一直未确认。此时按费率替换(replace-by-fee)对您毫无用处,因为这些输入是由交易所签名的。您能做的是把这枚尚未确认的到账币,以较高的费率转到您自己钱包中的另一个地址。这样矿工就会看到一个值得打包的交易包,两笔交易会一起确认。

您的钱包必须支持这一操作。Bitcoin Core、Sparrow 和 Electrum 允许您选中一枚未确认的到账币并花费它;有几款手机钱包会完全隐藏未确认余额,让您无从操作。如果您打算以自托管方式持有真实资金,请在需要之前就核实这一点,而不是等到费用飙升时。

有两点需要注意。第一,子交易花费的正是您收到的那枚币,因此手续费从您刚提币的资金中扣除,提币金额较小时,这笔费用可能占到不小的比例。第二,子交易会在新地址上生成一枚新币,从而在公开记录中把两笔交易关联起来。如果这笔提币属于注重隐私的安排,以这种方式提高费用是一项您应当在知情的前提下做出的取舍。

救援卡在4 sat/vB 批次中的0.02 BTC 提币

假设交易所以4 sat/vB 的费率批量发给您0.02 BTC,到了早上,费率低于30 sat/vB 的交易都无法确认。这一批次很大,可能有1,500个虚拟字节,而您没有必要为整个批次付费。您只需要让包含您那枚币的交易包看起来有吸引力。

令人意外的一点是:矿工评估的交易包包含整个父交易,即全部1,500个字节,而不只是您的那一份。加上111字节的子交易后,交易包为1,611个虚拟字节,因此要达到30 sat/vB,总共需要48,330聪。父交易已提供其中的6,000聪,因此子交易大约需要支付42,330聪,对于一笔0.02 BTC 的提币而言,这是一笔实实在在的成本。

因此,子为父付费是一种救援手段,而不是常规手段;它用在较小的父交易上,例如某人直接发给您的一笔付款,效果远好于用在交易所的大批次上。有时老实的做法就是等待:多数周末费率会回落,而一笔交易在内存池中默认最长保留14天,之后节点就会将其遗忘。

子为父付费 vs 按费率替换

两者都能提高手续费,但使用者相反,留下的痕迹也不同。替换会改写原始交易,需要签署其输入的密钥,生成新的交易编号,并使第一个版本消失。子为父付费则是在其上新增一笔交易,只需要您所收到的那个输出的密钥,不改变父交易,两笔交易会永久保留在链上。

在可用时,替换成本更低,因为您只需为一笔交易的字节付费,而不是两笔。只要卡住的付款来自您自己的钱包,就应使用替换。如果卡住的付款来自他人,则使用子交易。

请勿混淆

常见问题

对于您正在等待接收的付款,可以使用 child pays for parent 吗?

可以,这也是它的主要用途。传入的比特币在交易生成的那一刻即可花费,因此您可以以较高的费率将其转出,矿工会将两笔交易一并确认。您的钱包必须允许花费未确认的比特币。

为什么子交易的手续费比您实际想要的费率高出这么多?

因为子交易既要为自身的字节付费,也要为父交易的字节付费。矿工按整个交易包对手续费取平均值,因此体积较小的子交易必须大幅超额支付,才能把合并费率提高到您的目标水平。

发送方需要启用什么设置才能使其生效吗?

不需要。Child pays for parent 不需要任何标志或信号,也不需要发送方的配合。它只要求未确认交易中有一个您持有密钥的输出,对于传入的付款,这就是支付给您的那个输出。

接着阅读

相关术语

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

阅读本页英文版