
Bitcoin Core 0.19.1 发布说明详解升级方法、平台兼容性与全部修复项剖析【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin本文以 Bitcoin Core 0.19.1 的官方发布说明 release-notes-0.19.1.md 为主体完整解读这次小型版本minor release的升级步骤、操作系统兼容性与 RISC-V 平台支持并逐项剖析其钱包、RPC/ZMQ/PSBT、GUI 与构建平台等六大类修复同时结合当前仓库源码如scantxoutset实现、PSBT 解析、ChainStateFlushed回调说明这些修复在代码层面的实际落点帮助读者理解 0.19.1 各变更的技术含义与适用边界。发布定位一次聚焦缺陷修复的小型版本Bitcoin Core 0.19.1 是一次 minor release。官方发布说明明确其定位This minor release includes various bug fixes and performance improvements, as well as updated translations.本次小型版本包含多项缺陷修复与性能改进以及更新后的翻译。也就是说0.19.1 不引入新功能而是对 0.19.0 的稳定性收尾。所有变更可按六大类归纳Wallet钱包、RPC and other APIsRPC 与其他 API、GUI、Tests and QA测试与质量保障、Platform support平台支持、Miscellaneous杂项外加翻译更新。对正在运行 0.19.0 的节点与钱包使用者而言升级到 0.19.1 的主要收益是PSBT 解析的越界防护、scantxoutset参数校验收紧、ZMQ 多通知器下的正确性修复以及钱包地址复用判断的若干修正。官方渠道信息来自发布说明原文预编译发布包自 bitcoincore.org 的 0.19.1 目录提供缺陷报告走 GitHub issue tracker安全与更新通知可订阅 bitcoincore.org 的公告邮件列表。如何升级到 0.19.1发布说明给出了明确的升级操作流程这里完整保留其要点先干净关闭旧版本如果正在运行旧版本先将其关闭并等待它完全退出——对较老的版本来说完全停止可能需要几分钟时间。按平台部署新程序Windows运行安装程序installermacOS覆盖/Applications/Bitcoin-QtLinux直接替换bitcoind/bitcoin-qt可执行文件。跨版本升级从已到达 EOLEnd of Life停止维护的旧版本直接升级是可行的但注意如果 datadir数据目录需要迁移这个过程可能耗时较长。旧版本的比特币钱包在升级后通常仍受支持。实操含义对于以bitcoind方式运行的 Linux 节点升级本质上是停止进程 → 替换二进制 → 重启无需迁移数据库除非跨越了需要迁移的大版本。升级期间应保留数据目录备份尤其是钱包文件。兼容性支持矩阵发布说明对 0.19.1 的平台支持范围做了明确声明这些约束对部署决策有直接影响平台支持状态备注Linux 内核系统支持并广泛测试主要测试平台macOS 10.10 及以上支持自 0.17.0 起因 Qt 5.9.x 要求不再支持 macOS 10.10 以下Windows 7 及以上支持—其他 Unix-like 系统可能可用应能在多数类 Unix 系统上工作但测试频率较低官方不推荐在不支持的系统上使用RISC-V本版本新增预编译发布包首次提供 RISC-V 平台二进制两个值得注意的 macOS 细节原文照录自 Bitcoin Core 0.17.0 起由于构建使用的 Qt 5.9.x 要求 macOS 10.10更早的 macOS 版本不再受支持0.19.1 的 GUI 在 macOS 开启深色模式时不会随之改变外观。提供 RISC-V 平台预编译二进制是这一版平台支持上的增量亮点意味着非 x86 的单指令集架构用户第一次可以不依赖自行编译。0.19.1 变更日志全解以下逐条列出发布说明中的完整 changelog并对其中具有代码落点可考的修复补充源码级解读。Wallet钱包#17643 Fix origfee return for bumpfee with feerate arginstagibbs修复bumpfee携带费率参数时origfee原始交易费用返回值不正确的问题。#16963 Fixunique_ptrusage in boost::signals2promag修正 boost::signals2 信号连接中unique_ptr的使用方式属于内存管理正确性修复。#17258 Fix issue with conflicted mempool tx in listsinceblockadamjonas, mchrostowski修复listsinceblock在处理处于内存池但已冲突的交易时的问题。#17924 Bug: IsUsedDestination shouldnt use key id as script id for ScriptHashinstagibbs修复IsUsedDestination判定地址是否已使用时不应把 key id 当作 ScriptHash 的 script id 来匹配的问题。#17621 IsUsedDestination should count any known single-key addressinstagibbsIsUsedDestination应把所有已知的单钥地址都计入已使用改善地址复用启发式。#17843 Reset reused transactions cachefjahr重置被复用交易缓存避免缓存陈旧导致选币行为错误。这几项的共同主题是地址复用启发式与缓存正确性。0.19 版本引入了对地址复用address reuse的检测与提醒机制0.19.1 修正了其判定边界#17924/#17621以及与之联动的交易缓存#17843。从源码结构看IsUsedDestination这类判定在后续版本中已迁移到钱包层的WalletModel/地址使用统计相关代码中0.19.1 的修复正是为了让是否复用地址的统计既不漏判单钥地址也不误判key id 与 script id 混淆。RPC and other APIsRPC 与其他 API#17687 cli: Fix fatal leveldb error when specifying -blockfilterindexbasic twicebrakmic修复通过bitcoin-cli/命令行把-blockfilterindexbasic重复指定两次时触发致命 leveldb 错误的问题——重复的命令行选项本应被幂等处理。#17728 require second argument only for scantxoutset start actionachow101收紧scantxoutset的参数校验——只有start动作才要求第二个参数scanobjects 描述符列表。#17445 zmq: Fix due to invalid argument and multiple notifierspromag修复 ZMQ 发布器在参数无效且存在多个通知器notifiers时的错误处理。#17524 psbt: handle unspendable psbtsachow101PSBT 流程要能处理不可花费unspendable的部分签名交易而非直接失败。#17156 psbt: check that various indexes and amounts are within boundsachow101PSBT 解析时校验各类索引与金额是否在合法范围内堵住越界输入。其中两项在当前仓库源码中可以直接看到演进后的实现形态scantxoutset的 start 动作强制要求 scanobjects。当前仓库 src/rpc/blockchain.cpp 中action start分支先通过CoinsViewScanReserver抢占扫描名额已存在扫描则报Scan already in progress随后const UniValue* scanobjects self.MaybeArgUniValue(scanobjects); if (!scanobjects) { throw JSONRPCError(RPC_MISC_ERROR, scanobjects argument is required for the start action); }status/abort动作则完全不触碰 scanobjects——这正是 #17728 修复后沉淀下来的参数契约第二个参数仅对start必需。描述符语法addr、raw、combo、pkh、sh(multi(...))、tr等的完整说明见 doc/descriptors.md。PSBT 的边界与合并防护。#17156 与 #17524 针对的是PartiallySignedTransaction的解析健壮性。当前仓库 src/psbt.cpp 中Merge首先强制两个 PSBT 必须对应同一交易且版本一致否则直接拒绝std::optionalTxid this_id GetUniqueID(); std::optionalTxid psbt_id psbt.GetUniqueID(); if (!this_id || !psbt_id || this_id ! psbt_id) { return false; } if (GetVersion() ! psbt.GetVersion()) { return false; }构造阶段也以assert(m_version 0 || m_version 2)限制版本取值。这类输入先校验、再处理的模式正是 0.19.1 为 PSBT 系列 API 加固的延续。PSBT 的完整协议说明可参考 doc/psbt.md。GUI#17427 Fix missing qRegisterMetaType forsize_thebasto补上 Qt 元类型注册修复跨线程队列信号中size_t参数的传递问题。#17695 disable File→CreateWallet during startupfanquake启动期间禁用文件 → 创建钱包菜单项避免初始化未完成时创建钱包引发异常状态。#17634 Fix comparison function signaturehebasto修正排序比较函数的签名使其符合std::sort/Qt 容器要求的布尔返回约定消除未定义行为风险。#18062 Fix unintialized WalletView::progressDialogpromag修复WalletView::progressDialog未初始化就使用的问题。Tests and QA测试与质量保障#17416 Appveyor improvement - text file for vcpkg package listsipsorceryAppveyor CI 中使用纯文本文件管理 vcpkg 包列表提升 Windows 构建流水线稳定性。#17488 fix bitcoind already running warnings on macOSfanquake修复 macOS 上功能测试误报bitcoind 已在运行的警告。#17980 add missing #include to fix compiler errorskallewoof补上缺失的头文件以修复部分编译器下的编译错误。Platform support平台支持#17736 Update msvc build for Visual Studio 2019 v16.4sipsorcery将 MSVC 构建更新到 VS 2019 v16.4 工具链。#17364 Updates to appveyor config for VS2019 and Qt5.9.8 msvc project fixessipsorceryAppveyor 配置同步到 VS2019 Qt 5.9.8并修复 MSVC 工程文件。#17887 bug-fix macos: give free bytes toF_PREALLOCATEkallewoofmacOS 上文件预分配F_PREALLOCATE命令修复避免把空闲字节错误地纳入预分配长度。从源码结构看F_PREALLOCATE对应的是各平台的ftruncate/F_PREALLOCATE系统调用封装compat/目录下的 POSIX 兼容层该修复保证 macOS 上链文件、块文件的预分配不会因错误长度而失败或浪费空间。Miscellaneous杂项#17897 init: Stop indexes on shutdown after ChainStateFlushed callbackjimpo关停顺序调整——索引block filter index、coins index 等应在ChainStateFlushed回调之后再停止。当前仓库 src/init.cpp 中保留了这一时序约束的注释// FlushStateToDisk generates a ChainStateFlushed callback, which we should avoid missing其原理是FlushStateToDisk会向校验接口validation interface发出ChainStateFlushed回调索引模块依赖该回调把内存中的增量状态刷到各自的 LevelDB。如果索引先于回调被停止可能漏掉最后一批写入。ChainStateFlushed的回调分发实现见 src/validationinterface.cpp索引侧的处理见 src/index/base.cpp。#17450 util: Add missing headers to util/fees.cpphebasto为util/fees.cpp补齐缺失头文件。#17654 Unbreak build with Boost 1.72.0jbeich修复与 Boost 1.72.0 的构建不兼容该类头文件/接口变更是各发行版升级 Boost 时的常见构建破坏源。#17857 scripts: Fix symbol-check security-check argument passingfanquake修复 guix 构建脚本中symbol-check.py与security-check.py的参数传递问题两个脚本分别位于 contrib/guix/symbol-check.py 与 contrib/guix/security-check.py。#17762 Log to net category for exceptions in ProcessMessageslaanwj将ProcessMessages中出现的异常统一记录到net日志类别便于排查 P2P 消息处理异常。#18100 Update univalue subtreeMarcoFalke更新随仓库分发的 UniValue 子树JSON 解析库见 src/univalue。修复项的技术主线归纳把 0.19.1 的 20 余项变更放在一起看可以归纳出四条主线输入校验加固PSBT 索引/金额越界检查#17156、scantxoutset参数契约收紧#17728、ZMQ 无效参数处理#17445——核心原则是非法输入在边界处被明确拒绝而不是深处理中崩溃。钱包启发式正确性IsUsedDestination的两个修正与复用交易缓存重置共同让地址复用检测这一隐私相关机制的判定更准确、更保守。生命周期与关停顺序#17897索引在ChainStateFlushed之后停止与 #17843缓存重置都属于状态机时序问题修复后降低了异常关停/状态残留的概率。构建与 CI 现代化VS2019 工具链、Boost 1.72 兼容、RISC-V 预编译二进制、macOS 预分配修复——0.19.1 显著扩大了可复现构建的覆盖面。贡献者与致谢发布说明完整列出了直接贡献者名单此处照录以保留原始信息Aaron Clauson、Adam Jonas、Andrew Chow、Fabian Jahr、fanquake、Gregory Sanders、Harris、Hennadii Stepanov、Jan Beich、Jim Posen、João Barbosa、Karl-Johan Alm、Luke Dashjr、MarcoFalke、Michael Chrostowski、Russell Yanofsky、Wladimir J. van der Laan同时感谢所有通过 Transifex 参与翻译的贡献者。小结与适用边界0.19.1 是 0.19.x 系列的收尾修复版本适用前提是当前部署的是 0.19.0对已使用后续大版本当前仓库源码为 31.x 时代代码的节点没有直接意义但其中的 PSBT 校验与索引关停时序设计在后续版本中继续演进仍具参考价值。兼容性以发布说明为准Linux 内核系统、macOS 10.10因 Qt 5.9.x 限制且深色模式外观不适配、Windows 7RISC-V 为首次提供预编译二进制。仓库内可进一步深入的资料doc/release-notes/release-notes-0.19.0.md前一版本说明便于对照变更脉络、doc/descriptors.mdscantxoutset描述符语法、doc/psbt.mdPSBT 协议、src/rpc/blockchain.cpp扫描类 RPC 实现、src/psbt.cppPSBT 实现。【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考