作者:Gloria Zhao

来源:https://bitcoinops.org/zh/newsletters/2023/05/31/

译者:Primitives Lane

本文为 Gloria Zhao 在 Optech Newsletter 上编写的 “交易池” 系列周刊的第三篇。

前篇见此处

上周我们提到交易为所用的区块空间支付费用,而不是按照所转移的金额支付费用,并确定矿工将优化他们的交易选择以最大化收取费用。因此,当找到一个块时,只有那些位于交易池头部的交易才会得到确认。在这篇文章中,我们将讨论让手续费花得最值的实用策略。让我们假设我们有一个不错的费率估算来源 —— 我们将在下周的文章中更多地讨论费率估算。

在构建交易时,交易的某些部分比其他部分更灵活。每笔交易都需要头部字段、收款人的输出由正在进行的付款决定,并且大多数交易都需要找零输出。发送方和接收方应该都更喜欢区块空间高效的输出类型,以减少未来花费交易输出的成本,但在 输入/钱币选择 期间,更改交易的最终组成和重量的空间最大。由于交易按费率(费率/重量)竞争,较轻的交易只需更低的费用就能达到相同的费率。

一些钱包,例如 Bitcoin Core 钱包,尝试组合输入以避免设置找零输出。避免找零可以节省现在输出的重量,还可以节省以后花费找零输出的未来成本。不幸的是,除非钱包拥有大量不同金额的大型 UTXO 池,否则这种输入组合几乎不存在。

较新的输出类型比旧输出类型更节省区块空间。例如,花费 P2TR 输入产生的重量不到 P2PKH 输入的 2/5。(使用我们的交易体积计算器试试吧!)对于多重签名钱包,最近定稿的 MuSig2 方案和 FROST 协议通过允许多重签名功能以看起来像单签名输入的方式编码,节省了许多费用。特别是在区块空间需求飙升的时代,使用较新的输出类型的钱包本身就可以节省大量费用。

Overview of input and output weights

聪明的钱包根据费率调整其选择策略:在高费率下,它们使用很少的输入和较新的输入类型来让输入集的重量尽可能低。始终选择最轻的输入集将在本地最小化当前交易的成本,但也会将钱包的 UTXO 池磨成小碎片。这可能会让用户在日后的高手续费率环境下也不得不选择较重的输入集。因此,对钱包来说,具有先见之明的做法是,如果预期日后会出现区块空间的需求高峰,就趁手续费率的低谷选择更多和更重的输入、将资金整合进数量更少的新型输出。

大体量的钱包通常会将多个付款批处理到单个交易中,以减少每一笔支付的平均交易重量。批处理避免了头字节的开销和每次付款的找零输出,所有支付共同分摊同一份固定开销。即使只是批量处理几笔付款,也可以快速降低每次付款的成本。

Savings from payment batching with P2WPKH

但是,即便许多钱包会错误估计手续费(因此超额支付手续费(overpayment)),在出块缓慢或交易提交量激增的时候,有时交易也会迟迟得不到确认。在这些情况下,发送方或接收方可能希望再次提高交易的确认优先级。

用户通常有两种工具可以提高交易的优先级,即“子为父偿(CPFP)” 和 “手续费替换(RBF)”。在 CPFP 中,用户花费其交易输出来创建高费率的子交易。正如上周的帖子所描述的那样,矿工被激励将父交易选入区块,以便包括手续费高的子交易。一笔交易的任何收款者均可利用 CPFP,因此接收方和发送方(如果他们创建了找零输出)都可以利用它。

在 RBF 中,发送者制作更高手续费的交易以替换原版交易。替换交易必须重用原版交易中的至少一个输入,以确保与原版交易冲突,并且区块链只能包含这两个交易中的一个。通常,这样的替换交易会保留原版交易的付款,但发送者也可以将替换交易中的资金重新定向,或者在替换时将多个交易的付款合并为一个。正如上周的帖子所述,节点驱逐原版交易,以支持激励更加相容的替换交易。

虽然区块空间的需求和生产都不在我们的控制范围内,但钱包可以使用许多技术来有效地竞标区块空间。钱包可以通过消除找零输出、花费原生的隔离见证输出以及在低费率环境中对其 UTXO 池进行碎片整理,来创建更轻的交易,以节省费用。支持 CPFP 和 RBF 的钱包也可以从保守的费率开始,然后在需要时使用 CPFP 或 RBF 更新交易的优先级。

续篇见此处