首页
/ Bitcoin Core 0.14.0 发行说明详解:假想有效块、内存池持久化与 P2P 重构如何重塑同步与验证

Bitcoin Core 0.14.0 发行说明详解:假想有效块、内存池持久化与 P2P 重构如何重塑同步与验证

2026-09-06 15:20:20作者:戚魁泉Nursing

Bitcoin Core 0.14.0 是一次以“性能与同步速度”为主线的重大版本更新:验证与网络传播性能被大幅优化,首次下载(IBD)时间显著缩短,并引入了 assumevalid 假想有效块、内存池落盘、手动区块裁剪、JSON-RPC 命名参数等一批对运维和开发者都直接有用的能力。本文基于仓库中归档的 0.14.0 发行说明 逐节展开,并结合当前仓库源码中的对应实现(如 src/cuckoocache.hsrc/node/chainstatemanager_args.cpp)印证各功能在代码层面如何落地,帮助读者在理解设计动机之外,还能定位到可验证的源码依据。

兼容性说明

发行说明首先明确了 0.14.0 的测试与支持范围:

  • Bitcoin Core 在基于 Linux 内核的系统、macOS 10.8+ 以及 Windows Vista 及更高版本上经过充分测试;
  • 微软已于 2014 年 4 月 8 日结束对 Windows XP 的支持,软件不主动阻止在 XP 上安装或运行,但存在已知的不稳定问题,属于“自担风险”;
  • 其他类 Unix 系统上应当也能工作,但未做频繁测试。

这一点在后续版本中也有延续,例如构建系统的 changelog 条目 “depends: Set OSX_MIN_VERSION to 10.8” 与 “Document dropping OS X 10.7 support” 都印证了 0.14.0 对 macOS 最低版本要求提升到 10.8 的事实。

性能改进:为什么 0.14.0 同步得更快

发行说明将性能改进列为最显著的变更,列出了五项具体措施。它们在 0.14.0 中共同作用,使 IBD 时间与区块获取速度都有量级上的改善:

  1. 签名缓存重写为 Cuckoo Cache。原来的脚本签名缓存被重新实现为 “cuckoo cache”,可以缓存更多签名且查找更快。在当前仓库中,该实现位于 src/cuckoocache.h:它是一组“高性能缓存原语”,采用位打包的原子标志做惰性垃圾回收,erase 操作无锁(lockfree),元素在下一次插入时才真正被清除——这正是面向高并发验证线程设计的典型结构。对应 changelog 条目为 “#8895 b83264d Better SigCache Implementation (JeremyRubin)” 和 “#8524 19b0f33 Precompute sighashes (sipa)”。

  2. 引入 assumevalid(假想有效块)。允许对已知良好区块的祖先跳过脚本验证,且不改变安全模型。设计动机与用法详见下文专节。

  3. BIP152 紧凑区块(CMPCTBLOCK)在未完全验证前即可中继。在部分场景下,紧凑区块消息会在完整区块被连接验证之前先行转发,加速全网的区块传播。changelog 中可对应 “#9375 3908fc4 Relay compact block messages prior to full block connection (TheBlueMatt)”。

  4. P2P 网络层按并发与吞吐量重构。这是 0.14.0 最大规模的重构之一:网络操作不再被验证(cs_main 锁持有)阻塞,区块获取在很多场景下比之前版本快数倍。changelog “P2P protocol and network code” 一节集中体现了这一点,例如:

    • “#9441 8b66bf7 Massive speedup. Net locks overhaul (theuni)”(网络锁全面改造);
    • “#9252 ce5c1f4 Release cs_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar)”;
    • “#8969 3665483 / #9075 9346f84 Decouple peer-processing-logic from block-connection-logic”(将 peer 处理逻辑与区块连接逻辑解耦,分三部分合入)。
  5. UTXO 缓存借用内存池的空闲内存。初始下载阶段内存池没有用途,因此 UTXO 缓存可以占用 -maxmempool 预留出的未用内存,缓解 IBD 中 UTXO 查找这一主要瓶颈。changelog 对应 “#8610 c252685 Share unused mempool memory with coincache (sipa)”。

需要注意的副作用:由于 UTXO DB 缓存(由 -dbcache 控制)会在有余量时从内存池借内存,对于过去仅靠 -dbcache 来限制 IBD 内存使用的节点,0.14.0 的 IBD 内存占用可能有所上升。这是发行说明明确提示的行为变化。

