首页
/ Bitcoin Core 0.18.0 发布说明详解:新 RPC、描述符与 PSBT 工具、配置项与部署变更全解析

Bitcoin Core 0.18.0 发布说明详解:新 RPC、描述符与 PSBT 工具、配置项与部署变更全解析

2026-09-06 16:16:06作者:虞亚竹Luna

本文以 Bitcoin Core 0.18.0 的官方发布说明(doc/release-notes/release-notes-0.18.0.md)为主体,系统梳理该主版本的升级路径、兼容性约束、配置选项变更、新增/更新/移除的 RPC 与 REST 接口、GUI 改动与构建系统变化;并结合当前仓库源码逐条印证这些变更的实际实现,帮助运维人员安全完成版本升级、帮助开发者理解 0.18.0 为后续版本(多钱包、描述符钱包、BIP158 轻客户端过滤等)奠定的架构基础。

1. 版本定位与升级路径

0.18.0 是一个新的主版本(major release),包含新功能、多项缺陷修复、性能改进以及更新的翻译。升级步骤遵循 Bitcoin Core 的惯例:

  1. 停止旧版本节点,等待其完全退出(旧版本可能需要几分钟);
  2. Windows 上运行安装器,macOS 上替换 /Applications/Bitcoin-Qt,Linux 上覆盖 bitcoind / bitcoin-qt 可执行文件。

关于链状态数据库的格式迁移,发布说明给出两条重要历史背景,升级前必须了解:

  • 首次运行 0.15.0 或更新版本时,chainstate 数据库会被转换为新格式(LevelDB 前身格式迁移),耗时从几分钟到半小时不等,取决于机器速度;
  • 块数据库格式在 0.8.0 时也已变更,官方不提供从 0.8 之前的版本自动升级到 0.15.0 及以后版本的代码。直接从 0.7.x 及更早版本升级、且不重新下载区块链是不被支持的。

但正如发布说明强调的:旧格式的钱包文件依旧被支持,0.18.0 不会因升级而损坏任何存量钱包。

1.1 平台兼容性

平台 支持情况
Linux 内核系统 官方支持并充分测试
macOS 10.10 及以上(自 0.17.0 起不再支持更旧版本,因构建所用的 Qt 5.9.x 不支持旧系统)
Windows Windows 7 及以上
其他 Unix 类系统 可以运行,但测试频率较低,官方不推荐使用
RISC-V 0.18.0 起,预编译分发包新增 RISC-V 平台二进制

一个值得注意的遗留限制:该版本在 macOS 激活"深色模式"时,Bitcoin Core 界面不会跟随改变外观。

1.2 已知问题(Known Issues)

发布说明明确列出了一个 GUI 已知缺陷:对于同时启用了 coin control(手动选币)功能且同时加载多个钱包的高级用户,通过下拉菜单切换钱包时,coin control 输入选择对话框可能错误地保留前一个钱包的状态。官方建议:在同时加载多钱包的场景下暂不要使用 coin control 功能。

2. 挖矿变更:getblocktemplate 强制要求 segwit 规则

0.18.0 对挖矿接口的一个行为收紧:调用 getblocktemplate 时如果未指定 segwit 规则,调用将直接失败并返回说明如何启用 segwit 规则的错误信息。发布说明的解释是:不带 segwit 规则调用 GBT 几乎可以断定是配置错误,因为它会导致矿工收益降低。

这一变更在 0.18.0 由 PR #14811 引入("Mining: Enforce that segwit option must be set in GBT"),并且至今仍然生效。在当前仓库的 src/rpc/mining.cpp 中可以看到,主网调用若缺少规则集会抛出:

getblocktemplate must be called with the segwit rule set (call with {"rules": ["segwit"]})

即标准用法是 getblocktemplate '{"rules": ["segwit"]}'(signet 上还需追加 "signet" 规则)。任何依赖旧版 GBT 的矿池节点/中间件在升级到 0.18.0 时必须同步修改。

3. 配置选项变更(Configuration option changes)

0.18.0 对 bitcoin.conf 的行为做了多处收紧与扩展,逐条如下:

3.1 未识别的配置段名告警

