比特币节点把内存池拆成一簇一簇:31.0 版集群设计改变了什么 图 1
比特币节点把内存池拆成一簇一簇:31.0 版集群设计改变了什么 · 图 1

内存池为什么要分簇

比特币节点内存里有一份未确认交易的暂存区,也就是内存池。多年来它的组织方式相当朴素:每笔交易独立存放,用祖先费用率、后代数量与体积限制这组规则来约束交易之间的依赖关系。这套机制运转了十年,但工程师们清楚它的软肋——当一个新交易到达、或者做驱逐决策时,节点难以精确推理哪些交易组合真正互相牵连,最坏情况下会驱逐掉整个池子里对矿工最有价值的那部分。

集群设计(cluster mempool)的思路是换一种数据结构:凡是通过父子关系直接或间接相连的交易,划进同一个簇(cluster),簇与簇之间彼此独立。既然一个交易只能影响自己所在的簇,节点就可以把每个簇单独排序、预先算好取用顺序,让整个内存池始终处于可快速推理的状态。

这次改造在 Bitcoin Core 主仓库以编号 33629 的拉取请求于 2025 年 11 月合入主干,随 v31.0 版本在 2026 年 4 月发布交付。该版发行说明写明:内存池被按父子连通关系切成簇,默认限制为每簇至多 64 笔交易、至多约 101 千伏字节,参数可经调试命令行覆盖。

比特币节点把内存池拆成一簇一簇:31.0 版集群设计改变了什么 图 2
比特币节点把内存池拆成一簇一簇:31.0 版集群设计改变了什么 · 图 2

与三条老规则的告别

集群设计不只是换存储结构,它顺手退役了三个老机制。

一是祖先与后代限制。过去那组按交易血缘设的数量与体积上限,被按簇设的两条限制整体替代。规则从每条交易身上长出小筐,变成每个连通分量一个筐,语义反而更清晰。二是 CPFP carve out。2019 年为闪电网络开户场景开的口子——允许特定结构在后代数量上稍微超限——在按簇限制的宇宙里逻辑上不成立,被整体移除,闪电场景改由 TRUC 交易等机制承担。三是替换规则的判定方式。新的逐簇比较要求内存池整体对矿工严格变得更优才接受替换,对独立单笔交易则回到更高的费用与费率这个朴素判据,这让费用提升(RBF)在经济激励上更平滑。

用户侧看得见的变化

普通用户最可能感知的是加急行为的一致性变好:父交易费率低拖累子交易的场景仍受簇内血缘影响,但节点做接收与驱逐决策时不再频繁做出 Miner 视角下明显次优的选择,交易打包的可预测性提升。运维与开发者则多了两个新工具:getmempoolcluster 查看某笔交易所在簇的成员与排序,getmempoolfeeratediagram 看整个内存池的费用率图景。

需要泼的冷水是:这是节点实现层面的政策改造,不是共识规则变化。旧节点与新节点都能在同一批区块上达成共识,区别只在各自内存池装了什么、先转发了谁。

快速问答

问:所有钱包都要为簇做什么适配吗? 答:不需要协议动作。影响体现在费用策略效果上,钱包可以优化但不必须。

问:64 笔的簇限制会卡住大额多输入的交易树吗? 答:常规交易树远远够不到这个规模,它约束的主要是刻意构造的巨型依赖结构。

问:这和 RBF、CPFP 是什么关系? 答:两者仍是你的加急手段,簇设计改变的是节点如何评估这些加急是否值得转发。

常见误区

一是把政策变化读成共识变化,以为不升级客户端的交易会被拒——不会,簇只影响节点内部决策。二是担心簇公开了交易关联从而泄露隐私,簇由已上链即公开的血缘关系构成,节点内部组织方式没有新增泄露面。三是把默认参数当永久常量,数量与体积上限都是可调默认值,未来版本可能再变。

风险提示:本文为节点机制科普,不构成投资建议;升级与参数行为请以当期 Bitcoin Core 发行说明为准。