核心问题:Cluster Mempool,问题分块处理更容易

  • bitcoinm
  • 发布于 2026-02-21 20:21
  • 阅读 19

这篇文章深入探讨了比特币核心客户端中Cluster Mempool的新架构。它解释了当前内存池在交易排序和管理方面的局限性,特别是在费用估算、交易替换和二层协议安全性方面。文章介绍了Cluster Mempool如何通过将相关交易组织成集群和块来解决这些问题,从而提高效率、简化逻辑并更好地与矿工激励对齐。

来自核心问题:审视集群内存池,一种重构节点内存池组织和管理方式的方法。

Shinobi

作者:Shinobi

集群内存池,问题分块处理更容易

内存池是你的节点需要跟踪的一大批待处理交易,原因有很多:费用估算、交易替换验证以及(如果你是矿工)区块构建。

对于节点的一个单一功能来说,这需要服务很多不同的目标。Bitcoin Core 直到 30.0 版本,通过两种不同的方式组织内存池以帮助实现这些功能,这两种方式都从任意给定交易的相对角度出发:向前看交易及其子交易的组合费用率(descendant feerate,后代费用率),以及向后看交易及其父交易的组合费用率(ancestor feerate,祖先费用率)。

这些用于在内存池满时决定从内存池中驱逐哪些交易,以及在构建新区块模板时首先包含哪些交易。

我的内存池是如何管理的?

当矿工决定是否将交易包含在他们的区块中时,他们的节点会查看该交易,以及任何必须先确认才能在区块中有效的祖先交易,并考虑它们作为一个整体支付的单独费用,查看所有这些交易的平均每字节费用率。如果这组交易在费用上超过其他交易的同时符合区块大小限制,它将被包含在下一个区块中。每个交易都如此处理。

当你的节点决定在内存池满时驱逐哪些交易时,它会查看每个交易及其所有子交易,如果内存池已经充满了支付更高费用率的交易(及其后代),则会驱逐该交易及其所有子交易。

查看上面的交易示例图,费用率在括号中显示为(祖先费用率,后代费用率)。矿工查看交易 E 时,很可能会将其包含在下一个区块中,这是一个支付了非常高费用的小型交易,只有一个小型祖先交易。然而,如果节点的内存池正在填满,它会查看交易 A,该交易有两个巨大的子交易,支付相对较低的费用,很可能会将其驱逐,或者如果它刚收到,就不接受并保留它。

这两种排名或排序完全相互矛盾。内存池应该可靠地传播矿工将要挖出的交易,用户应该相信他们本地的内存池能够准确预测矿工将挖出什么。

内存池以这种方式运行对于以下方面很重要:

  • 挖矿去中心化:让所有矿工都获得最有利可图的交易集
  • 用户可靠性:准确可靠的费用估算和交易确认时间
  • 第二层安全性:可靠准确地执行第二层协议的链上强制交易

内存池当前的行为与挖矿激励的现实不完全一致,这造成了盲点,可能对第二层安全性造成问题,因为它制造了交易是否会到达矿工的不确定性,并导致了非公开广播渠道给矿工的压力,这可能使第一个问题恶化。

当涉及替换未确认交易时,这个问题尤为突出,无论是简单地激励矿工更快地包含替换交易,还是作为链上强制执行的第二层协议的一部分。

根据现有行为进行的替换,其可预测性取决于你所陷入的交易网络的形状和大小。在简单的费用提升(fee-bumping)情况下,这可能导致交易无法传播和替换,即使挖出替换交易对矿工来说更好。

在第二层协议的背景下,目前的逻辑允许参与者可能导致必要的祖先交易被从内存池中驱逐,或者由于恶意参与者创建的子交易,或者必要的祖先交易被驱逐,使得另一个参与者无法在当前规则下向内存池提交必要的子交易。

所有这些问题都源于这些不一致的包含和驱逐排名以及它们造成的激励错位。拥有一个单一的全局排名将解决这些问题,但对于每个新交易全局重新排序整个内存池是不切实际的。

这都只是一个图

相互依赖的交易是一个图,或者一系列有向的“路径”。当一个交易花费过去由另一个交易创建的输出时,它就与那个过去的交易相关联。当它额外花费由第二个过去的交易创建的输出时,它将这两个历史交易连接在一起。