如果配置文件使用了无法识别的段名(section),启动时会打印告警。合法段名只有三个:[test][main][regtest]。这能防止把 regtest 拼错成 regtest1 之类的笔误导致配置静默失效(对应 changelog 中的 #14708)。

3.2 ZMQ 高水位(High Water Mark)配置选项

新增了四个用于配置 ZMQ 在内存中排队消息的最大数量("high water mark",达到后丢弃后续消息)的选项,默认值 1000,与此前版本的行为一致。发布说明指向 ZMQ 文档 的用法章节。

在当前仓库中,这些选项及其默认值的实现可以精确对上:src/init.cpp 注册了 HWM 参数(0.18.0 引入时为四个,当前 master 又追加了 sequence 主题):

-zmqpubhashblockhwm=<n>   hash block 主题出站 HWM(默认 1000)
-zmqpubhashtxhwm=<n>      hash transaction 主题出站 HWM(默认 1000)
-zmqpubrawblockhwm=<n>    raw block 主题出站 HWM(默认 1000)
-zmqpubrawtxhwm=<n>       raw transaction 主题出站 HWM(默认 1000)

默认值常量定义在 src/zmq/zmqabstractnotifier.hstatic constexpr int DEFAULT_ZMQ_SNDHWM {1000};,实际生效时通过 zmq_setsockopt(..., ZMQ_SNDHWM, ...) 写入 socket(见 src/zmq/zmqpublishnotifier.cpp),并在复用 socket 时把 HWM 写入日志(#15209)。

3.3 rpcallowip 不再隐式监听所有网卡

rpcallowip 从此不再让节点自动监听所有网络接口。要监听 RPC,必须显式用 rpcbind 指定 IP 地址。发布说明强调通过公网暴露 RPC 是不安全的,会打印警告;如需为 Docker 等工具暴露 RPC,应只绑定本机回环,例如:

docker run [...] -p 127.0.0.1:8332:8332

注意这比常规 Docker 端口映射多一个 :8332,表示容器内也是 8332 端口。相关测试变更 #14532("Never bind INADDR_ANY by default, and warn when doing so explicitly")与 #14861(rpc_bind 测试适配)印证了这一行为的落地。

3.4 rpcpassword 中不允许包含

由于 # 在配置文件里同时是注释起始符,若配置文件中 rpcpassword 的值含有 #,存在"这是密码的一部分还是注释"的二义性。0.18.0 起这种情况会直接导致启动失败(#14494、#15087)。密码含特殊字符时应使用命令行或 rpcauth 哈希机制(工具见 share/rpcauth/rpcauth.py)。

3.5 whitelistforcerelay 默认关闭

whitelistforcerelay 控制是否对白名单对等节点转发的交易进行强制中继(即使未进内存池)。该选项在 0.18.0 默认值改为关闭:因为策略变化或断连/封禁行为变化,可能导致正在白名单另一方的节点被第三方 peer 踢掉。用户仍可用命令行选项显式开启。

当前仓库中该默认值保持不变,见 src/net_permissions.h

/** Default for -whitelistforcerelay. */
inline constexpr bool DEFAULT_WHITELISTFORCERELAY = false;

4. systemd 初始化文件变更

contrib/init/bitcoind.service 的数据目录从 ~bitcoin/.bitcoin 改为 /var/lib/bitcoind,目的是让 Bitcoin Core 与其他服务保持一致,并使 systemd 配置与既有的 Upstart/OpenRC 配置统一。变更要点:

  • 配置目录、PID 目录、数据目录完全由 systemd 管理(创建、权限等),对应 RuntimeDirectory=bitcoindConfigurationDirectory=bitcoinStateDirectory=bitcoind
  • 迁移到新配置前,先用 df -h /var/lib/bitcoind 确认目标文件系统有足够空间,可选地把现有数据目录拷贝过去;
  • 重要限制:当使用 contrib/init 下提供的初始化文件时,在 /etc/bitcoin/bitcoin.conf 中覆盖 datadir 选项不会生效——因为初始化文件里的命令行参数优先级高于配置文件。

当前仓库中的 unit 文件进一步体现了这些设计,ExecStart 显式指定了三个目录(contrib/init/bitcoind.service):

ExecStart=/usr/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
                            -conf=/etc/bitcoin/bitcoin.conf \
                            -datadir=/var/lib/bitcoind \
                            -startupnotify='systemd-notify --ready' \
                            -shutdownnotify='systemd-notify --stopping'

并且附带了一整套 systemd 安全加固(PrivateTmp=trueProtectSystem=fullProtectHome=trueNoNewPrivileges=truePrivateDevices=trueMemoryDenyWriteExecute=true 等,见 contrib/init/bitcoind.service),文件头部注释也提醒:不要在原文件上直接修改(升级会被覆盖),扩展配置请使用 systemctl edit bitcoind.service。0.18.0 对应的工作由 PR #12255("Update bitcoin.service to conform to init.md")完成,完整的 init 文件说明见 doc/init.md

5. 文档新增与更新

0.18.0 附带了四份重要文档的新增/更新(这些文档在当前仓库中均存在,可直接阅读):

  • doc/JSON-RPC-interface.md:新增短文,说明 RPC 结果可能因数据来自不同子系统(如钱包状态与内存池状态)而存在不一致的情形,并补充了如何保护该接口的安全说明。doc/REST-interface.md 也加了一句:同样的规则适用于 REST 接口;
  • doc/bitcoin-conf.md:新文档,讲解如何使用 bitcoin.conf 配置 Bitcoin Core;
  • doc/psbt.md:新文档,介绍 BIP174 部分签名比特币交易(PSBT)接口。PSBT 用于让多个程序协作完成交易的构造、签名与广播,典型场景是离线(冷存储)钱包、多签钱包、coinjoin 实现等;
  • doc/descriptors.md:输出脚本描述符(output script descriptor)文档更新,描述了一门仍在演进中的语言,用来描述钱包或程序希望接收通知的输出脚本(例如希望感知哪些地址收到付款)。该语言被本版本多个新增/更新的 RPC 使用,并预期会适配到更多 RPC 和底层钱包结构。

6. 构建系统变更

  • --disable-bip70 新选项:传给 ./configure 后,Bitcoin-Qt 将不带 BIP70 支付协议支持构建,也不再链接 libssl。发布说明的背景是:BIP70 支付协议曾使 Bitcoin Core 暴露于 libssl 漏洞之下,因此不需要的构建者被鼓励用该选项降低暴露面(changelog #14451、#14212;对应测试任务 #15411 "Combine --disable-bip70 into existing job")。需要说明的是,0.18.0 的构建入口是 autotools 的 configure;当前仓库已迁移到 CMake(CMakeLists.txt),该选项的历史形态以 0.18.0 时代为准。
  • Qt 最低版本从 5.2 提升到 5.5.1(#15393),depends 系统提供 5.9.7(#14849)。depends 构建系统的用法见 depends/README.md

7. 新增 RPC(New RPCs)

0.18.0 一口气引入了八个新 RPC,其中 PSBT 三件套与描述符两个是后续多钱包/描述符钱包体系的基石。当前仓库中这些 RPC 全部保留,实现位置如下表,读者可对照深入:

RPC 功能 当前仓库实现位置
getnodeaddresses 返回本节点已知的对等节点地址(经过质量与时近性过滤),可用来在不依赖 DNS seeder 的情况下发现新节点 src/rpc/net.cpp
listwalletdir 返回钱包目录中的钱包列表(默认钱包目录或 -walletdir 指定目录) doc/man/bitcoin-wallet.1 等相关文档
getrpcinfo 返回 RPC 服务器运行时信息:当前活跃命令数组及其已运行时长 src/rpc/server.cpp
deriveaddresses 给定一个输出描述符,返回一个或多个对应地址 src/rpc/output_script.cpp
getdescriptorinfo 接受描述符,返回其信息(包括计算出的校验和) src/rpc/output_script.cpp
joinpsbts 把多个输入互不相同的 PSBT 合并为一个;结果包含所有输入与输出,任何已提供的签名都会被丢弃 src/rpc/rawtransaction.cpp
analyzepsbt 检查 PSBT 的内容与完成交易所需的下一步 src/rpc/rawtransaction.cpp
utxoupdatepsbt 在未花费输出(UTXO)集合中查找被部分交易花费的输出并回填 src/rpc/rawtransaction.cpp

对其中三个 PSBT 辅助 RPC 的行为细节,发布说明给出了更完整的语义,值得逐条掌握:

  • analyzepsbt:对 PSBT 的每个输入,报告该输入缺失的信息——是否需要提供 UTXO、还缺哪些公钥、需要哪些脚本、还缺哪些签名;每个输入还会列出完成它所需的角色(role),并总体列出下一步需要哪个角色;在信息足够时还会给出完成交易的费用率与虚拟大小估计。changelog 中 #15582 修复了该 RPC 的费用溢出 bug(CAmount 替代 int)。
  • utxoupdatepsbt:PSBT 签名算法需要被花费 UTXO 的信息。对 segwit 输入只需要 UTXO 本身;对非 segwit 输出则需要整个前序交易,以保证签名者签的是正确的东西。由于 UTXO 集合只含 UTXO 而不含完整交易,utxoupdatepsbt 只能为 segwit 输入自动回填 UTXO
  • joinpsbts:#15337 修复了空输入调用时的段错误。

getnodeaddresses 当前实现还支持第二个参数按网络过滤(如 getnodeaddresses 4 "i2p"、命名参数 network=onion count=12),返回 time/services/address/port/network 字段(见 src/rpc/net.cpp),是 0.18.0 语义的自然延续。

8. 更新的 RPC(Updated RPCs)

发布说明指出:一些主要面向测试的低层 RPC 变更放在"Low-level changes"章节。主要变更如下:

getpeerinfo:新增 minfeefilter 字段,值为该 peer 的 BIP133 费用过滤器,可用它检测是否存在愿意接收低于默认最低中继费交易的 peer(#13987)。

内存池 RPCgetrawmempoolverbose=true)等现在额外返回 bip125-replaceable,指示该交易(或其未确认祖先)是否向节点和矿工"请求"可用更高费率的交易替换之。实现见 src/rpc/mempool.cpp。历史演进备注:在当前 master 中该字段已被标注为 (DEPRECATED),这是 0.18.0 之后的后续演进,阅读新版节点输出时应注意。

settxfee:此前低于允许最低值时静默忽略,现在会打印警告;特殊值 "0" 仍可用于请求最低值(#13988)。

getaddressinfo

  • 新增 ischange 字段,指示钱包是否曾把该地址用作找零输出(#14410);
  • 新增 solvable 布尔字段:当 Core 掌握足够的 scriptPubKey、可选 redeemScript 与可选 witnessScript 信息、能够生成一个花费该地址资金的非签名输入时为真;
  • 0.18.0 之后还移除了 addresses 字段(见下节),客户端应改用 embedded.address(P2SH/P2WSH 包装地址)或 pubkeys(多签参与者)。

importmulti 是 0.18.0 中改动最大的钱包 RPC(#14565 "Overhaul importmulti logic"):

  • 支持 P2WSH、P2WPKH、P2SH-P2WPKH、P2SH-P2WSH;P2WSH 与 P2SH-P2WSH 请求可接受额外的 witnessscript 参数;
  • 每个请求新增 warnings 字段(字符串数组),解释哪些字段被忽略或字段间不一致;
  • 支持描述符导入:请求中可以用 desc 参数替代 scriptPubKey,范围描述符可附带起止范围;带 key origin 信息的描述符导入后,其 origin 信息会存入钱包,供创建 PSBT 时使用(#14491、#14021;#15749 修复了只导入 PKH 输出 origin 的问题;#15426 补充了 keypool 选项的文档)。

描述符联动字段 descgetaddressinfolistunspentscantxoutset 现在都会额外返回一个 desc 字段,内容是包含该地址全部 key path 与签名信息(不含私钥)的输出描述符;且对前两个 RPC,只有地址 solvable 时才返回。

listunspent:对 P2WSH 或 P2SH-P2WSH 输出额外返回 witnessScript(#14481)。

importprivkey:导入私钥时保留此前为该地址/公钥设置的标签。举例:早期版本先以标签 "cold wallet" 导入一个 watch-only 地址,之后再导入对应私钥会把标签重置为空串;0.18.0 起 "cold wallet" 会被保留。调用时若显式指定了非默认标签,则应用新标签(#13381)。

getrawtransaction(RPC 与 REST):不再检查未花费 UTXO 集合。剩余行为为:提供 blockhash 则查对应块;未提供 blockhash 则查内存池;未提供 blockhash 但启用了 txindex 则同时查 txindex(#15159)。

unloadwallet:变为同步调用,钱包完全卸载后才返回。

getmininginfo:当节点从未通过 RPC 组装过区块时,省略 currentblockweightcurrentblocktx(#15383)。

getblocktemplate:见第 2 节。

9. 弃用与移除的 RPC(Deprecated or removed RPCs)

0.18.0 完成了多轮弃用的最后一步,清理了一批长期遗留接口:

接口 状态 说明
signrawtransaction 移除 0.17.0 已弃用并置于特殊配置项之后,0.18.0 正式删除
account API 移除 0.17.0 弃用,0.17.0 引入 label API 作为替代;0.18.0 删除(#14023、#13825 "Kill accounts")
addwitnessaddress 移除 0.16.0 已弃用(#14296)
generate 弃用 将在后续主版本完全移除。它只用于测试,但实现横跨钱包与挖矿两个子系统,弃用是为了简化 wallet-node 接口。测试项目应改用 generatetoaddress(不依赖钱包);generatetoaddress + getnewaddress 返回的地址即可获得与旧 generate 相同的效果。0.18.0 内继续使用的唯一方式:以 -deprecatedrpc=generate 重启 bitcoind
validateaddress 部分字段 弃用 ismineiswatchonlyscripthexpubkeyssigsrequiredpubkeyembeddediscompressedlabeltimestamphdkeypathhdmasterkeyid 已移至 getaddressinfo
validateaddress/getaddressinfoaddresses 字段 移除 该字段用 P2PKH 地址指代公钥、易混淆;改用 embedded.addresspubkeys

10. REST 接口变更

新增 /rest/blockhashbyheight/ 端点:按高度获取当前最长链上对应区块的哈希。在当前仓库 src/rest.cpp 中该端点仍注册在路由表中,完整的 REST 端点列表与行为说明见 doc/REST-interface.md

11. GUI 变更

  • 新增 Window 菜单:与已有的 File、Settings、Help 菜单并列,其他菜单中会打开新窗口的若干项目被移入其中(#14573);
  • Send 标签页:移除"pay only the required fee"复选框,用户直接把 Custom Feerate 数值降到节点配置的最低中继费即可(#14608);
  • Overview 标签页:若钱包是通过 createwallet RPC 配合 disable_private_keys 参数创建的,只显示 watch-only 余额(#13966);
  • macOS:若编译时 macosx 最低版本大于 10.11,"开机自启"选项不再可用(需要时以 CXXFLAGS="-mmacosx-version-min=10.11" CFLAGS="-mmacosx-version-min=10.11" 设置部署 SDK 版本)。

GUI changelog 同时包含大量体验修复:Peers 标签页重构(#15136)、窗口标题显示当前钱包名(#15149)、Open Wallet / Close Wallet 菜单动作(#15153、#15195)、系统托盘图标默认可用时启用(#14228)等。

12. 新工具:bitcoin-wallet

0.18.0 随其他可执行文件一同分发了 bitcoin-wallet 工具:无需启动节点、无需任何 RPC,即可创建新的钱包文件,或查看现有钱包的基本信息——是否加密、是否使用 HD seed、包含多少交易、地址簿有多少条目。该工具由 #13926 引入("bitcoin-wallet - a tool for creating and managing wallets offline"),#15390 修复了 flush 钱包时未关闭 bdb 的问题。

在当前仓库中,入口文件 src/bitcoin-wallet.cpp 保留了"离线钱包工具"的定位(帮助文本明确写着 "an offline tool for creating and interacting with wallet files"),但随着描述符钱包成为主线,其命令集已演进为 info / create / dump / createfromdump(见 src/bitcoin-wallet.cpp),并支持 -datadir-wallet-dumpfile 选项——这与 0.18.0 的 create/info 命令一脉相承,但针对的是描述符钱包文件格式。

13. 计划中的变更(Planned changes)

0.18.0 同时预告了后续方向,对做升级规划的用户很重要:

  • 默认收款地址类型将转向原生 segwit(bech32)。自 0.16.0 起,内置钱包默认生成 P2SH 包装 segwit 地址(向后兼容所有主流软件)。计划从 0.20 起(预计 0.18 之后约一年)默认使用 bech32 地址以获得额外费用节省;如果项目观察到足够多的采用,会在 0.19(约 2019 年 11 月)就提前切换。用户始终可在 GUI 或 RPC 中继续请求 P2SH-wrapped segwit 地址,也可自行配置默认地址类型;想立即尝鲜的用户可以在 0.16.0 起的任意版本中设置 addresstype=bech32
  • BIP 61 reject 消息弃用。reject 消息在 P2P 网络上没有实际用例,大多数节点仅记录日志用于调试;它们增加带宽、并可能对隐私与安全有害。自 0.17 起可用 -enablebip61=0 关闭;BIP 61 消息将在未来版本中先默认关闭、再被完全移除。

14. 低层变更(Low-level changes)

本章多为测试用途,生产环境大多不相关,但为完整性列出:

  • submitblock:此前第一次处理某无效区块时返回具体拒绝原因,后续再次处理同一区块返回笼统的 "duplicate"。现在对无效块总是返回根本拒绝原因,"duplicate" 仅用于已接受的合法块(#13983)。
  • submitheader(新 RPC):允许独立于区块体提交区块头,基本只用于测试(#13399)。
  • signrawtransactionwithkey / signrawtransactionwithwallet:可选接受 witnessScript(P2WSH/P2SH-P2WSH 的见证脚本),与 listunspent 的变更保持一致。
  • walletprocesspsbt / walletcreatefundedpsbt:当 bip32derivs=true 但某公钥的元数据尚未升级时,该公钥会按"独立密钥"方式给出推导路径(无推导路径、master fingerprint 为自身)。
  • 配置-usehd 自 0.16.0 起已移除(此后新建钱包均为 HD 钱包),0.18.0 起把 -usehd 明确变为非法配置选项(#14282)。
  • 网络:本版本允许被节点因不当行为(如发送非法数据)自动断开的 peer 重新连接(前提是有空闲入站槽位;槽位满时,会优先断开有劣迹的节点,除非它对节点有其他帮助,例如连接了你其他 peer 很少的网络区域)。此前 Core 会对劣迹 peer 的 IP 封禁一段时间(默认 1 天),而这很容易被多 IP 攻击者绕过。手动封禁(如 setban)不受影响,仍会拒绝所有连接。这项由 Banman 回归(#14605 "Return of the Banman")与 #14929 共同实现,封禁管理实现见 src/banman.cpp
  • 钱包:HD seed 首次可用时需要升级 key 元数据——未加密钱包在加载时进行,加密钱包在首次解锁时进行;新加密钱包不再要求重启软件,而是通过完全卸载并重载钱包达到同样效果(#12493)。
  • HWI:Bitcoin Core 的一个子项目提供硬件钱包交互(Hardware Wallet Interaction)脚本,让命令行用户可以把多种主流硬件密钥管理设备与 Bitcoin Core 配合使用。
  • 安全(RNG 替换):随机数发生器从 OpenSSL 切换为 Bitcoin Core 自研实现;不过 Core 收集的熵仍会喂给 OpenSSL、在需要强随机性时再读回。此举让 Core 进一步减少对 OpenSSL 的依赖(该依赖历史上曾引发安全问题)。新实现从多个来源收集熵,包括支持 rdseed CPU 指令的硬件(#14955、#15250、#14624)。
  • 平台:macOS 上,在初始同步(落后链尖超过 100 个区块)或 reindex 期间,Bitcoin Core 会主动退出系统的 "app nap" CPU 节流,避免这些操作被系统省电策略拖得过慢(#12783)。

15. 变更日志与贡献

0.18.0 的 changelog 按子系统列出约 600 个合并 PR(Consensus、Mining、Block and transaction handling、P2P protocol and network code、Wallet、RPC and other APIs、GUI、Build system、Tests and QA、Platform support、Miscellaneous、Documentation),其中值得留意的代表性条目包括:

  • #14247:修复交易内重复输入导致的共识层崩溃(Consensus 类别,全 changelog 唯一的共识修复);
  • #12254:BIP 158 Compact Block Filters for Light Clients(轻客户端区块过滤,由 jimpo 实现,当前仓库对应 src/blockfilter.cpp);
  • #15193-whitelistforcerelay 默认关闭(见第 3.5 节);
  • #15429:更新 assumevalidminimumchainwork 至高度 563378;
  • #15226 / #13926:空白(blank)钱包与 bitcoin-wallet 工具落地;
  • #13578:zeromq 升级到 4.2.5;
  • #11526 / #14062:Visual Studio 构建配置与 MSVC 工程文件生成脚本,Windows 原生构建走向体系化。

发布说明最后向 120 余位直接贡献者致谢(jnewbery、sipa、MarcoFalke、ken2812221、promag、hebasto 等),以及翻译者社区。

16. 升级核对清单

结合以上全部变更,从 0.17.x 升级到 0.18.0 的运维核对清单:

  1. 挖矿节点:确认 GBT 调用带 {"rules": ["segwit"]},否则 0.18.0 起直接报错;
  2. RPC 客户端:移除对 signrawtransaction、account API、addwitnessaddress 的调用;测试脚本把 generate 换成 generatetoaddress(或临时加 -deprecatedrpc=generate);validateaddress 的已迁移字段改从 getaddressinfo 读取;
  3. 配置文件:检查段名拼写(仅 [main]/[test]/[regtest] 合法);rpcpassword 不得含 #;不再依赖 rpcallowip 隐式监听,必要时显式 rpcbind;如确有公网 RPC 暴露需求,收敛到 127.0.0.1 并走反向代理;
  4. systemd 部署:迁移数据目录到 /var/lib/bitcoind,确认磁盘空间(df -h),知晓 datadir 不能再用配置文件覆盖;
  5. 依赖 PSBT/冷钱包流程:可利用 analyzepsbtutxoupdatepsbtjoinpsbts 完善离线签名流水线,参考 doc/psbt.mddoc/descriptors.md
  6. 多钱包 GUI 用户:升级期间避免在 coin control 对话框中切换钱包;
  7. 策略前瞻:评估 addresstype=bech32 提前切换默认地址类型,为 0.19/0.20 的默认值切换做准备。

参考文件索引

主题 仓库路径
本文主体文档 doc/release-notes/release-notes-0.18.0.md
systemd 服务文件 contrib/init/bitcoind.service
init 文件说明 doc/init.md
ZMQ 文档 doc/zmq.md
ZMQ HWM 参数注册 src/init.cpp
ZMQ HWM 默认值 src/zmq/zmqabstractnotifier.h
whitelistforcerelay 默认值 src/net_permissions.h
GBT segwit 强制校验 src/rpc/mining.cpp
getnodeaddresses 实现 src/rpc/net.cpp
deriveaddresses/getdescriptorinfo src/rpc/output_script.cpp
joinpsbts/analyzepsbt/utxoupdatepsbt src/rpc/rawtransaction.cpp
getrpcinfo src/rpc/server.cpp
REST blockhashbyheight 路由 src/rest.cpp
REST 接口文档 doc/REST-interface.md
JSON-RPC 接口文档 doc/JSON-RPC-interface.md
描述符文档 doc/descriptors.md
PSBT 文档 doc/psbt.md
bitcoin.conf 文档 doc/bitcoin-conf.md
bitcoin-wallet 工具入口 src/bitcoin-wallet.cpp
rpcauth 脚本 share/rpcauth/rpcauth.py
依赖构建系统 depends/README.md
上一版本发布说明(account→label 对照) doc/release-notes/release-notes-0.17.0.md

最后说明适用前提:本文事实以 0.18.0 发布说明为准;引用当前仓库源码的位置用于佐证实现现状,仓库为持续演进的 master 分支,部分字段与默认值(如 bip125-replaceable 的弃用标注、ZMQ HWM 选项数量)是 0.18.0 之后的演进结果,文中已逐处标明。

登录后查看全文
热门项目推荐
相关项目推荐