新闻详情

新闻详情

首页 / 资讯中心 / 详情

Bitcoin Core 0.15.0 深度解析:per-output 链状态模型、多钱包支持与手续费估算重构

发布时间:2026/9/7 2:50:42来源:尧图网络
Bitcoin Core 0.15.0 深度解析:per-output 链状态模型、多钱包支持与手续费估算重构
Bitcoin Core 0.15.0 深度解析per-output 链状态模型、多钱包支持与手续费估算重构【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoinBitcoin Core 0.15.0 是该项目早期最重要的版本之一。本篇基于仓库中保留的官方发布说明 doc/release-notes/release-notes-0.15.0.md系统梳理该版本的升级流程与兼容性约束、六大性能改进的底层原理、手续费估算体系重构、多钱包multi-walletRPC 接口规范、Coin Age Priority 策略移除的影响面以及全部新增/变更 RPC 的精确语义并结合当前仓库源码印证这些特性在现代代码中的落点帮助运维与开发者准确理解 0.15.0 的设计决策及其后续演进方向。升级流程与数据兼容性0.15.0 是重大版本升级官方给出如下升级步骤运行旧版本时先将其完全关闭旧版本关闭可能需数分钟再通过安装程序Windows或直接替换/Applications/Bitcoin-QtmacOS或bitcoind/bitcoin-qtLinux完成升级。升级时必须注意三个数据格式层面的事实链状态数据库格式变更首次运行 0.15.0 时chainstate 数据库会被转换到新格式耗时从几分钟到半小时不等取决于机器速度。fee_estimates.dat文件格式变更因此从 0.15.0 降级、或升级到 0.15.0 都会导致所有历史手续费估计数据被丢弃。无 0.8 之前版本的自动升级路径block 数据库格式在 0.8.0 时也发生过变更不存在从 0.7.x 及更早版本直接升级到 0.15.0 的自动代码必须重新下载区块链。不过钱包旧版本数据仍然支持。降级警告0.15.0 的 chainstate 数据库与更早版本不兼容。若运行 0.15 后决定切回旧版本需要旧版本加-reindex-chainstate选项以旧格式重建链状态数据结构如果节点开启了剪枝pruning这等同于重新下载并处理整个区块链。兼容性范围Bitcoin Core 在 Linux 内核、macOS 10.8 以及 Windows Vista 及之后的系统上经过充分测试Windows XP 不受支持大多数其他 Unix-like 系统可以运行但测试频率较低。0.15.0 版本特别注意事项SegWit 地址支持的边界0.15.0 通过addwitnessaddressRPC 支持向钱包添加隔离见证segregated witness地址。但官方明确将其标注为测试/专家级 RPC不保证从备份恢复只有清楚自己在做什么的用户才应调用它完整的钱包端 SegWit 支持在后续版本才落地。加密 HD 钱包的重扫问题与之前版本一致加密 HD 钱包在解锁之前无法补充 keypool密钥池。这意味着从备份恢复一个加密 HD 钱包时用户必须以非常长的超时时间解锁钱包并手动触发重扫否则在自动 topup 无法运行时可能丢失部分密钥。0.15.0 本身还没有rescanRPC只能借助某个import*命令配合另一个可信钱包生成的 dummy 地址来触发重扫。性能改进六大优化及其原理0.15.0 包含一系列显著的性能改进使 IBD初始块下载、启动、交易与区块验证速度大幅提升1. 链状态数据库从 per-transaction 切换为 per-output 模型这是 0.15.0 的核心数据结构变更对应 PR 10195。chainstate 数据库用于跟踪 UTXO从按交易transaction存储改为按输出output存储。该模型的优势避免了对未使用输出进行反序列化/序列化的 CPU 开销内存占用更可预测代码更简单可适配各种未来的缓存刷新策略。量化结果IBD 与 reindex 的区块链验证速度提升约 30-40%内存占用减少 10-20%落盘频率大幅降低唯一代价是磁盘数据库体积增大约 15%格式转换期间可能额外占用数 GB 空间。这一变更也直接引发了后文所述的gettxout等 RPC 响应字段变化——per-output 模型不再存储未花费输出所属交易的版本号。2. 全量-dbcache真正用作缓存早期版本在将 UTXO 更新刷入磁盘时会出现内存尖峰导致-dbcache配置的一半内存只能实际用作缓存另一半要预留用于刷写缓冲。0.15.0 移除了这一限制对应 PR 10148-dbcache的全部额度现在都真正用作缓存刷盘频率因此降低 2 倍以上。3. 脚本验证结果整体缓存此前版本只在交易进入内存池时缓存签名验证结果0.15.0 扩展为缓存整个脚本有效性对应 PR 10192。这意味着若区块中的交易已被内存池接受则无需重新执行 scriptSig 求值。经验测试显示新区块验证速度提升 40-50%。4. LevelDB 升级至 1.20LevelDB 升级到 1.20对应 PR 10544该版本在支持 SSE 4.2 的架构上启用了 CRC 硬件加速同步与区块验证随之变快。当前仓库中src/leveldb/目录即内嵌的 LevelDB 子模块实现。5. SHA256 的 SSE4 硬件优化支持 SSE 4 的架构上 SHA256 提速约 50%整体带来约 5% 的 IBD 与区块验证加速对应 PR 10821。注意0.15.0 的 release 构建默认禁用SHA256 硬件优化构建时需显式传入--enable-experimental-asm才能启用。6. 钱包创建提速约 20 倍keypool 补充refill不再在每生成一个密钥后就刷写钱包新建钱包速度提升约 20 倍对应 PR 10831。部分加速收益被用于把默认 keypool 容量提升到 1000 个密钥使备份恢复更稳健。手续费估算体系重构0.15.0 显著改进了手续费估算钱包使用的估计更准确estimatesmartfee与estimaterawfee也为高级用户提供了更宽的选项对应 PR 10199。内部逻辑与钱包行为变化三个时间尺度内部现在在 3 个不同的时间跨度time horizon上跟踪估计值支持更长的确认目标且对费率环境变化响应更快。conservative 与 economical 两种模式conservative保守模式使用更长时间尺度对费率快速波动不敏感economical经济模式使用较短时间尺度受短期费率变化影响更大——在交易活跃低迷期例如周末可能给出明显更低的估计但如果费率迅速上涨交易可能长时间得不到确认。钱包默认策略默认使用 conservative 估计以保证交易在目标块数内确认的可靠性对于标记为可替代RBF的交易钱包默认改用 economical 估计因为费率条件快速变化时可以用bumpfee提费补救对应 PR 10589。确认目标上限现在支持最多 1008 个块一周的确认目标。存储更多历史费率数据估计更精确。因驱逐eviction或其他非确认原因离开内存池的交易现在也被纳入估算逻辑。估算逻辑会确认数据量足够才返回有意义的估计数据不足时回退到默认费率。手续费 RPC 接口变化estimatefeeRPC 弃用统一改用estimatesmartfeeGUI 使用的就是它。estimatesmartfee接口变更对应 PR 10707nblocks参数改名为conf_target与其他 RPC 命名一致新增estimate_mode参数取值为CONSERVATIVE、ECONOMICAL或UNSET默认按CONSERVATIVE处理返回对象新增errors成员返回处理过程中遇到的错误若节点运行时间不足、见到的块/交易数量不足以产生准确估计会返回错误——旧版用 -1 表示错误容易与费率值混淆。新增estimaterawfeeRPC 返回原始费率数据供外部客户端实现自己的估算逻辑。当前仓库中estimatesmartfee的参数解析仍保留estimate_mode与FeeEstimateMode的语义实现位于 src/rpc/fees.cpp费率数据的时间尺度统计由 src/policy/fees/block_policy_estimator.cpp 维护钱包侧的估计选择逻辑在 src/wallet/fees.cpp——0.15.0 引入的这套接口骨架至今仍在使用。多钱包Multi-wallet支持Bitcoin Core 从 0.15.0 起支持加载多个相互独立的钱包对应 PR 8694、PR 10849各钱包的余额、密钥、收到的交易完全隔离。启用方式启动 Bitcoin 时使用多个-wallet参数命令行或配置文件。GUI 限制bitcoin-qt 中只显示并可操作第一个钱包创建/签名交易GUI 层面的多钱包选择留待后续版本。但即使如此其余已加载钱包会在后台持续与节点当前 tip 保持同步——对剪枝节点尤为有用否则加载一个最近同步位置高于剪枝高度的钱包会迫使重新下载并验证整条区块链。多钱包下的 RPC 接口规则单钱包模式RPC 接口与bitcoin-cli完全不变所有调用方式照旧。多钱包模式下的 node-level RPC所有不依赖钱包的节点级方法照常工作HTTP 请求仍发往常规的RPC IP:RPC 端口端点bitcoin-cli用法不变。多钱包模式下的 wallet-level RPC每个请求必须指明目标钱包HTTP 请求发往RPC IP:RPC 端口/wallet/钱包名例如127.0.0.1:8332/wallet/wallet1.datbitcoin-cli命令加-rpcwallet选项例如bitcoin-cli -rpcwalletwallet1.dat getbalance。新增 node-levellistwalletsRPC列出当前已加载的钱包其返回的名称与 HTTP 端点及rpcwallet参数使用的名称一致。官方同时声明虽然多钱包已完整支持但 0.15.0 的 RPC 多钱包接口仍应视为不稳定未来版本可能做出向后不兼容的修改。当前仓库中HTTP 层在 src/httprpc.cpp 中注册/wallet/前缀的处理器bitcoin-cli在 src/bitcoin-cli.cpp 中实现-rpcwallet参数并据此拼接/wallet/walletname端点listwallets的实现位于 src/wallet/rpc/wallet.cpp功能测试见 test/functional/wallet_multiwallet.py。GUI 中的 Replace-by-Fee 支持Bitcoin Core 自 0.12.0 起支持创建 opt-in RBF 交易自 0.14.0 起提供bumpfeeRPC 以更高费用替换未确认的 opt-in RBF 交易。0.15.0 在 GUI 中同时支持这两项操作对应 PR 9592发送界面可勾选 RBF 选项且内置了带用户确认的简单 fee bumper。Coin Age Priority 的彻底移除此前版本中区块可保留一部分空间给按 UTXO 年龄与价值排序的交易Coin Age Priority。这纯属矿工的政策选择并无共识规则实践中只有极少数矿工还在使用。0.15.0 移除了对 Coin Age Priority 的全部残余支持对应 PR 9602影响面包括“免费交易”概念被移除过去高 Coin Age Priority 交易即使不带矿工费也可被中继现在不再可能。控制免费交易中继的-limitfreerelay与-relaypriority选项因此被删除。-sendfreetransactions选项被移除因为几乎所有矿工都不打包无手续费交易。-blockprioritysize选项被移除。estimatepriority与estimatesmartpriorityRPC 被移除。getmempoolancestors、getmempooldescendants、getmempoolentry、getrawmempool不再返回startingpriority与currentpriority字段。prioritisetransaction不再接受priority_delta参数改为一个无功能的dummy占位参数以保持位置参数兼容该 RPC 仍可通过fee_delta参数改变交易在打包时的表观费率。-minrelaytxfee现在允许设置为 0。一旦设置低于minrelaytxfee每 kB的手续费会被中继、挖矿和交易创建拒绝默认值为 1000 satoshi/kB。-printpriority更新为只输出挖矿代码打包进区块的交易费率与哈希。内存池持久化开关0.14 引入了内存池跨重启持久化关闭前将 mempool 保存至数据目录的mempool.dat重启时恢复。0.15.0 增加-persistmempool命令行选项对应 PR 9966来控制该特性默认值为 true即关闭时保存、启动时加载设为 false 则不加载也不保存mempool.dat。当前仓库中该选项在 src/init.cpp 注册默认值取自DEFAULT_PERSIST_MEMPOOL并新增了-persistmempoolv1选项以兼容旧格式数据文件。0.15.0 新增的 RPC 方法abortrescan中止当前钱包重扫例如由importprivkey触发的重扫对应 PR 10208。combinerawtransaction接受原始交易的 JSON 数组合并为单个原始交易对应 PR 10571。estimaterawfee返回原始费率数据便于外部实现自定义估算逻辑。getchaintxstats返回链上交易总数与速率的统计信息对应 PR 9733。listwallets列出当前已加载钱包详见多钱包章节。uptime返回bitcoind自上次启动以来的总运行时长对应 PR 10400。低级 RPC 变更详解以下是 0.15.0 对既有 RPC 语义的全部底层变更对接集成方务必逐一核对多钱包模式下钱包类 RPC 必须指明目标钱包。per-output 模型不再存储未花费输出的交易版本号因此gettxout响应中不再有version字段gettxoutsetinfo报告hash_serialized_2而非hash_serialized——后者不承诺commit to交易版本号但承诺高度与 coinbase 信息getutxosREST 路径的 JSON 格式不再报告txvers字段二进制格式对交易版本恒报 0。estimatefee弃用改用estimatesmartfee。gettxoutsetinfo响应以disk_size和bogosize取代bytes_serialized前者是对实际磁盘占用的更准确但非确定性估计后者与磁盘占用无关是数据库无关的 UTXO 集合大小度量——每个 UTXO 条目计为 50 加上其 scriptPubKey 长度对应 PR 10426。signrawtransaction不能再用于合并多个交易改用combinerawtransaction对应 PR 10571。fundrawtransaction不再接受reserveChangeKey选项。该选项曾允许用 keypool 中的密钥为找零地址出资而不将其移出 keypool密钥随后可被getnewaddress再次取用可能造成令人困惑甚至危险的行为对应 PR 10784。estimatepriority与estimatesmartpriority被移除Coin Age Priority 移除的连带结果。listunspent新增query_options参数对应 PR 8952为一个 JSON 对象可含以下成员minimumAmount——每个 UTXO 的最小面值maximumAmount——每个 UTXO 的最大面值maximumCount——UTXO 的最大数量minimumSumAmount——所有 UTXO 总面额的最小值。getmempoolancestors、getmempooldescendants、getmempoolentry、getrawmempool不再返回startingpriority与currentpriority。dumpwallet现在返回转储钱包的完整绝对路径此前即使成功也不返回任何值对应 PR 9740。getpeerinfo每个 peer 的返回对象新增addrbind成员包含到该 peer 连接所用的本机 IP 与端口它补充了addrlocal后者是 peer 所报告的本机地址对应 PR 10478。disconnectnode支持按节点 ID 断连除 IP/端口外通过新增的nodeid参数调用对应 PR 10143。prioritisetransaction第二参数由priority_delta改名dummy无任何功能效果仅为位置参数兼容保留。resendwallettransactions在-walletbroadcast设为 false 时会抛出错误对应 PR 10995。submitblock第二参数由parameters改名dummy——该参数从来没有任何效果改名只是向用户明示这一点对应 PR 10191。注意客户端仍应使用位置参数调用submitblock以兼容 BIP 22。getblock的verbose参数改名为verbosity取 0–2 的整数0 等价于verbosefalse1 等价于verbosetrue2 输出每笔交易的完整详情即getrawtransaction给出的格式。旧的verbose布尔命名参数仍保持兼容。错误码修正对应 PR 9853getblock块不在磁盘上例如已被剪枝时返回 RPC_MISC_ERROR此前为 RPC_INTERNAL_ERRORpruneblockchain节点非剪枝模式时返回 RPC_MISC_ERROR此前 RPC_METHOD_NOT_FOUND时间戳太晚时返回 RPC_INVALID_PARAMETER此前 RPC_INTERNAL_ERROR区块链太短无法剪枝时返回 RPC_MISC_ERROR此前 RPC_INTERNAL_ERRORsetbanIP/子网无效时返回 RPC_CLIENT_INVALID_IP_OR_SUBNET此前 RPC_CLIENT_NODE_ALREADY_ADDED解除未封禁节点时返回 RPC_CLIENT_INVALID_IP_OR_SUBNET此前 RPC_MISC_ERRORremoveprunedfunds无法移除交易时返回 RPC_WALLET_ERROR交易不在钱包中时返回 RPC_INVALID_PARAMETER此前均为 RPC_INTERNAL_ERRORfundrawtransaction找零地址无效返回 RPC_INVALID_ADDRESS_OR_KEY无法创建交易返回 RPC_WALLET_ERROR 且错误消息含更多细节此前分别为 RPC_INVALID_PARAMETER / RPC_INTERNAL_ERROR;bumpfee系列细化交易在钱包中有后代返回 RPC_INVALID_PARAMETER在内存池中有后代返回 RPC_INVALID_PARAMETER已被挖出或与被挖交易冲突、非 BIP 125 可替代、已被其他交易提过费、包含不属于本钱包的输入、有多个找零输出、没有找零输出、费用过高、费用过低、找零输出太小不足以提费——以上一律返回 RPC_WALLET_ERROR此前分散在 RPC_MISC_ERROR、RPC_INVALID_ADDRESS_OR_KEY、RPC_INVALID_REQUEST 等。变更日志概览按模块0.15.0 的完整变更日志收录了约 460 个条目按模块划分如下读者可按需深入 doc/release-notes/release-notes-0.15.0.md 查阅逐条 PR 编号与提交哈希RPC 与其他 API新增logging、uptime、getchaintxstatsRPCgetblock支持交易详情输出getblockchaininfo返回 BIP 激活信号统计getmemoryinfo新增 mallocinfo 模式generate移入 rpcwallet大量参数与返回值修正。区块与交易处理per-txout 链状态切换#10195、非原子化 UTXO 刷写#10148、移除 min reasonable fee#9548、新增-stopatheight基准测试选项#10290、-forcecompactdb强制 LevelDB 压实#10985等。P2P 协议与网络reject 消息发送正确错误码#10135、headers 同步超时#10345、广播地址周期改为每天#10460、Tor 控制端口解析器改进#10408等。验证Validation脚本执行结果整体缓存#10192、SSE4 优化 SHA256#10821、DisconnectTip性能改进#9208、非 2 的幂签名缓存大小支持#9533等。构建系统Depends 工具链更新#10325、显式探测 BDB 5.3#10803、校验汇编器对 crc32 函数的支持#10806、修复 depends 构建缺失 sse42 的问题#10971等。GUIRBF 勾选框#9592、fee bumper 全面重写#10449、手续费滑条改为下拉框并扩展确认目标#10769、启动界面可取消 txdb 升级#10660、Qt 钱包单元测试#9974等。钱包多钱包基础支持#8694与端点支持#10849、HD 链分离找零用内部链#9294、keypool 内外部条目跟踪#10235、keypool 批量刷写与扩容#10831、-usewallet改名-rpcwallet#10883、listwallets与多钱包测试#10604等。测试与 QA功能测试框架大幅重构test_framework 组织、assert_start_raises_init_error、日志合并工具 combine_logs.py、afl-fuzz 加速约 200 倍#10415、多钱包功能测试wallet_multiwallet.py当前仓库位于 test/functional/wallet_multiwallet.py等。杂项FastRandomContext 切换到 ChaCha20#9792、LevelDB 日志接入比特币日志#9999、-txindex变更需要-reindex而非-reindex-chainstate#11108、RNG 使用 rdrand 熵源#10377等。结语0.15.0 的历史坐标从源码结构看0.15.0 引入的几乎所有关键骨架都在当前仓库中延续至今per-output 的CCoinsMap模型、/wallet/HTTP 端点与-rpcwallet机制、estimatesmartfee的conf_target/estimate_mode参数体系、mempool.dat持久化并进一步演化出-persistmempoolv1兼容选项、以及bumpfee的严格错误码语义。理解这一版本的变更边界——哪些格式不向后兼容、哪些 RPC 字段消失、哪些策略选项被删除——对于维护长期运行的节点、编写跨版本兼容的钱包客户端以及阅读当前 Bitcoin Core 代码库都是必要的基础。【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

