比特币核心32.0版本更新
比特币核心32.0版本已进入最终候选测试阶段,开发者于9月14日标记了v32.0rc1,进一步接近计划于10月10日发布的正式版本。比特币核心项目的官方GitHub发布显示,v32.0rc1的提交号为d0231bb,并于9月14日12:58 UTC由经过验证的维护者签名。该项目的发布计划仍然以10月10日为最终v32.0标签的目标,但该日期仍需根据测试和进一步修复情况而定。
版本32的重点
版本32专注于节点软件行为、钱包接口、费用计算、网络和性能。草案发布说明中并未列出比特币共识规则的变更,这意味着此次更新不会重新定义网络认为有效的交易或区块。比特币核心32.0在8月20日进入功能冻结阶段,限制工作仅限于发布前所需的修复。9月14日,开发团队将32.x分支与主开发分支分开,并开始发布候选周期,同时版本33的开发工作单独恢复。
第一个候选版本旨在供节点运营商、钱包开发者和其他用户测试,以便开发者决定代码是否准备好进行稳定发布。比特币核心于9月15日开设了专门的32.0发布候选测试反馈问题,距离RC1标记仅一天。项目方要求测试者使用测试指南进行RC特定检查,并通过单独的GitHub问题报告软件问题。截至9月16日,尚未发布最终的v32.0二进制文件。
手动升级与安全性
比特币核心不会自动更新。运营商可以选择何时安装新版本,这意味着在新软件发布后,旧版本仍然可以继续使用。这种手动升级模式在之前的安全披露中显得尤为重要。正如crypto.news在5月报道的那样,比特币核心在28.x分支达到生命周期结束后披露了CVE-2024-52911漏洞。该漏洞在比特币核心29.0版本中已被修复,但在技术细节公开之前,漏洞已被利用。
用户界面与费用计算的变化
比特币核心32的一个显著用户界面变化影响了estimatesmartfee,这是钱包和应用程序用于计算交易费用的RPC。到目前为止,比特币核心的主要估算器依赖于过去区块中包含的交易的确认行为。版本32增加了一个基于当前在节点内等待的交易的单独估算器。
新的内存池估算器根据当前待处理交易的条件生成经济和保守的估算。比特币核心在使用之前会检查最近的区块活动,并在内存池看起来过于稀疏或不健康时拒绝该估算。当两个系统都产生有效结果时,estimatesmartfee返回较低的费用估算。因此,这种新方法无法通过组合默认模式提高现有区块政策建议;其作用是在当前内存池条件支持的情况下,降低建议费用。
这种设计可以在一段高费用区块空间结束后更快地响应。区块历史估算器可能继续纳入最近确认的高费用交易,而内存池可能已经显示出竞争确认的交易减少。软件保留了一种方法供应用程序使用先前的方法。新增的fee_rate_estimator选项允许用户请求block_policy、mempool_policy或组合默认行为。比特币核心将新的内存池估算器的统计信息存储在单独的数据文件中,以便在重启后重新加载。
节点处理与性能改进
钱包费用计算将使用组合默认估算器。响应可以识别哪个估算器生成了所选费用,而更高的详细级别则暴露内存池健康统计信息,以供需要更多细节的应用程序使用。比特币核心32更改了节点在连接区块时检索交易数据的方式,特别是在所需信息必须从存储中读取时。
该软件现在可以在区块验证继续进行的同时,从链状态数据库中通过多个工作线程预取先前交易输出(prevouts)。默认情况下为八个预取线程,运营商可以将设置提高到16个,或通过将其设置为零来禁用并行提取。Prevouts用于识别交易输入所花费的币。节点需要这些信息来检查输入是否存在、是否已被花费以及是否满足适用的验证规则。此改进旨在减少节点处理包含未在更快内存缓存中可用的输入的区块时等待磁盘读取的时间。效果将因存储硬件、缓存行为和节点配置而异。
比特币核心32通过-prevoutfetchthreads=暴露该设置,使运营商可以控制参与的线程数量。草案说明将该功能特别描述为区块验证性能的改进。单独的RPC更改为运营商在AssumeUTXO背景验证期间提供更多信息。在基于快照的节点达到链顶后,getblockchaininfo现在可以报告仍在活动节点状态后面运行的历史链验证的进度。
安全修复与HTTP服务器审查
比特币核心32修复了在特定条件下影响非Windows系统的钱包通知缺陷。草案说明指出,具有创建钱包权限的经过身份验证的RPC用户可以在节点配置为-walletnotify时构造包含特殊替换字符的钱包名称。在这些条件下,该名称可能导致以比特币核心进程的权限执行任意命令。版本32更改了钱包通知占位符替换,使钱包名称被视为文字文本。该版本还通过拒绝包含.或..路径元素的某些相对路径名称来收紧钱包命名。
在对比特币核心重写的HTTP服务器进行审查时,出现了第二个问题,该服务器在版本32中取代了libevent。开发者Matthew Zipkin在使用Moonshot AI的Kimi K3模型进行审计后提交了拉取请求#36123,发现了一个内存耗尽路径。虽然服务器处理一个请求,但它可以继续读取和排队同一连接发送的数据,而没有有效的大小限制。初步分析表明,该条件主要需要一个能够保持请求繁忙的经过身份验证的客户端。进一步测试发现,REST流量在没有身份验证的情况下也会产生类似问题。
一位审查员报告称,16个未经身份验证的REST连接使一个测试进程的内存从46 MB推升至大约3 GB,仅在一分钟内。经过修订的修复后,同一测试在90秒内的内存使用量增加了大约3 MB,而在修补程序之前则为3.2 GB。该补丁于9月5日合并,在v32.0rc1标记之前。由于重写的HTTP服务器是版本32的新功能,因此在服务器出现在稳定的比特币核心版本之前,特定缺陷已被发现。
PSBT命令与钱包工具更新
比特币核心32更改了与部分签名比特币交易相关的四个命令的默认格式。createpsbt、walletcreatepsbt、converttopsbt和psbtbumpfee将默认生成PSBT版本2。开发者添加了一个可选的psbt_version参数,以便应用程序在必要时明确请求其他支持的版本。PSBT允许多个钱包、应用程序或硬件签名设备在完成比特币交易广播之前交换交易信息。将默认值更改为版本2可能需要测试那些假设核心的RPC输出将使用旧格式的软件。该更新并未删除请求先前版本的能力。围绕受影响的RPC命令构建的应用程序可以在测试版本2兼容性时明确设置格式。
钱包工具在同一版本中还进行了其他更改。新的exportwatchonlywallet RPC创建一个描述符钱包文件,包含公共描述符、交易历史和地址簿数据,而不包含私钥。比特币核心的离线签名教程现在使用该命令创建在线观察钱包。另一个新命令derivehdkey允许钱包通过包含至少一个硬化步骤的路径派生扩展公钥或私钥,而addhdkey则允许添加BIP32扩展密钥,而不立即使用它生成输出脚本。PrivateBroadcast继续维护。crypto.news在6月报道,比特币核心31.1rc1修复了一个网络条件,该条件可能在使用PrivateBroadcast时暴露源IP地址。版本32包含进一步的PrivateBroadcast RPC和交易中继更改,这些更改在其草案发布说明中有记录。当前比特币核心的计划仍然将10月10日列为标记v32.0的目标。9月15日开设的RC测试反馈线程仍然活跃,开发者指导发现实际比特币核心缺陷的测试者在最终发布之前提交单独的问题。