当未确认时,这样的交易链必须首先确认较早的交易,才能使较晚的交易有效。毕竟,你不能花费尚未创建的输出。

这是理解内存池的一个重要概念,它明确地按方向排序。

这都只是一个图。

块构成集群构成内存池

在集群内存池中,集群的概念是一组相互直接关联的未确认交易,即花费集群中其他交易创建的输出,反之亦然。这成为了新内存池架构的基本单元。分析和排序整个内存池是一项不切实际的任务,但分析和排序集群则更易于管理。

每个集群被分解成(chunks),即集群中的一小组交易,然后按照每字节费用率从高到低的顺序排序,同时尊重方向依赖性。例如,假设集群 (A) 中的块按费用率从高到低依次为:[A,D]、[B,E]、[C,F]、[G, J],以及最后的 [I, H]。

这允许预先排序所有这些块和集群,并在过程中更有效地排序整个内存池。

矿工现在可以简单地从每个集群中抓取费用率最高的块并将其放入他们的模板中;如果仍有空间,他们可以向下选择次高费用率的块,持续进行,直到区块大致填满,只需要找出最后几个可以放入的交易。这大致是假设可以访问所有可用交易时的最优区块模板构建方法。

当节点的内存池变满时,它们可以简单地从每个集群中抓取费用率最低的块,并开始将它们从内存池中驱逐,直到不超过配置的限制。如果这还不够,它会继续处理次低费用率的块,以此类推,直到达到其内存池限制。这样做可以消除与挖矿激励不一致的奇怪边缘情况。

替换逻辑也大大简化。将集群 (A) 与集群 (B) 进行比较,其中交易 K 已经替换了 G、I、J 和 H。唯一需要满足的标准是,新块 [K] 的块费用率必须高于 [G, J] 和 [I, H],[K] 支付的总费用必须多于 [G, J, I, H],并且 K 不能超过它正在替换的交易数量的上限。

在集群范式中,所有这些不同的用途都相互协调一致。

新内存池

这种新架构允许我们简化交易组限制,消除了之前内存池中交易可以拥有的未确认祖先数量的限制,并将其替换为每个集群 64 个交易和 101 kvB 的全局集群限制。

这个限制是必要的,以保持预排序集群及其块的计算成本足够低,从而使节点能够持续地实际执行。

这是集群内存池真正的核心洞察。通过保持块和集群相对较小,你可以同时实现廉价地构建最优区块模板、简化交易替换逻辑(费用提升)从而提高第二层安全性,并修复驱逐逻辑,所有这些都一举完成。

不再需要昂贵而缓慢的即时模板构建计算,也不再出现费用提升中不可预测的行为。通过修复内存池在不同情况下管理交易组织方式中的激励错位,内存池对每个人都更好地发挥作用。

集群内存池是一个耗时多年的项目,它将对确保所有矿工都能获得有利可图的区块模板、第二层协议拥有健全且可预测的内存池行为以供构建,以及比特币能够继续作为去中心化货币系统运行产生实质性影响。

对于那些有兴趣深入了解集群内存池如何实现和内部运作细节的人,这里有两个 Delving Bitcoin 讨论串你可以阅读:

高级实现概述(附设计原理):https://delvingbitcoin.org/t/an-overview-of-the-cluster-mempool-proposal/393

集群内存池费用率图表工作原理:https://delvingbitcoin.org/t/mempool-incentive-compatibility/553

[不要错过拥有The Core Issue的机会](https://store.bitcoinmagazine.com/products/bitcoin-magazine-annual-subscription) — 收录了许多核心开发者撰写的文章,解释了他们自己正在从事的项目!

_本文是《比特币杂志》最新印刷版 The Core Issue 的卷首语。我们在此分享,作为对本期完整内容所探讨思想的抢先一瞥。_

[1] https://github.com/bitcoin/bitcoin/issues/27677

[2] https://github.com/bitcoin/bitcoin/pull/33629

  • 原文链接: bitcoinmagazine.com/prin...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
bitcoinm
bitcoinm
江湖只有他的大名,没有他的介绍。