仿生义乳开源教程:软体机器人模具设计与硅胶浇筑实战 2026/9/7 3:56:54

仿生义乳开源教程:软体机器人模具设计与硅胶浇筑实战

围绕“仿生义乳的开源教程”这个话题,很多人第一反应是猎奇,但真正把它拆开看,你会发现这是一个非常典型的软体机器人项目。它要解决的不是“做一个造型”,而是“怎么低成本、可复制地制造一个外形接近人体、内部能嵌入传感器和执…

阅读更多 →
用Agent编排多模态模型:构建可靠的AI钱币鉴定工作流 2026/9/7 3:56:54

用Agent编排多模态模型:构建可靠的AI钱币鉴定工作流

一枚古钱币到底值多少钱?很多刚入门的收藏爱好者会做同一个动作:拍张照片,发给 AI 大模型,问“这枚钱币是真的吗?能值多少?”结果往往不太理想。模型要么给出模棱两可的回答,要么一本正经地把一…

阅读更多 →
AI Agent Skill是什么?一文搞懂智能体技能的定义、组成与设计方法 2026/9/7 3:56:54

AI Agent Skill是什么?一文搞懂智能体技能的定义、组成与设计方法

AI Agent Skill(智能体技能)现在是AI Agent开发里出现频率最高的词之一,但很多人把它当成一段提示词,或者当成普通插件的别称。这个误解会在后面带来一个很直接的问题:模型到底什么时候该用Skill、用错了怎么排查&…

