作者:Gloria Zhao
来源:https://bitcoinops.org/zh/newsletters/2023/06/21/
本文为 Gloria Zhao 在 Optech Newsletter 上编写的 “交易池” 系列周刊的第六篇。
上周的文章介绍了 “规则(policy)”,这是一组在共识规则之外应用的交易验证规则。这些规则不适用于已入块的交易,因此即使节点的规则与其对等节点不同,它仍然可以保持一致性。就像节点操作员可以决定不参与交易中继一样,他们也可以自由选择任何规则,甚至不选择任何规则(将其节点暴露于 DoS 风险之下)。这意味着我们不能假设整个网络的交易池规则完全相同。然而,为了让用户的交易被矿工接收,愿意接纳这笔交易到自己的交易池的节点必须形成一条通向矿工的路径 —— 节点之间的规则差异直接影响交易中继功能。
作为节点规则差异的极端例子,想象一种情况,每个节点操作员选择一个随机的nVersion
,并仅接受具有该nVersion
的交易。由于大多数点对点关系具有不兼容的规则,交易将无法传播到矿工。
另一方面,网络中相同的规则有助于聚合交易池的内容。具有一致交易池的网络可以最顺畅地中继交易,并且也非常适合费用估算和致密区块中继,正如之前的帖子中所提到的。
考虑到交易池验证的复杂性和规则不一致带来的困难,Bitcoin Core 在规则可配置性方面一直保守。虽然用户可以轻松地调整 sigops 计数的方式(bytespersigop
)以及嵌入在OP_RETURN
输出中的数据量限制(datacarriersize
和datacarrier
),但他们不能选择违背 400,000 个重量单位的最大标准重量,也不能应用别的一套与手续费相关的 RBF 规则,除非改变源代码。
Bitcoin Core 的一些规则配置选项存在是为了适应节点操作环境和运行节点的目的的差异。例如,矿工的硬件资源和保持交易池的目的与日常用户在笔记本电脑或树莓派上运行轻量级节点的目的不同。矿工可以选择增加他们的交易池容量(maxmempool
)或过期时间线(mempoolexpiry
)以在高峰期存储低费率交易,然后在流量减少时进行挖掘。提供可视化、存档和网络统计的网站可能运行多个节点,以收集尽可能多的数据,并显示默认的交易池行为。
在单个节点上,交易池容量的选择会影响费用提升工具的可用性。当交易池最低费率因交易提交超过默认交易池大小而上升时,从交易池的“底部”清除的交易和低于此费率的新交易不能再使用CPFP进行费用提升。
另一方面,由于被清除的交易所用的输入不再为交易池中的任何交易所用,此前无法进行的 RBF 手续费追加也许又变成可能了。新交易实际上并没有替换这个节点的交易池中的任何内容,因此不需要考虑通常的 RBF 规则。但是,(因为具有更大的交易池容量而)没有逐出原版交易的节点将新交易视为拟议的替换,并要求其遵守 RBF 规则。如果被清除的交易没有发出 BIP125 可替换信号,或者新交易的费用即使费率很高但不符合 RBF 要求,矿工可能收不到他们的新交易。钱包必须小心处理被清除的交易:交易的输出不能被视为可以花费,但输入同样不能被重复使用。
乍一看,具有更大的交易池容量的节点似乎使 CPFP 更有用、使 RBF 更无用。然而,交易中继受紧急的网络行为的影响,可能不存在接受用户 CPFP 并将其转发到矿工的节点路径。节点通常只在接受交易并将其放入交易池后转发一次,并忽略已存在于其交易池中的交易的通知——存储更多交易的节点在这些交易被重新广播到它们时充当黑洞。除非整个网络增加其交易池容量(这将是更改默认值的迹象),否则用户不应该指望从增加自己的交易池容量中获得太多好处。交易池默认设置的最低费率限制了在高流量时使用 CPFP 的效用。成功地将 CPFP 交易提交到自己增大了的交易池的用户可能无法注意到该交易未传播给其他人。
交易中继网络由动态加入和离开网络的个体节点组成,每个节点必须保护自己不被爆破。因此,交易中继只能尽力而为,我们不能保证每个节点都了解每个未确认的交易。同时,如果节点收敛在一组使得交易池尽可能同质化的中继规则上,那么比特币网络的表现就会最佳。下一篇文章将探讨采取了哪些规则来符合整个网络的利益。