Cover photo

使用Sparrow Wallet加速BTC交易(CPFP)

理论

CPFP是Child Pays for Parent的缩写,是比特币交易加速的一种方法,它通过增加【子交易】交易的GAS费来加速相关联的【未确认父交易】。

CPFP之所以可以加速BTC交易,是因为BTC出块的激励机制,BTC矿工在打包交易时,会优先打包GAS费用高的交易。所以当一个【未确认父交易】由于GAS过低卡链时,可以提高【子交易】的GAS费用,从而让矿工有意愿优先打包【子交易】,同时由于交易的完整性,矿工打包【子交易】就必须同时打包【未确认父交易】,因此只要【子交易】的GAS费用给的足够高,使得父、子交易的GAS平均值比当前GAS水平高,就能激励矿工去打包这两个交易,从而达到加速【未确认父交易】的目的。

使用CPFP有个限制:必须拥有交易输出某条UTXO才可以。 换句话说,如果一个交易是你转给别人,同时输出中又没有任何UTXO属于你自己,那么你是没有办法通过CPFP的方式加速该笔交易的,只能由拥有输出UTXO的一方进行加速。

实操

【未确认父交易】

https://mempool.space/tx/b31accb049d5d5e36d83d263aaed02ad4d9669cfddcffc64e3b7fcbc524607e6

post image

这个交易是朋友在ME市场购买铭文的交易,我们可以看到他设置的【未确认父交易】初始GAS费用是77.1sat/vB,而当时的链上GAS水平是90sat/vB,因此该交易被卡在链上。

首先从截图上可以获得几个关键信息:

1、【未确认父交易】的初始GAS是77.1sat/vB,体积是808.5vB;

2、输出中 0.07118233BTC 这条找零UTXO是属于发起地址拥有的,我们将要通过这个UTXO创建【子交易】,为什么不选其他的UTXO,是因为其他UTXO价值太小,不足以支付加速GAS;

打开Sparrow Wallet,在UTXOs管理面板,找到这条UTXO,会看到前面标注了【未确认,可支配】。

选定输出0.07118233BTC的UTXO来创建子交易
选定输出0.07118233BTC的UTXO来创建子交易

选定这一条UTXO后,点击右下角的Send Selected按钮,进入交易创建页面:

post image

设置好所有信息,一路点击蓝色按钮,直至广播上链即可:

post image

计算该给多少GAS:

为了方便理解,用方程式来表示,实际使用时直接计算即可。

有个已知常量:【子交易】属于(1个输入+1个输出的交易),其体积是111vB(所有1入1出的体积都是111vB)。

假设:X为加速后的GAS单价,单位是sat/vB;Y为【子交易】GAS总额,单位是sats;

*******************************************************

子交易体积X+父交易体积(X父交易初始GAS单价)=Y子交易体积 * X + 父交易体积 * (X - 父交易初始GAS单价) = Y

********************************************************

根据链上GAS水平,本案例中父交易需要加速至90sat/vB以上,才能保证快速出块。按照X=90sats/vB计算:

子交易GAS总额为:$$11190+808.5(90-77.1)=20419.65sats$$

子交易GAS单价为:20419.65/111=183.96sat/vB20419.65/111=183.96sat/vB

所以,【子交易】GAS单价设置183.96sat/vB即可把【未确认父交易】加速至90sat/vB。

当然,一般会多给一些,以确保万无一失,所以本例最总按照200sats/vB设置的GAS (截图是滑动条不好拖动,稍微偏了一些,设置成了201.02,不影响理解)

现在我们反算验证一下:

子交易GAS单价为:$$111X+808.5(X-77.1)=201.02*111 ---→ X=92.059 ≈ 92.1 sat/vB$$

post image
post image

我的推特:

post image