资讯动态

Bitcoin Core 31.0 特性深度解析:Cluster Mempool 重构、私有广播、新 RPC 与节点升级实践指南

发布时间:2026/9/8 20:18:48 来源:尧图企业网站定制
Bitcoin Core 31.0 特性深度解析Cluster Mempool 重构、私有广播、新 RPC 与节点升级实践指南【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin本指南以 doc/release-notes/release-notes-31.0.md 为骨架全面解读 Bitcoin Core 31.0 的技术变革并结合仓库源码与配置深入讲解。读完本文将掌握31.0 相对上一大版本的兼容性与升级要点、集群内存池cluster mempool的替代性新限制与新 RPC、面向隐私的sendrawtransaction私有广播机制以及全部配置参数、RPC、REST API、构建与 IPC 接口变更的实战含义可用于评估与规划节点与钱包的升级。版本概况EOL 边界与升级路径Bitcoin Core 31.0 是一个新的大版本major version发布。本次发布带来了新特性、若干 bug 修复、性能改进以及更新的翻译。安全与维护节奏上本版本有着明确的版本边界随着 31.0 发布28.x 及更早的版本进入生命周期结束End of LifeEOL不再接收更新。依据安全策略将在发布两周后披露29.0 中修复的中/高严重度漏洞共 1 个31.0 自身修复的低严重度漏洞数量为 0。升级操作要点升级前应先完全关闭旧版本节点等待其彻底退出某些情况下可能耗时数分钟再执行安装或替换二进制平台升级方式Windows运行安装程序installermacOS覆盖/Applications/Bitcoin-QtLinux覆盖bitcoind/bitcoin-qt可执行文件从已经 EOL 的版本直接升级是可行的但若数据目录需要迁移启动可能会耗时较长。旧版本的钱包格式仍被一般性地支持。兼容性说明Bitcoin Core 31.0 官方支持并持续测试的操作系统版本为含更新版本Linux Kernel 3.17 及以上macOS 14 及以上Windows 10version 1903及以上其他类 Unix 系统通常也能运行但官方测试频率较低官方不建议在不支持的平台上运行节点。核心变革一Mempool 以集群设计重写31.0 最重大的底层架构变化是内存池被以全新设计重写——集群内存池cluster mempool。其目标是让构建区块模板、驱逐交易、中继交易与校验替换交易RBF时能做出更优决策。对普通用户而言大部分变化是透明的但存在下列需要关注的行为变更。旧的祖先/后代限制被集群限制取代此前内存池通过-limitancestorcount、-limitdescendantcount等对单个交易的祖先/后代ancestor/descendant数量与体积加以限制。31.0 起不再强制祖先或后代的数量/体积限制取而代之的是针对内存池中**连通分量connected component即集群cluster**的两项默认策略限制每个集群最多 64 笔交易每个集群虚拟体积不超过 101 kB约101,000 vB源码常数见下文判定规则只要两笔交易在内存池中通过任意组合的父子关系直接或间接相连即被视为同一集群。上述两项限制可经由命令行参数覆盖详细帮助见调试帮助-help-debug。从源码看src/txgraph.h 定义了硬上限MAX_CLUSTER_COUNT_LIMIT{64}而 src/node/mempool_args.cpp 中将配置项映射为内存池限制-limitclustercountn每集群最大交易数不可超过MAX_CLUSTER_COUNT_LIMIT即 64-limitclustersizen每集群体积上限单位为 kB内部会乘以 1000 换算为虚拟字节vbytes后再做比较。值得一提CPFP Carveout为已触顶后代限制的包额外放行一个恰有单一祖先、体积不超过 10 kB 的子交易的特殊通道已从内存池逻辑中移除且没有任何机制能绕过集群数量限制。官方预期需要类似能力的智能合约用例应转向使用 TRUCv3 交易与兄弟驱逐sibling eviction方案。集群内按chunk费率排序驱动出块/驱逐/中继在集群内存池设计中交易在内存池内按其预期被挖出的费率排序。这个费率并非单笔交易自身的费率而是考虑整组/整块chunk交易例如某父交易连同其子交易或更复杂的交易子集会被一并打包时的综合费率。该排序被以下算法统一使用构建区块模板时的交易选择内存池满时的驱逐eviction向对等节点通告交易relay announcement的先后次序。RBF用费率图严格单调改进取代旧规则替换交易replace-by-fee的校验逻辑被更新为只有替换后整个内存池的费率图feerate diagram严格优于替换前替换才被接受。这消除了此前 RBF 规则下可能出现的替换使内存池变差的所有已知情形。对于单独成簇的单例交易只要替换交易比原交易费率更高且手续费更高即满足条件更复杂的多交易场景则要求整体费率图提升。新增 mempool RPCgetmempoolcluster与getmempoolfeeratediagram为配合新设计新增两个 RPC注册于 src/rpc/mempool.cpp 与 src/rpc/mempool.cppgetmempoolcluster txid给定内存池中的一笔交易的 txid返回与该交易同处一个集群的全部交易集合、这些交易的排序以及按 chunk 的分组情况getmempoolfeeratediagram返回整个内存池的费率图即一系列{weight, fee}累计数据点。实测命令示例bitcoin-cli getmempoolcluster txid bitcoin-cli getmempoolfeeratediagram调用示例请参见源码中的HelpExampleCli。此外getmempoolentry的输出新增了 chunk 体积与 chunk 手续费字段chunk size、chunk fees便于细粒度审视单笔交易在其 chunk 中的位置。术语与深入材料集群内存池引入了一整套新术语与替换规则官方在仓库内沉淀了配套设计文档是理解本文架构变更的必读材料doc/policy/mempool-terminology.md集群、chunk、线性化linearization等术语定义doc/policy/mempool-replacements.md替换RBF规则在新设计下的完整描述。核心变革二sendrawtransaction私有广播private broadcast常规情况下本地交易会向所有启用了交易中继的连接节点广播。31.0 为sendrawtransactionRPC 增加了一项新行为仅通过 Tor 或 I2P 网络广播由新增布尔选项-privatebroadcast开启。该特性从两方面提升交易发起者的隐私接收方永远不会得知发起者的IP 地址进而地理位置发起者发出的两笔互不相关的交易无法被关联——因为每笔交易都会使用一条独立的连接进行广播。相关 RPCgetprivatebroadcastinfo与abortprivatebroadcast配合新增两个 RPC 用于查看与控制私有广播队列getprivatebroadcastinfo报告当前正在被私有广播的交易abortprivatebroadcast从私有广播队列中移除匹配的交易。源码实现佐证该机制的核心类PrivateBroadcast声明在 src/private_broadcast.h实现在 src/private_broadcast.cpp并在 src/net_processing.cpp、src/init.cpp 等中接入。其内部常量默认值揭示了设计边界INITIAL_STALE_DURATION 5min交易若在该时长内未发给任何节点视为过期需要重新广播STALE_DURATION 1min广播后若在该时长内未从网络收到该交易视为过期以重新广播MAX_TRANSACTIONS 10000同时跟踪的最大交易数超出的新增会被拒绝MAX_SEND_ATTEMPTS 1000单笔交易的最大发送尝试次数。从 src/private_broadcast.h 的类注释可见其设计约束同一节点不得被发送超过一笔私有广播交易否则会造成隐私泄露——这正是两笔交易不可关联这一特性的直接实现手段。测试覆盖见 src/test/private_broadcast_tests.cpp 与 src/test/fuzz/p2p_private_broadcast.cpp。P2P 与网络其他变化一父一子1p1c包中继对低费率父交易开放参与一父一子包中继one-parent-one-child package relay的交易其父交易费率现在可以低于-minrelaytxfee甚至可以为零费率。这是 28.0 相关改动仅限 TRUC/v3 交易的扩展现也覆盖非 TRUC 交易组成的包。需要注意包中的子交易一般可以拥有额外的未确认父交易但这些父交易必须已在内存池中新包才能被中继。内置 asmap 数据首次随版本发布31.0 首次在发行物中内嵌了 asmap 数据使-asmap功能无需任何外部文件即可使用。要点内嵌地图构建于 2026-03-05尽管数据已内置该选项仍默认关闭用户仍需显式指定-asmap或-asmap1才会在 netgroup 分桶netgroup bucketing中使用对等节点的 ASNISP/托管商标识符从而提升对等节点集合的多样性。-asmap行为变化务必注意指定-asmap或-asmap1现在加载的是内嵌 asmap 数据而不再是外部文件。在旧版本中-asmap不带文件名会尝试加载名为ip_asn.map的数据文件。31.0 起加载外部 asmap 文件必须显式给出文件名形如bitcoind -asmapip_asn.map # 显式外部文件 bitcoind -asmap1 # 内嵌数据RPC 更新gettxspendingprevout新增两个可选参数gettxspendingprevout新增两个可选参数mempool_only为true时即使txospenderindex可用也只将扫描范围限制在内存池return_spending_tx为true时返回完整的消费交易full spending tx。此外当txospenderindex可用且发现已确认的消费交易时将返回该交易的区块哈希block hash。getpeerinfo弃用startingheight字段getpeerinfo不再返回startingheight字段除非显式设置bitcoind -deprecatedrpcstartingheight该字段将在下一个大版本中完全移除。getblock新增coinbase_tx对象getblockRPC 在 verbosity 1、2、3 级别下均返回coinbase_tx对象其字段为version、locktime、sequence、coinbase与witness。这使调用方无需在 verbosity 2 拉取完整交易数据即可高效查询 coinbase 交易属性。对应序列化实现在 src/rpc/blockchain.cppcoinbaseTxToJSON其中coinbase是首笔输入scriptSig的十六进制、witness为币基见证堆栈若存在。REST API 新增块字节区间接口新增 REST 端点用于高效抓取区块BLOCK-HASH中指定字节范围的数据/rest/blockpart/BLOCK-HASH.bin|hex?offsetOFFSETsizeSIZE服务端路由注册位于 src/rest.cpp处理器为rest_block_part。适用于无需整块即可读取任意切片的场景如冷启动、归档数据加工。注意该端点不支持 JSON 响应。构建系统编译器版本下限提升为保证 C20 特性支持与工具链基线31.0 提高了最低支持的编译器版本Clang最低 17.0GCC最低 12.1。构建新版本前请确认工具链满足上述要求。配置Settings变更汇总已删除项此前已弃用配置/RPC说明替代方案-paytxfee启动选项自 30.0 弃用后于 31.0 删除依赖费率估算或使用fee_rate参数按笔指定settxfeeRPC同上同上-maxorphantx自 30.0 起无效果直接省略静态费率设置容易导致多付或少付手续费。若需精确控制单笔手续费请改在 RPC 中传fee_rate参数涉及的 RPC 包括fundrawtransaction、sendtoaddress、send、sendall、sendmany。行为变化-asmap/-asmap1加载内嵌 asmap见上文-logsourcelocations开启后日志只输出函数名而非完整函数签名减少日志体积tor网络标识被移除tor已不再作为网络规格名使用自 0.17.0 起即以onion取代它请改用onion-dbcache默认值提升详见下节。-dbcache默认值升至 1024 MiB有条件默认-dbcache值由450 MiB 提升到 1024 MiB但仅在检测到系统内存不低于 4096 MiB时生效。这带来性能提升同时增加内存占用。⚠️ 容器等受限环境需特别注意在部分系统例如容器中运行时检测到的内存可能超过实际可用内存从而引发内存不足OOM。如需维持旧行为显式设置bitcoind -dbcache450低内存系统的进一步优化指引见 doc/reduce-memory.md。新增设置-txospenderindex新增-txospenderindex启用交易输出花费者索引transaction output spender index。当索引存在时gettxspendingprevout若在内存池中找不到花费交易将扫描该索引。新增设置-privatebroadcast-privatebroadcast为sendrawtransaction开启私有广播行为详见前文。GUI 变化Qt 版本升级到 Qt 6.8出于安全与隐私考虑createwallet、createwalletdescriptor、migratewallet命令从控制台历史中过滤避免敏感命令残留在历史记录中恢复钱包Restore Wallet对话框在恢复的钱包名为空时会显示错误提示。费率估算最小费率桶降至 0.1 sat/vB费率估算器的最小费率桶从1 sat/vB 下调至 0.1 sat/vB与该节点默认的minrelaytxfee保持一致。含义是对于给定的确认目标如果低于 1 sat/vB 的费率桶是有足够数据的最小追踪桶那么估算返回的费率将取该桶的平均值。重启注意应用该改动后此前保存于fee_estimates.dat的估算结果将失效费率估算器会从零开始追踪全新统计。IPC 接口进程间挖矿接口变更31.0 对 IPC 挖矿接口capnp做了较大更新使用 multiprocess 架构对接挖矿客户端的开发者必须同步更新IPC 挖矿接口要求客户端使用最新mining.capnpschema基于旧 schema 构建的客户端在调用Init.makeMining时会失败并收到旧挖矿接口不再支持的 RPC 错误。必须升级到最新 schema 并重新生成绑定Mining.createNewBlock现在具备cooldown 行为默认开启会等待 IBD 完成且链尖追上最新进度通常可避免启动阶段模板洪泛但不保证绝对不发生新增Mining.interrupt()可中断Mining.waitTipChanged与Mining.createNewBlockMining.createNewBlock与Mining.checkBlock现在要求context参数Mining.waitTipChanged若客户端省略timeout则使用默认超时实际为无穷 /maxDoubleBlockTemplate.getCoinbaseTx()现在返回结构化CoinbaseTx而非原始字节移除了BlockTemplate.getCoinbaseCommitment()与BlockTemplate.getWitnessCommitmentIndex()挖矿相关选项结构体如BlockCreateOptions、BlockWaitOptions、BlockCheckOptions的Capn Proto 默认值已更新与对应 C 默认值保持一致。升级前的核对清单综合上文计划升级到 31.0 的运营者可按下列清单自查系统内存充足性确认是否触发-dbcache1024新默认值RAM ≥ 4096 MiB容器环境务必评估内存上限必要时回退-dbcache450旧版本≤ 28.x不再接收更新注意版本边界若依赖静态费率或settxfee改用每笔fee_rate参数或费率估算若使用外部 asmap改为显式-asmap文件名或接受内嵌数据的-asmap若为挖矿客户端同步升级到最新mining.capnpschema 并重新生成绑定适配context参数与新的默认超时行为若为 IPC/multiprocess 部署或 REST 切片读取需求可立即采用blockpart端点与新挖矿接口能力重启后费率估算将重置fee_estimates.dat需重建统计属预期行为。结语与延伸阅读Bitcoin Core 31.0 以集群内存池重构为轴心将内存池的排序、驱逐、中继与 RBF 校验统一到费率图 / chunk模型之下同时在隐私私有广播、内嵌 asmap、可观测性getmempoolcluster、getmempoolfeeratediagram、coinbase_tx与运维效率blockpart字节切片、txospenderindex上均有可落地的改进。建议运维者与协议开发者继续深入仓库内的官方设计文档以掌握术语与机制细节doc/release-notes/release-notes-31.0.md本文依据的原始版本说明doc/policy/mempool-terminology.md 与 doc/policy/mempool-replacements.md集群内存池术语与替换规则doc/reduce-memory.md低内存场景的-dbcache等参数调优源码参考src/txgraph.h、src/node/mempool_args.cpp、src/rpc/mempool.cpp、src/private_broadcast.h、src/rpc/blockchain.cpp、src/rest.cpp。【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价