手动区块裁剪(Manual Pruning)

自 0.11 起 Bitcoin Core 支持自动裁剪(pruning):绝大多数区块数据在处理完成后即可从磁盘丢弃,仅保留很少的数据,从而大幅节省存储空间。0.14.0 在此之上新增了手动裁剪能力:

  • 启动时设置 -prune=1 开启手动裁剪模式;
  • 之后可通过 RPC 命令 pruneblockchain <height|timestamp> 将区块链裁剪到指定高度或时间戳。

从源码层面可以印证这一链路:启动参数在 src/init.cpp 中注册,其帮助文本明确说明该模式与 -txindex 不兼容;裁剪到具体文件范围的计算逻辑位于 src/node/blockstorage.h(“Calculate the block/rev files to delete based on height specified by user with RPC command pruneblockchain”);RPC 实现入口在 src/rpc/blockchain.cpppruneblockchain()。启用后,初始化时会打印日志 “Block pruning enabled. Use RPC call pruneblockchain(height) to manually prune block and undo files.”(见 src/node/chainstate.cpp)。

changelog 中与手动裁剪相关的改进包括:

  • “#7871 e2e624d Manual block file pruning (mrbandrews)”(核心实现);
  • “#9778 ad168ef Add two hour buffer to manual pruning (morcos)”——为避免裁掉仍可能被引用的区块,手动裁剪在目标高度前保留约两小时的缓冲窗口;
  • “#9518 a65ced1 Return height of last block pruned by pruneblockchain RPC (ryanofsky)”,使 pruneblockchain 的返回值携带实际被裁剪到的最后区块高度。

getinfo 被弃用:字段去向一览表

0.14.0 弃用了 getinfo RPC:它的每个字段都已迁移到其他命令的输出中,且这些命令还提供更丰富的信息。发行说明给出的完整映射表如下(原文档骨架内容,完整保留):

getinfo 字段 迁移至
"version" getnetworkinfo()["version"]
"protocolversion" getnetworkinfo()["protocolversion"]
"walletversion" getwalletinfo()["walletversion"]
"balance" getwalletinfo()["balance"]
"blocks" getblockchaininfo()["blocks"]
"timeoffset" getnetworkinfo()["timeoffset"]
"connections" getnetworkinfo()["connections"]
"proxy" getnetworkinfo()["networks"][0]["proxy"]
"difficulty" getblockchaininfo()["difficulty"]
"testnet" getblockchaininfo()["chain"] == "test"
"keypoololdest" getwalletinfo()["keypoololdest"]
"keypoolsize" getwalletinfo()["keypoolsize"]
"unlocked_until" getwalletinfo()["unlocked_until"]
"paytxfee" getwalletinfo()["paytxfee"]
"relayfee" getnetworkinfo()["relayfee"]
"errors" getnetworkinfo()["warnings"]

对自动化脚本的启示:凡是解析 getinfo 输出的代码都应改为调用这三个专用命令(getblockchaininfo / getnetworkinfo / getwalletinfo),这也是后来版本中 getinfo 彻底移除的铺垫。

ZMQ 通知系统在 Windows 上可用

在此之前,ZeroMQ 通知系统在 Windows 上因各种 ZMQ 库自身问题而不可用。这些问题在上游(ZMQ 库)被修复后,0.14.0 起 Windows 也可以构建并使用 ZMQ 通知。changelog 对应 “#8238 6caf3ee ZeroMQ 4.1.5 && ZMQ on Windows (fanquake)”,即依赖包升级到 ZeroMQ 4.1.5 并打通 Windows 构建。使用方式的通用文档见 ZMQ 文档

调试控制台的嵌套 RPC 命令

0.14.0 给 GUI 的调试控制台(Debug Console)增加了嵌套命令能力:一条命令的输出可以直接作为另一条命令的输入,无需分步执行。语法要点:

  • 嵌套命令使用圆括号语法,如 getwalletinfo(),并且可以层层嵌套,例如:

    getblock(getblockhash(1))
    
  • 简单值查询使用方括号:以数组下标或非引号字符串访问对象值,例如:

    listunspent()[0][txid]
    
  • 圆括号语法与普通 RPC 命令语法中,参数分隔符逗号和空格均可使用。

