据 Bitcoin Core 项目 GitHub 发布信息,开发者已于9月14日标记 v32.0rc1,提交为 d0231bb,并带有已验证维护者签名,标记时间为 UTC 12:58。该版本进入最终候选测试阶段,当前计划仍以10月10日作为 v32.0 正式版标记目标。草案发行说明显示,本次更新聚焦费率估算、区块验证性能、钱包接口和安全修复,未列出对比特币共识规则的变更。
项目进度:进入 RC 测试,功能冻结已完成
开发者于8月20日进入功能冻结,9月14日将 32.x 分支从主开发分支拆分,版本33开发另行恢复。9月15日,项目开启专门的 RC 反馈 issue;截至9月16日,尚未发布最终 v32.0 二进制文件。
费率估算:新增内存池估算器,默认取较低值
最显眼的变化之一涉及 estimatesmartfee,即钱包和应用程序用于计算交易费用的 RPC。Bitcoin Core 32 在现有基于历史区块确认行为的估算器之外,新增一个基于节点内存池中当前待确认交易的独立估算器。该内存池估算器会根据当前待处理交易状况生成经济型和保守型估算。Core 会在使用前检查近期区块活动,如果内存池过于稀疏或不健康,则可拒绝该估算。当两套系统都返回有效结果时,estimatesmartfee 默认组合模式返回较低费用估算,这意味着当前内存池状况可以下调建议,但不能通过组合默认模式将既有区块策略估算推高。应用仍可选择旧方法。新增 fee_rate_estimator 选项,允许用户请求 block_policy、mempool_policy 或组合默认行为。钱包费用计算将使用组合默认估算器,更高 verbosity 级别可暴露内存池健康统计。
区块验证:并行 prevout 预取提速
版本32改变了节点在连接区块时检索交易数据的方式,尤其是所需信息必须从存储读取时。软件可以在区块验证继续进行的同时,通过多个工作线程从链状态数据库预取先前交易输出,也就是 prevouts。默认启用8个预取线程。运营者可将该设置提高至16,或通过 -prevoutfetchthreads=n 将其设为0以禁用并行获取。prevout 用于识别交易输入所花费的币,节点需要据此验证输入存在、尚未被花费并满足验证规则。该改进旨在减少磁盘等待,但实际效果会因硬件、缓存行为和节点配置而异。
安全修复:钱包通知与 HTTP 服务器缺陷
Bitcoin Core 32修复了一个影响非 Windows 系统的钱包通知缺陷,该缺陷仅在狭窄条件下触发。草案说明称,当节点配置 -walletnotify 时,拥有创建钱包权限的已认证 RPC 用户可构造包含特殊替换字符的钱包名称。在这些条件下,该名称可能导致任意命令以 Bitcoin Core 进程权限执行。版本32在通知占位符替换期间将钱包名称视为字面文本,并拒绝某些包含 . 或 .. 路径元素的相对路径名称。
第二个问题出现在对 Bitcoin Core 重写版 HTTP 服务器的审查中,该服务器在版本32中替代 libevent。开发者 Matthew Zipkin 在审计使用 Moonshot AI 的 Kimi K3 模型发现内存耗尽路径后,提交了拉取请求 #36123。进一步测试发现,16个未认证 REST 连接在约一分钟内将某个测试进程的内存从46 MB推高至约3 GB。修订修复后,同一测试在90秒内内存使用增加约3 MB,而补丁前为3.2 GB。该修复已于9月5日合并,早于 v32.0rc1 标记。
PSBT v2 默认化与钱包工具更新
四个与部分签名比特币交易配合使用的命令将默认生成 PSBT 版本2:createpsbt、walletcreatepsbt、converttopsbt 和 psbtbumpfee。开发者新增可选 psbt_version 参数,以便应用程序明确请求其他受支持版本。PSBT 允许钱包、应用程序和硬件签名设备在广播前交换交易信息,假定旧格式的软件可能需要进行测试。
钱包工具还获得新命令。exportwatchonlywallet 可创建包含公共描述符、交易历史和地址簿数据但不含私钥的描述符钱包文件。derivehdkey 允许钱包通过包含至少一个硬化步骤的路径派生扩展公钥或私钥,而 addhdkey 允许添加 BIP32 扩展密钥而不立即生成输出脚本。PrivateBroadcast 还收到进一步 RPC 和交易中继变更,具体见草案发行说明。
后续安排
当前 Bitcoin Core 日程仍将10月10日列为标记 v32.0 的目标日期。9月15日开启的 RC 测试反馈线程仍保持活跃,开发者要求测试者若发现实际缺陷,应在最终发布前另行提交 issue。