阅读更多 →
Agentic Edge AI实战:边缘智能体的架构设计与落地指南 2026/9/7 3:56:54

Agentic Edge AI实战:边缘智能体的架构设计与落地指南

写这篇内容之前,我先说个背景:2024年我做过一个厂区设备预测性维护的项目,传感器和PLC数据都集中在机房推理,网络一抖延迟就飙到800毫秒,现场工人等不起,后来我把模型压缩后搬到工控机本地,延迟…

阅读更多 →
Modex全流程:数学建模竞赛高效求解与论文写作指南 2026/9/7 3:56:54

Modex全流程:数学建模竞赛高效求解与论文写作指南

在数学建模竞赛中,真正拉开选手差距的不是模型名字是否高级,而是从读题、建模、求解、验证到论文呈现的完整链路是否顺畅。以“华数杯”这类时间紧凑的数模竞赛为例,很多队伍不是不会建立模型,而是在数据清洗、算法实现、结果分析…

阅读更多 →
IEC61000-4-5浪涌测试标准详解:波形、等级与防护设计 2026/9/7 3:53:54

IEC61000-4-5浪涌测试标准详解:波形、等级与防护设计

简介:这是IEC 61000-4-5中文版标准,聚焦电磁兼容性(EMC)中的雷击浪涌测试与测量,面向电子电气设备研发、质检及认证相关人员。标准系统阐述了雷击浪涌的定义、两种测试方法(模拟器法采用组合波发生器等装置…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