对应 changelog 条目 “#7783 4335d5a RPC-Console: support nested commands and simple value queries (jonasschnelli)”,同批还合入了 “#9330 47e6a19 Console: add security warning” 与 “#9329 db45ad8 Console: allow empty arguments”。

网络活动开关(setnetworkactive)

0.14.0 同时以 RPC 命令和 GUI 开关两种形式提供“一键关闭/开启全部 P2P 网络活动”的能力:

  • GUI 中,主窗口右下角的网络状态图标即为开关:点击一次切换全部 p2p 网络活动的启用/禁用;禁用时图标呈灰色并带 X;
  • 新增 setnetworkactive RPC 命令,行为与图标相同:接受一个布尔参数,true 启用网络,false 禁用网络。

源码层面:当前仓库的 src/rpc/net.cppsetnetworkactive() 即为该命令的实现;此外 0.14.0 还引入了配套的 -networkactive 启动参数(见 src/init.cpp 中 “Enable all P2P network activity (default: 1). Can be changed by the setnetworkactive RPC command” 的参数注册)。changelog 对应 “#8996 ab914a6 Network activity toggle (luke-jr)” 和 “#9131 62af164 fNetworkActive is not protected by a lock, use an atomic (jonasschnelli)”。

不同步状态下的模态信息层(Out-of-sync Modal Info Layer)

当节点启动时处于落后同步(out-of-sync)状态,主窗口上方会显示一层半透明信息层,内容包括当前同步进度详情,并估算剩余同步时间。点击窗口底部进度条可以隐藏或重新显示该层。

相关 GUI 改动还包括(changelog “GUI” 一节):

  • “#8371 24f72e9 Add out-of-sync modal info layer (jonasschnelli)”(核心实现);
  • “#8821 bf8e68a sync-overlay: Don't block during reindex” 与 “#8906 088d1f4 sync-overlay: Don't show progress twice”(reindex 期间不阻塞、进度不重复显示的修复);
  • “#9461 b250686 Improve progress display during headers-sync and peer-finding (jonasschnelli)”,改善头部同步与寻找 peers 阶段的进度展示。

JSON-RPC 命名参数与 bitcoin-cli -named

0.14.0 起,通过 JSON-RPC 接口和 bitcoin-cli 发送的命令支持命名参数,遵循 JSON-RPC 规范中以对象按名传参的约定。bitcoin-cli 在提供 -named 选项时解析 name=value 形式的参数,示例(发行说明原文):

src/bitcoin-cli -named help command="help"
src/bitcoin-cli -named getblockhash height=0
src/bitcoin-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
src/bitcoin-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true

要点:

  • 命名参数的顺序无关
  • 命名参数还可以省略应保持默认值的参数,例如 sendtoaddress 中较少使用的 commentcomment_to
  • 发行说明同时注明:当时这一特性尚未覆盖所有 RPC 调用,“预计在后续版本落地”;
  • RPC 服务端对位置参数完全向后兼容

从源码演进看,命名参数解析机制保留至今:src/bitcoin-cli.cpp 中仍注册有 -named 选项(“Pass named instead of positional arguments”),src/rpc/client.cpp 中的注释解释了命名参数与位置参数的区分规则及 NAME=VALUE 语法。changelog 对应 “#8811 5754e03 Add support for JSON-RPC named arguments (laanwj)” 与 “#8722 bb843ad bitcoin-cli: More detailed error reporting (laanwj)”。

发送交易时选择加入 RBF(-walletrbf)

0.14.0 新增启动选项 -walletrbf:开启后,钱包发出的所有交易都选择加入(opt in)RBF(Replace-By-Fee)支持。

  • 默认值为 false,即默认交易不加入 RBF;
  • 配合新的 bumpfee RPC,可以替换掉已选择加入 RBF 的交易,支付更高手续费以提高快速确认的概率。

对应 changelog:“#8601 37ac678 Add option to opt into full-RBF when sending funds (rebase, original by petertodd) (laanwj)”,以及 bumpfee 的一系列完善(“#8456 2ef52d3 Simplified bumpfee command (mrbandrews)”、“#9640 7bfb770 Bumpfee: bugfixes for error handling and feerate calculation (sdaftuar)”、“#9673 8d6447e Set correct metadata on bumpfee wallet transactions (ryanofsky)”)。

