你有没有经历过比特币转账卡在等待状态,无法得到确认而束手无策?

当被卡在内存池时(mempool),如何验证被卡住的BTC交易?

跟着我们往下看,一起了解交易被卡住的原因和解决方案。

交易被卡往往是因为你设置的交易费过低。简单来说,手续费太低意味着矿工会优先考虑将设置高交易费的交易添加到他们的区块上。除非交易量减少,不然你的交易无法得到确认,资金也无法达到预定地址。

然而,你的资金不会永远亏损。矿工要么最后验证你的交易,要么过段时间节点放弃了你的交易,然后资金重返你的钱包。

同时,你也有几个选择来加速你的交易,这取决于你用来发送它的钱包具有的功能。接下来我们将一起看看预防被卡和加速交易的方法。

分析内存池(Mempool):如何确定一笔合适的手续费

内存池是待定交易的集合处,这些交易已经过节点验证但尚未被矿工确认。内存池内置于网络中,交易费过低的交易会被立刻拒绝。换句话说,节点不会将交易包含在它们的内存池中,也不会广播到其它节点。

你也可以把手续费当做支付交易所占的区块空间。区块空间以字节(vBytes)为单位,这就是为什么比特币的交易费用不取决于所转移资金的数量,而是取决于需要包含在区块链中的数据量的原因。

该图将帮助你可视化交易费随时间的变化。但对区块空间的需求很大时,即交易量大时,费用就会上涨。从本质上看,你作为用户必须与其他用户进行竞争,以此激励“看钱办事”的矿工将你的交易添加到他们的区块上。

你的钱如何最终回到你的手里

正如以上提到的,如果你的交易费设置太低,你的交易最终可能被节点放弃。这是因为节点的内存池的空间是有限的,典型的节点限制是300MB。但内存池达到最大容量时,节点通常会放弃最低费用的交易,选择更高交易费的交易。一旦这种情况发生,你就可以重新利用被放弃了的交易中的资金。

下图是实际操作情况。在图的左侧,内存池在定期清理未被确认的交易,意味着如果你再等待一段时间,那么即使只有1-2sat/vBytes的交易费也足够了。但是在图的右侧,如果费用低于5-6sat/vBytes,那么你的交易没有可能继续在内存池里。

你的交易可能因为节点重启和内存池过期而放弃。一般情况下,这需要几天的时间,并且你需要重新获得资金的使用权。但这取决于交易量和其它变量,因此有时可能需要更长的等待时间。

对于这些情况,你也可以尝试以下的方法来确认交易。

别尝试“双花”

如果你想创建一个新交易,将相同的资金发送到相同的地址,但交易费更高,遇到这种情况该怎么办?从节点对待新交易的角度看,你刚刚已经双花(double spending),如果被发现,节点将会删除最新的交易。

比特币节点遵从“第一眼”原则,意味着节点软件认为它们接收到的第一笔交易是有效的,而任何后续试图花费相同的交易费的交易被认为是无效的,也不会被广播。

所以,当你的交易被卡在内存池中并且不想等待验证或被节点放弃,有什么最常用的解决方法?

交易重发(Opt-In Replace-by-Fee )

2016年,BIP-125提出了一项政策,即允许替代交易。本质上,当你想替换交易时,可以提前通知节点。

假设你发送了一笔交易,为了避免交易费设置太低,你想要能够替代这笔交易。如果启用了交易重发的功能,并且节点执行了交易重发的政策,那你的机会就来了。但替代交易要被发送到节点时,新交易将代替旧交易,并将其广播到其它节点。

接着矿工就会看到新的高交易费的交易,如果他们想赚更多的钱,那么就会把你的交易添加到他们的区块上。

记住,这只能由发送交易的人发起,如果你是接收这笔交易的一方,应该了解以下的“父子交易”(Child Pays for Parent)。

父子交易(Child Pays for Parent)

在“父子交易”应用场景中,你可以通过使用待处理的交易中的一部分资金将另一笔交易发送给自己来确认这笔待处理的交易。你可以有效地创建一个“子”交易来支付,但要支付更高的费用,如下所示。

以“父子交易”为例;为简单起见,假设两个交易具有相同的字节(vBytes)。

与交易重发不同,父子交易可以由在父交易中接收UTXO(为输出的交易)的任何一方发起。换句话说,上例中的A2或B交易方都可以使用其在父交易中收到的资金来支付子交易中较高的交易费用。

这就是为什么它可以将卡住的交易添加到区块上。虽然矿工希望只添加子交易,因为它出的交易费更高,但这是不可能的。子交易是基于待确定的父交易,所以只有父交易也在区块链上时才有效,父子交易是捆绑在一起的。

这意味着两次交易的累计交易费必须满足一定的交易费标准(sat/vBytes)才可以被确认。换句话说,这两笔交易费的平均值必须大于确认新交易所需的当前交易费标准。

实际上,创建父子交易要困难得多,因为需要从未经确认的交易中先支出一笔费用,目前许多钱包不支持该功能。

交易加速器服务

如果交易重发和父子交易不适合你,你可以尝试一种更迂回的方法来将交易添加到区块上,即交易加速器。

这是矿工提供的一项服务,他们将接受外部付款,如山寨币、PayPal或微信支付,从而将你的交易添加到一个区块上。你可以通过向矿工支付额外的费用给矿工提供足够的经济激励。

这些外部交易费被称为“带外”(out-of-band)支付,它们可能导致矿工收入降低,因此存在争议。

你的选择由你的钱包做主

由每个钱包开发人员选择他们想为用户提供的方案。例如,交易钱包通常会强制收取固定的费用,而不管发送的金额是多少。这有一定道理,因为卡住的交易肯定会引起用户的不满并为他们带来麻烦。在可以自己控制自己的私匙的自我监管(self-custody)的钱包中,通常会有更多的方式来帮助解决被卡住的交易。

作为一个比特币玩家,你有机会做自己的银行,这有很多优点,包括审查和抗阻力(seizure resistance),但也意味这你有时会面对棘手的情况,比如交易被卡住。希望通过本文可以帮助你解决以及防止交易卡住这种情况再次发生。