Bitcoin Core 0.18.0 发布说明详解:新 RPC、描述符与 PSBT 工具、配置项与部署变更全解析
本文以 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 的惯例:
- 停止旧版本节点,等待其完全退出(旧版本可能需要几分钟);
- 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.h:static 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=bitcoind、ConfigurationDirectory=bitcoin、StateDirectory=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=true、ProtectSystem=full、ProtectHome=true、NoNewPrivileges=true、PrivateDevices=true、MemoryDenyWriteExecute=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)。
内存池 RPC:getrawmempool(verbose=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选项的文档)。
描述符联动字段 desc:getaddressinfo、listunspent、scantxoutset 现在都会额外返回一个 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 组装过区块时,省略 currentblockweight 与 currentblocktx(#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 部分字段 |
弃用 | ismine、iswatchonly、script、hex、pubkeys、sigsrequired、pubkey、embedded、iscompressed、label、timestamp、hdkeypath、hdmasterkeyid 已移至 getaddressinfo |
validateaddress/getaddressinfo 的 addresses 字段 |
移除 | 该字段用 P2PKH 地址指代公钥、易混淆;改用 embedded.address 或 pubkeys |
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 标签页:若钱包是通过
createwalletRPC 配合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 的依赖(该依赖历史上曾引发安全问题)。新实现从多个来源收集熵,包括支持
rdseedCPU 指令的硬件(#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:更新
assumevalid、minimumchainwork至高度 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 的运维核对清单:
- 挖矿节点:确认 GBT 调用带
{"rules": ["segwit"]},否则 0.18.0 起直接报错; - RPC 客户端:移除对
signrawtransaction、account API、addwitnessaddress的调用;测试脚本把generate换成generatetoaddress(或临时加-deprecatedrpc=generate);validateaddress的已迁移字段改从getaddressinfo读取; - 配置文件:检查段名拼写(仅
[main]/[test]/[regtest]合法);rpcpassword不得含#;不再依赖rpcallowip隐式监听,必要时显式rpcbind;如确有公网 RPC 暴露需求,收敛到127.0.0.1并走反向代理; - systemd 部署:迁移数据目录到
/var/lib/bitcoind,确认磁盘空间(df -h),知晓datadir不能再用配置文件覆盖; - 依赖 PSBT/冷钱包流程:可利用
analyzepsbt、utxoupdatepsbt、joinpsbts完善离线签名流水线,参考 doc/psbt.md 与 doc/descriptors.md; - 多钱包 GUI 用户:升级期间避免在 coin control 对话框中切换钱包;
- 策略前瞻:评估
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 之后的演进结果,文中已逐处标明。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00