适用前提与现状提示:-walletrbf 只在 0.14.0 时代是新增功能;在当前仓库源码中它已被标记为弃用(src/wallet/init.cpp 中注册文本为 “(DEPRECATED) Send transactions with full-RBF opt-in enabled”),阅读旧发行说明时需注意这一后续演进。

调试控制台历史不再保留敏感数据

调试控制台维护一份可通过上方向键回放的命令历史,方便重复执行。0.14.0 起,包含敏感信息(如密码、私钥)的命令在历史中被回放时,参数位置会被替换为 (...),避免口令、私钥等以明文残留在历史列表里。对应 changelog “#8877 6dc4c43 Qt RPC console: history sensitive-data filter, and saving input line when browsing history (luke-jr)”。

内存池跨重启保留(mempool.dat)

0.14.0 起,内存池会在节点关闭前保存到数据目录的 mempool.dat 文件中:

  • 节点重启后,内存池可以直接从文件回填,无需等待新交易被创建;
  • 通过 prioritisetransaction 等命令对交易做出的 fee delta / 优先级调整也会随文件保留,重启不丢失。

当前仓库中该机制的落盘路径在 src/node/mempool_persist_args.cppMempoolPath() 返回 GetDataDirNet() / "mempool.dat";加载逻辑在 src/node/mempool_persist.cppLoadMempool(),由启动流程调用(见 src/init.cpp 中对 ShouldPersistMempool(args) ? MempoolPath(args) : fs::path{} 的判断)。changelog 对应 “#8448 101c642 Store mempool and prioritization data to disk (sipa)” 和 “#9813 3972a8e Read/write mempool.dat as a binary (paveljanik)”(读写格式改为二进制以提升效率)。“Block and transaction handling” 一节中还有若干配套修复,例如 “#9596 71148b8 bugfix save feeDelta instead of priorityDelta in DumpMempool (morcos)” 与 “#9133 434e683 Unset fImporting for loading mempool (morcos)”。

最终告警(Final Alert)

告警系统(Alert System)在 0.12.1 被禁用并弃用,在 0.13.0 被移除。0.14.0 内置了一条“序列号最大的最终告警”:任何仍支持告警系统的旧节点收到后,会显示一段硬编码的 “Alert Key Compromised”(告警密钥已泄露)静态消息,并且该告警不可被其他告警覆盖。这条最终告警被硬编码在 0.14.0 中,确保所有旧节点都能收到最后一条提示。changelog 对应 “#9594 fd70211 Send final alert message to older peers after connecting (gmaxwell)”。

GUI 变更

