跳转到正文
buybitcoinsmart

术语表 /交易与手续费

TRUC 交易

又称 TRUC transaction、v3 交易、Topologically restricted until confirmation。

TRUC 交易是什么?
TRUC 交易放弃了连续花费未确认交易的自由,以换取可靠的手续费提升:它声明版本3,并且最多只接受一笔未确认的父交易和一笔未确认的子交易。

规定于 BIP-431。

TRUC 是一项交易中继策略,发送方通过将交易版本设为3来选择启用,它不是共识规则。Bitcoin Core 28.0依据 BIP 431将其列为标准交易,该提案将该交易上限设为10,000虚拟字节,其子交易上限设为1,000。您不会自己设置它:BIP 431将该策略面向闪电网络等协议,这类协议的承诺交易是预先签名的,并在广播时才提高手续费。

运作方式

TRUC 是附加在普通交易上的六条规则,发送方只需将版本字段设为3,便可同时启用这六条规则。

规则一使该交易可被替换,无论它是否按旧的 BIP125 方式发出信号,而同一版本默认采用完整的 replace-by-fee,这一区别本来就已失去意义。规则二使这一选择具有延续性:TRUC 交易的每一个未确认祖先交易都必须是 TRUC 交易,未确认 TRUC 交易的每一个后代交易也必须是 TRUC 交易,因此任何人都无法通过附加一个普通子交易来绕过限制,但已确认的币在两个方向上都不受此限。规则三是该名称的由来,即只允许一个未确认祖先交易和一个未确认后代交易,且没有 CPFP 例外。规则四将该交易上限设为10,000虚拟字节,而其他所有交易的标准性上限为100,000。规则五将子交易上限设为1,000虚拟字节,即使使用 taproot 输入,这仍可容纳15个输入和2个输出。规则六允许该交易的手续费低于节点的最低中继手续费,包括为零,只要其所在的交易包支付足够的手续费。

这一切的原因是交易钉住(pinning):他人的垃圾交易使您的交易无法提高手续费。替换规则要求替换交易支付的绝对手续费高于其所取代的全部交易,并直接拒绝任何会驱逐超过100笔交易的替换。BIP 431给出了这种滥用有多容易的数字。如果您想替换自己的五笔交易,而对手方在每笔交易上都附加了21个后代交易,那么无论您支付多少,您的替换都会仅因数量而被拒绝。谁能在您的未确认交易上附加廉价的后代交易,谁就在为您自己的手续费提升定价。

1,000虚拟字节的子交易上限正是对此的直接回应。在默认的后代交易限制下,用于提高手续费的子交易本身可达100,000虚拟字节,按每虚拟字节一聪计算,替换交易在凭自身条件竞争之前,必须先覆盖100,000聪或更多。将子交易上限设为1,000,可将上界降低为原来的百分之一。

另有两项机制与这些规则配套。兄弟交易驱逐使节点在遇到第二个手续费更高的子交易时,可依照替换规则驱逐第一个子交易,而不是拒绝新来者,且由于只可能存在一个子交易,无需猜测应舍弃哪一个。交易包 replace-by-fee 由 Bitcoin Core 28.0针对大小为两笔的相连交易组启用,它因此可用于 TRUC 交易,因为这种形态是有保证的。

购买比特币时为何重要

TRUC 只在一个时刻与普通比特币持有者发生关联,即闪电网络通道必须在链上关闭,而手续费需要在交易签名之后提高时。

它并不影响购买。在本站的41篇钱包评测中,那些让您的手机运行真正闪电网络节点的钱包,正是该策略不再只是细枝末节之处。来自 ACINQ 的 Phoenix 在本站评分为4.0,运行一个由12个单词的助记词保护的独立节点,ACINQ 记载的应急途径是强制关闭通道,等待约720个区块,即约五天,然后使用 Electrum 等工具在链上找回资金。该关闭会广播一笔承诺交易,BIP 431指出它依赖 CPFP 例外来避免被钉住。一笔在超时到期前无法被推入区块的承诺交易,并不会只是停在那里:它原本所保护的资金会变为对方可以索取。

托管方式会转移风险敞口,这正是本站各条目之间的区别。评分为4.6的 Strike 允许您通过闪电网络提币,且不对转账另收手续费,但余额在应用内期间由托管方保管,因此通道及其关闭都属于 Strike。评分为3.8的 Muun 将链上和闪电网络显示为一个余额,并通过潜水艇互换(submarine swap)在两者之间转移。您实际持有的通道越多,可靠地提高手续费就越成为您自己的问题,而 TRUC 正是为在运行它的节点范围内实现这一点而设计的策略。

