Bitcoin Core 28.0 发布说明全解读Testnet4、JSON-RPC 2.0、TRUC 与 P2A 内存池新政【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin本篇技术指南以仓库内 release-notes-28.0.md 为骨架系统梳理 Bitcoin Core 28.0 引入的共识与网络层变更Testnet4/BIP94、TRUC/BIP431、P2A、包中继、JSON-RPC 2.0 支持、钱包与 RPC 能力升级并结合当前仓库源码逐一佐证。读完你将对 28.0 版本的升级路径、关键配置参数-testnet4、-mempoolfullrbf、bind…onion、-blocksxor等以及它们背后的源码实现形成完整把握。需说明本文所述的 28.0 为历史发布版本当前仓库 master 分支版本标识已为 31.99.0见 CMakeLists.txt但绝大多数特性在现行代码中仍可找到对应实现文中将同步标注源码路径。版本概览与升级指引Bitcoin Core 28.0 是一次包含新特性、各类缺陷修复与性能提升的功能性发布同时更新了多语言翻译。按文档口径发布二进制可从 bitcoincore.org 官方发布目录获取遇到缺陷应在官方 issue 跟踪器反馈安全与更新通知可通过官方公告订阅。升级步骤与数据目录兼容若你正运行更早版本标准升级流程如下先彻底关闭旧版本节点进程等待其完全退出部分场景可能需要数分钟例如回写未落盘的数据库状态Windows 上直接运行安装程序macOS 上整体覆盖/Applications/Bitcoin-QtLinux 上覆盖bitcoind/bitcoin-qt可执行文件。文档特别说明从已到达 EOL生命周期结束的旧版本直接升级是可行的但当数据目录需要迁移时可能耗时较长早期版本的钱包wallet一般仍被支持升级不会强制要求立即迁移钱包格式。macOS 运行前的自签名处理在 macOS 上运行从官方渠道下载的 Bitcoin Core 二进制前需要移除隔离属性quarantine并执行本地 ad-hoc 自签名否则系统会拦截未公证的应用。文档给出如下命令在解包后的bin目录内执行cd /path/to/bitcoin-28.0/bin xattr -d com.apple.quarantine bitcoin-cli bitcoin-qt bitcoin-tx bitcoin-util bitcoin-wallet bitcoind test_bitcoin codesign -s - bitcoin-cli bitcoin-qt bitcoin-tx bitcoin-util bitcoin-wallet bitcoind test_bitcoin第一行针对每个可执行文件清除「来自互联网」的隔离扩展属性第二行以空签名身份-s -对全部二进制执行本地签名使其在本地得以运行。文件清单覆盖了该版本发布的所有 CLI/GUI/工具与单元测试二进制。操作系统兼容性边界官方支持并经过充分测试的系统Linux Kernel 3.17、macOS 11.0、Windows 7 及以上其他类 UNIX 系统大概率可用但测试频率较低不建议在不支持的系统上运行 Bitcoin Core。Testnet4 与 BIP94 支持28.0 最大的网络层新增是按 BIP94 规范实现 Testnet4这是继被长期使用的 Testnet3 之后新一代公开测试网络。核心变化包括新增-testnet4启动选项用于选择该网络其配置节section header命名为[testnet4]Testnet4 内建了 BIP94 的 timewarp 攻击缓解规则限制时间偏移的难度调整逻辑Testnet3 在本版本中仍可用但官方意图是在后续版本中逐步淘汰 Testnet3。源码佐证网络类型到配置节/默认端口的映射定义在 chainparamsbase.cpp-testnet等义-chaintest对应 RPC 默认端口 18332的说明已直接标注“deprecated and will be removed in an upcoming release”并提示改用-testnet4-testnet4等义-chaintestnet4对应默认 RPC 端口 48332Testnet4 的完整链参数创世、DNS 种子、消息头、共识参数等以CTestNet4Params形式定义于 kernel/chainparams.cpp并通过CChainParams::TestNet4()工厂构造同文件 L684对应的矿工/时间戳测试见 src/test/testnet4_miner_tests.cppPR #30681 进一步把 BIP94 缓解在 regtest 上启用。实践提示需要隔离的公开测试环境时应优先迁移到-testnet4RPC 端口规划、区块浏览器与工具链请以 48332 及 Testnet4 主网上首个激活区块为准。JSON-RPC 2.0 支持28.0 起JSON-RPC 服务器能够识别 JSON-RPC 2.0 请求并严格按照 2.0 规范应答#27101。原先默认采用的 JSON-RPC 1.1 行为仍是兼容基础两种风格的差异与字段规则在仓库内文档 JSON-RPC-interface.md 中设有专门小节“JSON-RPC 1.1 vs 2.0”是迁移客户端时的必读参照。对客户端的影响与注意事项JSON-RPC 客户端可能需要更新才能与服务器兼容——2.0 对id、jsonrpc字段、错误对象code/message/data以及通知无id的请求的语义更严格若在使用中遇到兼容性问题官方建议通过 issue 反馈以便在后续版本中修复。从实现角度看RPC 服务器代码位于 src/httprpc.cpp 与 src/rpc/request.cpp28.0 的改动集中在请求解析与响应序列化层这也是为什么它属于“服务器行为”变更而非某个具体业务 RPC 的变更。Windows 默认数据目录迁移在 Windows 上默认数据目录由旧的C:\Users\用户名\AppData\Roaming\Bitcoin迁移到C:\Users\用户名\AppData\Local\Bitcoin#27064。这一改动使 Bitcoin Core 遵循 Windows 上“应用数据文件应放 Local”的惯例并规避 Roaming 目录在域漫游/同步时带来的性能与隐私问题。兼容策略非常关键节点启动时会先检查旧目录是否存在若旧目录存在则继续使用旧目录以保证向后兼容。因此全新安装的节点将直接使用新的Local目录已有旧目录的用户升级后行为不变不会出现“找不到数据”的情况迁移数据目录时可手动移动旧目录内容并删除空旧目录以启用新位置。libbitcoinconsensus 移除libbitcoin-consensus 动态库曾在 27.0 中标记弃用28.0 起被彻底移除#29648。这意味着依赖该库做“链上验证”把 Bitcoin Core 的共识逻辑链入第三方程序的外部软件需要寻找替代方案——例如改用位权验证独立实现、或调用节点的verifychain/ 通过 RPC 间接完成验证构建产物中不再包含该目标相关头文件安装项一并去除。P2P 与网络层变更bind 行为修正不再隐式监听 Tor 端口此前只要节点以默认设置或bindaddr:port形式监听 P2P 连接就总会额外绑定127.0.0.1:8334用于接收 Toronion连接即使节点根本不用 Tor 也无法关闭。28.0 改变该行为#22729现在bindaddr:port只绑定所指定的地址默认行为无任何bind时绑定0.0.0.0:8333与127.0.0.1:8334保持不变若你使用了bind...但未写bind...onion又依赖旧行为在 8334 接收入站 Tor 连接则必须显式声明bind你的外部地址:端口 bind127.0.0.1:8334onion即用network后缀把 8334 明确标记为 onion 专用监听口。任一 P2P bind 失败即启动失败同一 PR 还强化了启动健壮性此前只有当全部P2P bind 都失败时才中止启动现在只要任一P2P bind 失败Bitcoin Core 就会拒绝启动。这避免了“部分网卡/端口不可用但进程带病运行”的隐蔽状态也意味着配置监听端口前应确认端口未被占用、地址可用。代理与 ZMQ 支持 UNIX domain socket代理连接-onion与-proxy现在接受以unix:为前缀的本地 socket 路径例如-onionunix:/home/me/torsocketZMQ 发布通道同样接受 UNIX socket 路径例如-zmqpubrawtxunix:/path/to/file-zmqpubrawblock与-zmqpubrawtx均可如此配置#27375、#27679。这让节点可以与同机上的 Tor 守护进程、ZMQ 订阅者走文件系统 socket绕开 TCP 环回口的占用与 ACL 管理成本。相关地址解析逻辑可参考 src/zmq/zmqpublishnotifier.cpp 与 src/netbase.cpp 中的unix:前缀处理。whitelist 新增 in/out 标记-whitelist此前会把权限应用于所有入站连接。28.0 新增in与out两个修饰标记#27114用于控制权限只对入站连接inbound或只对手动发起的连接manual outbound生效默认仍为仅入站。例如把某个网段仅作为出站白名单时可按需写成-whitelistout1.2.3.0/24具体语法以bitcoind -help中该选项说明为准。网络权限解析见 src/net_permissions.cpp。1 父 1 子的机会型包提交package relay 前奏费率过低、低于内存池最低费率minimum feerate的交易会被“机会主义”地与它的子交易配对成一个包提交从而让节点借由现有交易中继协议下载 1-parent-1-child1p1c包#28970。结合其他内存池策略这实现了受限的包中继能力——父交易可以低于内存池最低费率被接受若父交易是 TRUC拓扑受限至确认交易还允许低于最低中继费率即支付 0 手续费。节点直接提交包请用submitpackageRPC警告该 P2P 特性是受限的——不同于submitpackage接口一个子交易带有多个未确认父交易的包不支持且在对抗性条件下尚不可靠。Mempool 策略变更标准交易层面开放 TRUCv3 交易 / BIP431版本号设为3的交易现已在所有网络上被认定为标准交易#29496并适用可选的Topologically Restricted Until ConfirmationTRUC交易策略对应 BIP 431。策略细节包括限制花费未确认输出#28948——TRUC 交易的未确认祖先/后代集合都被限制在 2 个以内1 父 1 子若提交了激励相容性更高的后代将逐出之前的后代#29306最大交易体积限制为10,000 vB#29873这些限制简化了“接受或替换 TRUC 交易是否激励相容”的评估保证任何替换都对节点更有利并使 fee-bumping加价更可靠。源码佐证完整策略实现在 src/policy/truc_policy.h 与 src/policy/truc_policy.cpp。头文件顶部即定义TRUC_VERSION{3}v3 即 TRUC 的判定依据TRUC_ANCESTOR_LIMIT{2}/TRUC_DESCENDANT_LIMIT{2}未确认祖先/后代集合各不超过 2TRUC_MAX_VSIZE{10000}换算成 weight 即文档所述 10,000 vB 上限与TRUC_CHILD_MAX_VSIZE{1000}花费未确认 TRUC 输出的子交易体积限制。其规则注释明确列出 6 项检查TRUC 只能有 TRUC 祖先、非 TRUC 只能有非 TRUC 祖先、祖先/后代集合规模、子交易体积与总体积上限等是本变更的权威说明。Pay To AnchorP2A新标准输出模板P2A 是新的标准见证输出类型用于无密钥的 anchor 输出#30352相对等价的sh(OP_TRUE)输出它的花费条件更紧凑、效率更高同时保留花费交易 txid 的稳定性——非常适合 CPFP fee-bumping 场景先在锚点输出放一笔小额可花费输出再让其子交易为双方加价。注意事项P2A 输出花费在网络上传播范围有限直到足够多的节点升级采用该模板。相关判定函数IsPayToAnchor被 mempool 与标准策略引用见 src/policy/policy.cpp 中关于 anchor 输出IsPayToAnchor的检查点。有限 Package RBF28.0 启用了受限的包 RBF#28984仅当“提议冲突的包”在内存池中会构成大小为 2 的连通分量cluster即父子对时才允许所有被冲突的 cluster 规模也须为 2 或更小。这是向 cluster mempool 演进前对 RBF 语义的一次收敛。-mempoolfullrbf 默认开启-mempoolfullrbf的默认值由0改为1即mempoolfullrbf1#30493。这意味着默认情况下内存池接受未设置 BIP125 可替换标志replaceability signaling的交易的 RBF 替换——俗称 full-RBF。需要旧行为仅接受显式 signal 的替换的用户可显式配置-mempoolfullrbf0。该参数在 28.0 之后的版本已进一步演化为默认行为并可能被废弃详见仓库中后续 release notes 的说明。更新的 RPCdumptxoutset / loadtxoutsetUTXO 集转储新格式dumptxoutset现在输出新的、改进的 UTXO 集转储格式loadtxoutset只接受该新格式#29612旧格式转储文件不再受支持需要以新格式重新生成后才能加载新格式与当前源码中的序列化实现对应dump 逻辑见 src/rpc/blockchain.cpp 中dumptxoutset注册段及 src/kernel/chainparams.cpp 提供的可用快照高度列表。AssumeUTXO 主网参数高度 840,000为主网新增了高度840,000的 AssumeUTXO 参数#28553。这使得loadtxoutset可以在主网配合该高度的匹配 UTXO 集使用——即实现极速同步先加载官方认可的历史 UTXO 快照再在后台验证与补齐区块。对 28.0 用户而言主网全节点同步不再必须从创世块逐块验证 UTXO。getblockchaininfo/getmininginfo/getnetworkinfowarnings 变为数组这三个 RPC 的warnings字段现在返回所有活跃节点告警组成的字符串数组而非单一告警#29845。若需临时恢复旧行为可用配置项-deprecatedrpcwarningssendrawtransaction 错误消息精确化当通过sendrawtransaction提交一笔输出已存在于 UTXO 集的交易时旧错误码-27的消息从 “Transaction already in block chain” 改为“Transaction outputs already in utxo set”#30212更准确地描述了问题来源交易本身未上链只是其输出已被花费/上链。错误码不变。estimatesmartfee 默认改为 economicalestimatesmartfee的默认估算模式从conservative更新为economical#30275。预期效果对多数用户减少手续费高估尤其当 Replace-by-FeeRBF可用时需要高置信度宁可高估的场景仍可显式传conservative模式参数。scantxoutset 新增 blockhash 与 confirmations 字段scantxoutset返回的unspentsJSON 数组中每个元素现在新增两个字段blockhash与confirmations#30515便于离线审计与构建花费状态判断。submitpackage 新增 maxfeerate 与 maxburnamountsubmitpackage新增两个可选参数#28950maxfeerate限制整个包的最高费率与maxburnamount限制可接受的销毁金额上限。完整说明与示例见该 RPC help源码注册于 src/rpc/mempool.cpp 的submitpackage段示例同时给出父-子包构造。钱包相关 RPC 变更见下文 Wallet 节。更新的 REST API/rest/getutxos 参数校验对/rest/getutxos的参数校验做了强化#30482、#30444被截断或过长的 txid 以及畸形格式的 outpoint 索引现在会返回HTTP_BAD_REQUEST“Parse error”此前这类请求会被静默处理要么忽略要么产生歧义结果。这提升了 REST 接口对畸形输入的确定性。REST 路由代码见 src/rest.cpp。构建系统与编译要求28.0 抬高了编译工具链与运行时基线编译器GCC 11.1 或更高或 Clang 16.0 或更高#29091、#30263运行时 glibc最低 2.31#29987。由此RHEL 8 与 Ubuntu 18.04Bionic不再受支持构建选项--enable-lcov-branch-coverage被移除——原因是 lcov 1.x 与 2.x 之间存在不兼容相关选项请改用LCOV_OPTS传递#30192。对应地仓库根级 CMakeLists.txt 与 cmake/ 为当前构建系统的真实入口当前 master 的版本声明也在 CMakeLists.txt 中已演进至 31.99.0。若要在本仓库源码上复现编译请以仓库根 INSTALL.md、[doc/build-unix.md] 风格的构建文档及 CMakePresets.json 为准。设置变更-alertnotify 触发范围扩大运行-alertnotify时警报现在可以多次触发而不再只触发一次#30058。此前它仅在未知新共识规则被激活时触发现在范围扩大为所有内核kernel告警具体包括检测到包含大量工作量work的无效链如潜在的拒绝服务/分叉场景时会发出警报未来可能继续追加其他告警类别。-alertnotify的取值是收到警报时应执行的外部命令/脚本多触发语义意味着运维侧需保证处理脚本幂等。钱包Wallet相关变更钱包交易与内存池冲突检测mempoolconflicts钱包现在能够检测钱包交易与内存池之间的冲突#27307冲突交易可通过gettransaction返回的mempoolconflicts字段查看当父交易从内存池被剔除时mempool-conflicted 交易的输入无需手动 abandon即可重新花费——此前这种残留会让钱包余额看起来偏高。相关实现见 src/wallet/wallet.cpp。fundrawtransaction / walletcreatefundedpsbt / send 新增 max_tx_weight这三个 RPC 新增max_tx_weight选项#29523指定最大交易权重若资金组装funding过程中超出该限制交易将不会被构建。默认值为4,000,000 WU。示例用法伪代码示意send 金额 --max_tx_weight4000000在源码中该参数被解析进CoinControl的m_max_tx_weight见 src/wallet/rpc/spend.cpp 中参数声明与上限处理未提供值或超过 TRUC 上限时会回退到对应默认值并参与 Send 交易的组装约束。新 RPCcreatewalletdescriptorcreatewalletdescriptor允许向钱包添加新的自动生成描述符descriptor#29130典型场景是把老版本创建的钱包升级到新标准描述符类型例如 taproot。源码注册见 src/wallet/rpc/wallet.cpp 中同名方法。新 RPCgethdkeysgethdkeys列出钱包内所有描述符正在使用的全部 BIP32 HD 密钥#29130。配合createwalletdescriptor可针对钱包已知的特定密钥创建并添加单密钥描述符是“老钱包补足 taproot 等新描述符”流程的两件套。同样定义于 src/wallet/rpc/wallet.cpp其 help 示例包含active_only、private等参数。sendall 可花费未确认找零并自动补齐加价sendall现在可以花费未确认的找零change并在必要时追加手续费使生成交易把未确认交易的费率提升bump到指定费率#28979。这让“扫空钱包”场景在存在未确认找零时仍可一步完成。bumpfee 不再强制 5 sat/vB 增量步长bumpfee指定fee_rate时费率不再被限制为必须遵循钱包默认的增量费率 5 sat/vB#27969但仍需至少等于原交易费率加上内存池增量费率incremental feerate以符合 RBF 规则。这为手动精确控制替换费率提供了空间。GUI 变更28.0 的图形界面Bitcoin-Qt有两项可见改进“Migrate Wallet”菜单允许迁移钱包目录中的任意 legacy旧版非描述符钱包无论该钱包当前是否已加载gui#824“Information”窗口在显示 mempool 使用量的同时新增显示最大内存池大小gui#825。GUI 源码位于 src/qt/迁移相关逻辑与钱包工具联动见 src/qt/walletcontroller.cpp 等。底层Low-level变更测试BIP94 timewarp 缓解已作用于 regtest#30681本地回归测试网络也启用时间扭曲防护使 regtest 上的共识行为更贴近 Testnet4相关用例见 src/test/testnet4_miner_tests.cpptest_bitcoin新增-testdatadir选项可指定单元测试数据目录的位置#26564便于并行测试与 CI 清理。区块存储默认 XOR 混淆区块文件block files现在默认以存储于 blocksdir 的密钥做XOR 混淆#28052之前的 Bitcoin Core 版本或第三方软件无法读取带非零 XOR-key 的 blocksdir详情参考-blocksxor选项帮助bitcoind -help中该参数说明。这一机制属于数据完整性与磁盘隐私增强迁移/降级时需注意版本兼容。Chainstate修剪期 flush 不再清空数据库缓存区块被修剪prune时触发的 chainstate 数据库 flush 不再清空内存中的数据库缓存#28280缓存能保留更久从而显著缩短初始区块下载IBD总耗时。这是 28.0 在同步性能上的关键低层优化。依赖替换Boost.Process → cpp-subprocess对 Boost.Process 的依赖被替换为内置于源码中的 cpp-subprocess#28981构建外部签名者external signer支持时构建者不再需要安装 Boost.Process。这也是外部签名功能HWI 风格构建依赖收敛的一步。贡献者致谢28.0 汇集了社区大量直接贡献release notes 中逐一列出了署名贡献者名单含 0xb10c、Anthony Towns、Ava Chow、glozow、Greg Sanders、Pieter Wuille、Ryan Ofsky、stickies-v、TheCharlatan 等众多开发者同时向所有在 Transifex 平台上参与翻译的贡献者致谢。完整名单以 release-notes-28.0.md 末尾 Credits 一节为准。小结从 28.0 看 Bitcoin Core 的技术演进方向综合全部变更可以提炼出 28.0 的几条主线网络迭代Testnet4/BIP94 落地、Testnet3 进入淘汰倒计时反映测试网基础设施的现代化协议与 mempool 精细化TRUCv3/BIP431、P2A 与受限包 RBF、默认 full-RBF 协同作用使费用替换与 CPFP 更可预测为后续 cluster mempool 铺路接口现代化JSON-RPC 2.0 严格化、REST 参数校验、warnings 结构化运营与性能XOR 混淆区块文件、修剪期缓存保留、AssumeUTXO 主网 840,000 快照、更严格的 bind 启动检查。若需按原始条目逐项回溯设计动机可直接阅读 release-notes-28.0.md想验证上述任一实现细节可按正文给出的 src/ 源码路径继续深入当前仓库。【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