发行说明列出三项 GUI 变更,逐条对应 changelog “GUI” 一节:

  1. 重置选项后重新选择数据目录。点击选项对话框的 Reset Options 按钮或使用 -resetguioptions 启动参数重置选项后,用户会被再次提示选择数据目录——因为选项重置会清掉自定义数据目录,这样可确保自定义数据目录在重置后仍然有效(#9718 369d3a Qt/Intro: Various fixes)。
  2. peers 列表支持多选。调试窗口的节点列表中现在可以多选 peers,从而批量 ban 或断开连接,而不必逐个操作(#8874 e984730 Multiple Selection for peer and ban tables (achow101))。
  3. HD 钱包状态指示器。主窗口右下角新增图标指示当前使用的钱包是否为 HD 钱包;非 HD 钱包时图标灰色并带 X(#8517 2468292 Show wallet HD state in statusbar (jonasschnelli))。

底层 RPC 变更

0.14.0 对若干 RPC 做了不兼容或行为调整,升级时需要逐一核对自动化脚本:

  • importprunedfunds 只接受两个必需参数。某些旧版本会接受一个永远被忽略的第三个可选参数——不要传超过两个参数;
  • getaddednodeinfo 的第一个布尔参数被移除,这是不兼容变更(#8272 91990ee Make the dummy argument to getaddednodeinfo optional (sipa));
  • getmininginfo 移除了 "testnet" 字段,统一使用已存在多年的通用 "chain" 字段;
  • 新增 preciousblock RPC:把某区块标记为 “precious”,使其被当作比竞争区块更早收到(用于手动干预链选择,#6996 7f71a3c Add preciousblock RPC (sipa));
  • 新增 importmulti RPC:接收一个 JSON 对象数组,批量导入公钥、私钥、地址、脚本/P2SH(#7551 f2d7056 Add importmulti RPC call (pedrobranco))。配套修复还包括:要求私钥携带时间戳(#9682 edc9e63)、为导入的 watch-only 键使用 importmulti 时间戳(#9108 d8e8b06)、无效地址返回错误(#9756 7a93af8)、rescan 失败时返回错误(#9773 9072395),以及 #9761 为密钥时间戳引入两小时宽限期等;
  • getrawtransaction 获取已确认且输出未花费的交易被弃用:当前仍可用,但未来可能变为只能查询内存池交易或要求启用 txindex(#9520 2456a83 Deprecate non-txindex getrawtransaction and better warning (sipa));
  • 新增 getmemoryinfo RPC:返回 Bitcoin Core 的内存使用信息,随内存管理优化(#8753 f8723d2 Locked memory manager (laanwj))一并加入;
  • 新增 bumpfee RPC:将发出时选择了 RBF 的未确认钱包交易替换为支付更高手续费的新交易(配合 -walletrbf)。

另外 getblockchaininfobip9_softforks 数据也得到增强(#7948 5d2c8e5),getrawtransaction 的 verbose 参数被规范为布尔类型(#9025 4d8558a)。

HTTP REST 变更

UTXO 集合查询接口:

GET /rest/getutxos/<checkmempool>/<txid>-<n>/<txid>-<n>/.../<txid>-<n>.<bin|hex|json>

当请求包含无效参数时,响应状态码从 HTTP_INTERNAL_SERVER_ERROR(500)改为 HTTP_BAD_REQUEST(400),语义更准确。changelog 对应 “#8638 f061415 rest.cpp: change HTTP_INTERNAL_SERVER_ERROR to HTTP_BAD_REQUEST (djpnewton)”。

最低费率策略:从 -minrelaytxfee 中拆分出的概念

自 0.12 起,内存池自动限容与挖矿代码的建块性能改进使得中继节点和矿工不再需要特意设置 -minrelaytxfee。0.14.0 把原先绑定在该选项上的三个概念分离出来:

  • 增量中继费率(incremental relay fee):用于 BIP125 替换与内存池限容计算,值为 1000 satoshi/kB;
  • 粉尘输出(dust)阈值计算:实际生效为 3 * 1000 satoshi/kB;
  • 建块最低包费率:挖矿代码在建块时包含交易的最低费率。矿工如需设置,可用新增的 -blockmintxfee 选项(默认 1000 satoshi/kB)。

-minrelaytxfee 选项继续存在,但建议不再设置。当前仓库中 -blockmintxfee 的参数注册仍在 src/init.cpp(“Set lowest fee rate (in BTC/kvB) for transactions to be included in block creation”),参数解析位于 src/node/mining_args.cpp。“Separate different uses of minimum fees (morcos)”(#9380 dd98f04)即完成这一拆分。

手续费估算变更

  • 1 区块确认目标的手续费估算被禁用(自 0.13.2 起已有此限制):GUI 的手续费滑块不再提供 1 区块目标——本来这一目标的数据也经常不足。estimatefee 1 将始终返回 -1,estimatesmartfee 1 则从目标 2 开始搜索(#9239 3fbf079 Disable fee estimates for 1-block target (morcos))。
  • 默认确认目标改为 6 区块:GUI(原为 25)与 RPC 调用(原为 2)的默认目标统一调整为 6。changelog 对应 “#9036 ed0cc50 Change default confirm target from 2 to 6 (laanwj)” 与 “#8989 d2143dc Overhaul smart-fee slider, adjust default confirmation target (jonasschnelli)”。

移除优先级(coin age)估算

  • 面向“在 N 个区块内被包含”所需的 “priority” 估算被移除;相应 RPC 被弃用,将返回 -1 或 1e24(视上下文而定)。fee_estimates.dat 文件格式同步变更,不再保存优先级估算,并会被自动转换为新版本格式——新格式旧版本软件无法读取
  • 挖矿中基于 “priority”(coin age)的交易排序被视为弃用,计划在下一个大版本移除。注意这与 prioritisetransaction RPC 无关,后者仍会持续支持(用于给交易添加 fee delta)。

对应 changelog:“#7730 3c03dc2 Remove priority estimation (morcos)”、“#9753 23281a4 Release notes for estimation changes (morcos)”、“#8828” 等钱包/挖矿侧清理,以及 GUI 侧 “#8463 62a5a8a Remove Priority from coincontrol dialog (MarcoFalke)”(CoinControl 对话框移除 Priority 列)。

P2P 连接管理变更

  • 通过 -addnode 启动参数或 addnode RPC 手动添加的 peers 拥有独立的 8 个连接额度:不与其它入站/出站连接竞争,也不受 -maxconnections 限制(#9319 a55716a Break addnode out from the outbound connection limits (gmaxwell));
  • 到手动添加 peers 的新连接建立得更快。

assumevalid:假想有效块的设计动机

这是 0.14.0 最具代表性的一项设计,发行说明给出了完整论证,值得完整理解:

  1. IBD 的瓶颈在脚本/签名验证。验证本身必须通过以保障系统安全,但除此之外,验证过程不产生其他必需结果:如果节点已知某区块的历史是有效的,就可以跳过对其祖先区块的脚本检查;
  2. 新增配置选项 assumevalid 用来把这一知识告诉软件。它与历史上的 “checkpoints”(检查点)有本质区别:
    • 检查点强制使用某条链;而 assumevalid 不强制——与该设置一致的链会被更快处理,但其它链在正常情况下若仍是最优链也会被接受;
    • 检查点由软件方固定;而 assumevalid 允许用户自行配置“假定哪段区块历史为真”,因此即使是旧版本软件,只要用户更新该设置,也能获得更快的同步;
  3. 由于“某段链历史是否有效”是简单客观的事实,审查这一配置比审查检查点容易得多,因此软件内置一个默认值,在发版前不久按当前链调整。设置 -assumevalid=0 可禁用默认值,强制全量验证。

源码层面,0.14.0 引入时对应 “#9484 812714f Introduce assumevalid setting to skip validation presumed valid scripts (gmaxwell)” 与 “#9779 3c02b95 Update nMinimumChainWork and defaultAssumeValid (gmaxwell)”。在当前仓库中,参数注册位于 src/init.cpp(“If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: ...)”),取值校验在 src/node/chainstatemanager_args.cpp(非法 hex 会报 “Invalid assumevalid block hash specified”)。行为测试可见 src/test/validation_chainstatemanager_tests.cpp-assumevalid=-assumevalid=0-noassumevalid 均解析为零值(即禁用),超过 64 个 hex 字符或非法 hex 会被拒绝;验证主逻辑中也会记录跳过原因,如 “assumevalid=0 (always verify)”、“block height above assumevalid height” 等(见 src/validation.cpp)。

fundrawtransaction 的找零地址复用问题

这是 0.14.0 修复的一个隐蔽的地址复用缺陷:

  • 0.14 之前fundrawtransaction 默认是“钱包无状态”的。几乎所有情况下它都会给交易添加找零输出,但使用的 keypool 密钥从不被标记为找零地址密钥,而是直接放回 keypool(导致地址复用)。典型现象:调用 fundrawtransaction 之后紧接着调用 getnewaddress,会得到与找零输出地址相同的地址;
  • 0.14 起fundrawtransaction 默认会为找零输出从 keypool 预留(reserve)一个密钥,可用 reserveChangeKey 参数控制,默认 true(#9377 fb75cd0 fundrawtransaction: Keep change-output keys by default, make it optional (jonasschnelli));
  • 发行说明还建议用户配合使用 getrawchangeaddress()fundrawtransactionchangeAddress 选项,以获得更精细的找零地址控制。

变更日志概览(0.14.0 Change log)

发行说明末尾附了完整的详细变更日志,按类别列出影响行为的变更(不含纯代码移动、小重构与字符串更新),每条均附 PR 号、git merge commit 与作者。以下按类别摘录代表性条目,完整版以 release notes 原文 为准:

RPC 与其它 API

  • #8421 httpserver: drop boost dependency (theuni)
  • #8811 Add support for JSON-RPC named arguments (laanwj)
  • #6996 Add preciousblock RPC (sipa)
  • #7551 系列的 #9682/#9756/#9773 importmulti 时间戳、错误处理完善 (ryanofsky)
  • #9222 Add 'subtractFeeFromAmount' option to 'fundrawtransaction' (dooglus)

区块与交易处理

  • #8391 Consensus: Remove ISM (NicolasDorier)
  • #8448 Store mempool and prioritization data to disk (sipa)
  • #8610 Share unused mempool memory with coincache (sipa)
  • #7871 Manual block file pruning (mrbandrews)
  • #9312 Increase mempool expiry time to 2 weeks (morcos)
  • #8580 Make CTransaction actually immutable (sipa)

P2P 协议与网络代码

  • #9441 Massive speedup. Net locks overhaul (theuni)
  • #8128 Turn net structures into dumb storage classes (theuni)
  • #8282 Feeler connections to increase online addrs in the tried table (EthanHeilman)
  • #9319 Break addnode out from the outbound connection limits (gmaxwell)
  • #9715 Disconnect peers which we do not receive VERACKs from within 60 sec (TheBlueMatt)
  • #9730 Remove bitseed.xf2.org from the dns seed list (jonasschnelli)

验证(Validation)

  • #8895 Better SigCache Implementation (JeremyRubin)
  • #9484 Introduce assumevalid setting to skip validation presumed valid scripts (gmaxwell)
  • #9779 Update nMinimumChainWork and defaultAssumeValid (gmaxwell)
  • #8524 Precompute sighashes (sipa)

构建系统

  • #8238 ZeroMQ 4.1.5 && ZMQ on Windows (fanquake)
  • #9114 depends: Set OSX_MIN_VERSION to 10.8 (fanquake)
  • #8819 depends: Boost 1.61.0 (fanquake)
  • #9249 系列之外的 #8249 Enable (and check for) 64-bit ASLR on Windows (laanwj)
  • #9789 build: add --enable-werror and warn on VLA's (theuni)

GUI

  • #8371 Add out-of-sync modal info layer (jonasschnelli)
  • #7783 RPC-Console: support nested commands and simple value queries (jonasschnelli)
  • #8517 Show wallet HD state in statusbar (jonasschnelli)
  • #8874 Multiple Selection for peer and ban tables (achow101)
  • #8877 Qt RPC console: history sensitive-data filter (luke-jr)

钱包

  • #8601 Add option to opt into full-RBF when sending funds (laanwj)
  • #8753 Locked memory manager (laanwj)
  • #9036 Change default confirm target from 2 to 6 (laanwj)
  • #9404 Smarter coordination of change and fee in CreateTransaction (morcos)
  • #8486 Add high transaction fee warnings (MarcoFalke)
  • #8776 Wallet refactoring leading up to multiwallet (luke-jr)

测试与 QA

  • #8450 Replace rpc_wallet_tests.cpp with python RPC unit tests (pstratem)
  • #9172 Resurrect “Simple fuzzing framework” (laanwj)
  • #9202 bench: Add support for measuring CPU cycles (laanwj)
  • #9638/#9820 修复与手动裁剪两小时窗口相关的 pruning 测试

文档

  • #8892 Add build instructions for FreeBSD (laanwj)
  • #8925 Display minimum ping in debug window 对应的帮助文本更新(#9297 Various RPC help outputs updated (Mirobit))
  • #9022/#9033 Document dropping OS X 10.7 support (fanquake, MarcoFalke)

其他

  • #8813 bitcoind: Daemonize using daemon(3) (laanwj)
  • #9289 net: drop boost::thread_group (theuni)
  • #9625 Increase minimum debug.log size to 10MB after shrink (morcos)
  • #8613 LevelDB 1.19 (sipa)
  • #8863/#8807 univalue: Pull subtree (MarcoFalke)
  • #9856 Terminate immediately when allocation fails (theuni)

小结与适用前提

0.14.0 的核心价值可以概括为三点:其一,通过 cuckoo 签名缓存、assumevalid、紧凑区块提前中继、网络锁重构和 UTXO 缓存共享内存,把 IBD 与区块传播速度提升到新水平;其二,把一批运维能力产品化——手动裁剪、内存池持久化、setnetworkactive、命名参数 CLI、bumpfee/importmulti 等 RPC,显著降低了节点运维与钱包脚本开发的摩擦;其三,明确弃用与拆分了一批旧概念(getinfo、优先级排序、-minrelaytxfee 的多重职责),为 segwit 时代的手续费策略铺路。

需要提醒的是:本文以发行说明原文为事实边界,其中描述的行为对应 0.14.0 时代;当前仓库是持续演进的代码库,同名选项可能有默认值或状态变化(例如 -walletrbf 在当前源码中已标注 DEPRECATED,assumevalid 的默认值随版本更新而滚动调整),在将本文结论套用到具体版本前,应以该版本的发行说明与对应源码为准。

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