Phoenix 强制关闭:被钉住与未被钉住

Phoenix 的强制关闭是观察 TRUC 发挥作用的最清楚的场景,因为被广播的交易是在没有人知道手续费市场将是什么样子之前很久就已签名的。

先看旧的安排。您的承诺交易是一笔不声明版本3的普通交易,与一笔为两者支付手续费的子交易一同广播。您的对手方持有第二个锚点输出,它的存在是为了让任何一方都能提高手续费,他们用它附加一笔自己的子交易,该交易为100,000虚拟字节,每虚拟字节支付一聪。他们的做法并无任何无效之处。CPFP 例外让您能在后代交易限制之外多放入一个子交易,但替换规则并不在意这一点:要取代对方的子交易,就得先支付它已带有的100,000聪手续费,之后您自己的手续费才有意义,而该例外恰好只允许多一个子交易,所以一旦有第三方共用该交易,它就失效了。您的关闭交易被一笔作者几乎不花成本的垃圾交易钉住。

现在把两笔交易都设为版本3。承诺交易可以完全不支付手续费,因为只要交易包达标,规则六就接受它低于中继下限,这正是提前数月签名的交易所需要的。只允许存在一个子交易,且不得超过1,000虚拟字节,因此别人能让您承担的最坏费用只有原来的百分之一。如果对手方先放入了他们的子交易,您的子交易通过支付更多手续费将其驱逐。并且这一对交易作为整体传播,因为 Bitcoin Core 28.0在同一版本中推出了一个父交易一个子交易的交易包中继,允许 TRUC 父交易的手续费率低于最低中继手续费率。

需如实说明的是采用程度。BIP 431指出,防钉住的好处仅限于单个节点的内存池,您的交易有多安全取决于网络中有多少节点运行该策略。版本3在 Bitcoin Core 28.0之前属于非标准交易,因此仍在旧版本的节点根本不会中继它,发行说明称这种新的交易包中继有限,且在对抗性条件下尚不可靠。

TRUC 交易 vs 交易版本号

交易版本号是每一笔比特币交易都带有的字段,而 TRUC 是该字段的某一个取值现在所对应的一整套规则。

将版本设为3是发送方选择启用的方式,但规则并不在该字段之中。它只是一个标志,所有要紧的事情都发生在节点的策略代码里,这就是升级后的节点会中继旧节点拒绝的交易的原因。共识对此从未表态。BIP 431记载,版本3此前为非标准交易,且与早先的用法没有已知冲突,因此 Bitcoin Core 28.0中改变的是可中继性,而不是有效性。

TRUC 交易 vs cluster mempool

Cluster mempool 对节点内存池中的每一笔交易施加拓扑限制,而 TRUC 仅对主动要求的交易施加更严格得多的限制。

两者是相关的工作而非竞争关系,BIP 431对此直接说明:cluster mempool 对所有交易(不仅是选择启用的交易)限制簇的大小,其限制远不如 TRUC 的限制严格。它也留下了 BIP 431所指出的缺口:cluster mempool 无法通过绝对手续费或冲突数量来解决钉住问题,并且与旧版闪电网络通道设计所依赖的 CPFP 例外不兼容。TRUC、兄弟交易驱逐和交易包替换,是为依赖该例外的协议提供的路径。

请勿混淆

常见问题

使用 TRUC 交易需要您做什么吗?

不需要,由您的钱包决定。版本字段由软件设置,而 BIP 431是为合约协议编写的,这类协议会预先签名交易并在广播时再添加手续费,其中以闪电网络为主,因此从交易所或硬件钱包发出的普通链上付款不会选择采用 TRUC。

版本3交易与 TRUC 交易是同一回事吗?

是的,这是同一事物的两个名称。将版本字段设置为3是 BIP 431定义的唯一选择采用 TRUC 规则的方式,因此较早的相关文章将其称为 v3 transaction policy。

TRUC 交易真的可以完全不支付手续费吗?

可以,但仅限于交易包内。BIP 431允许 TRUC 交易的手续费低于节点的最低转发手续费,前提是它与一笔子交易一并评估,且该子交易的手续费足以覆盖两者,为此 Bitcoin Core 28.0允许 TRUC 父交易的费率低于最低转发费率。

接着阅读

相关术语

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

阅读本页英文版