
Zcash 1.0.11-rc1 发布说明深度解析UPnP 移除、listunspent 增强与网络高度估算改进【免费下载链接】zcashZcash - Internet Money项目地址: https://gitcode.com/GitHub_Trending/zc/zcash本篇技术指南围绕 Zcash 1.0.11-rc1发布候选版的官方 Changelog 展开逐项解析该版本在钱包 RPC、网络层、HTTP 接口、构建与 CI 基础设施上的具体变更并结合当前仓库源码如 src/wallet/rpcwallet.cpp、src/net.h、src/metrics.cpp、src/httprpc.cpp验证每个变更的落点与实现细节。读完本文你将掌握该版本每一条 commit 对应的功能影响、相关 RPC 参数与返回字段的语义以及如何在源码中定位这些行为。版本概况与 Changelog 范围release-notes-1.0.11-rc1 记录了 Zcash 1.0.10 发布之后、1.0.11 正式版发布之前累积到 rc1 阶段的全部变更共涉及 6 位贡献者的 29 条提交按 Changelog 所列统计按主题可归类为四类钱包与 RPC 行为修复listunspent新增generated字段、从 zaddr 发送时minconf禁止为零、空指针段错误修复网络与共识周边移除 UPnP 支持、网络高度估算改进、metrics UI 增加区块下载进度HTTP RPC 协议细节401 响应增加WWW-Authenticate头工程与发布基础设施pyflakes 静态检查清理、Ansible 部署 playbook、Buildbot CI worker 搭建、make-release.py 版本化流程。需要说明的是这是 1.0.x 系列的早期维护版本主网已经完成 Sapling 升级但后续版本如 release-notes-2.0.0.md才引入 Nu4/Heartwood 等网络升级1.0.11-rc1 的变更集中在稳定性、隐私相关 RPC 的正确性与工程可维护性上。钱包 RPC 层三个直接影响用户的关键变更listunspent新增generated字段issue #2446Simon Liu 的提交 Closes #2446 by adding generated field to listunspent 为listunspent的每个返回条目新增了布尔字段generated用于标识该输出是否为coinbase挖矿交易输出。在源码中该字段的落点有两处透明地址未花费输出枚举在 src/wallet/rpcwallet.cpp 中通过entry.pushKV(generated, out.tx-IsCoinBase())写入钱包交易 JSON 序列化辅助函数WalletTxToJSON在 src/wallet/rpcwallet.cpp 中仅当wtx.IsCoinBase()为真时写入generated: true这是对既有gettransaction等接口行为的保留。字段语义如下表字段类型含义txidstring交易哈希voutnumeric输出索引generatedboolean该输出是否来自 coinbase 交易由IsCoinBase()判定addressstring解码后的目标地址若为合法 P2PKH/P2SHamountnumeric金额ZEC带 8 位精度amountZatnumeric金额单位 zatconfirmationsnumeric确认数spendableboolean是否可花费这一字段的价值在于合规与记账场景经常需要区分挖矿所得与普通转账所得例如矿池、企业钱包的税务与会计处理此前只能靠遍历gettransaction间接推断现在listunspent直接给出判定结果。从 zaddr 发送时minconf不得为零issue #2519第二条钱包修复 Fixes #2519. When sending from a zaddr, minconf cannot be zero 针对的是使用**屏蔽地址Sprout zaddr**作为资金来源的发送路径minconf参数不允许取零以避免花费尚未确认的 note防止双花/重组风险。虽然当前仓库中z_sendmany的主流程已迁移到WalletTxBuilder但参数校验的约束可以从相邻 RPC 的测试中印证在 src/wallet/test/rpc_wallet_tests.cpp 中rpc_z_listunspent_parameters测试显式断言// minconf must be 0 BOOST_CHECK_THROW(CallRPC(z_listunspent -1), runtime_error); // maxconf must be minconf BOOST_CHECK_THROW(CallRPC(z_listunspent 2 1), runtime_error);即负数minconf会被拒绝且maxconf必须大于minconf。对于屏蔽地址场景z_listunspent的帮助文本src/wallet/rpcwallet.cpp也明确说明当minconf为 0 时零确认 note 会被返回即使它们尚未在链上稳定——这正是 #2519 要避免在发送路径上出现的风险因此发送侧强制minconf 1。空指针引用段错误修复issue #2480第三条修复 Fixes #2480. Null entry in map was dereferenced leading to a segfault 属于典型的稳定性 bug某个 map 中存在空条目代码在遍历时直接解引用导致节点进程段错误segfault。这类问题在 1.0.x 维护版本中通常与区块/交易索引的边界场景如孤立交易、重组时的残留条目相关修复方式为在解引用前增加空值检查。它不改变任何 RPC 接口语义但消除了节点在特定状态下崩溃的隐患——对运行中的全节点服务而言这是重要的可用性修复。网络层UPnP 移除与高度估算改进移除 UPnP 支持issue #2500Daira Hopwood 的提交 Remove UPnP support. fixes #2500 从代码库中彻底移除了UPnP通用即插即用端口映射功能。此前 Zcash 客户端通过 UPnP 在家庭路由器上自动打开监听端口以便外部节点连入该功能因安全问题历史上多家比特币系客户端因 UPnP 库缺陷暴露攻击面与维护成本被移除。源码中的证据清晰可查在 src/net.h 的LAddress_Type枚举中LOCAL_UPNP被保留但注释标记为// unused (was: address reported by UPnP)即地址类型枚举中 UPnP 一项已不再使用。对节点运营者的实际影响启动参数-upnp相关逻辑不再生效监听端口默认 8233需要由运维者在防火墙/NAT 设备上手工做端口映射才能让外网节点直连无公网 IP 的用户节点将以出站连接为主入站连接数可能减少但不影响正常同步与交易广播。网络高度估算改进与 metrics UI 下载进度Jack GriggJack Grigg 在本版本中提交了两条与节点状态展示相关的变更Add block download progress to metrics UI在 metrics 界面节点运行时的终端状态面板中新增区块同步下载进度的展示Correct and extend EstimateNetHeightInner tests Improve network height estimation修正并扩展EstimateNetHeightInner的单元测试同时改进网络当前高度的估算算法。源码落点估算函数定义于 src/metrics.cppint EstimateNetHeight(const Consensus::Params params, int currentHeadersHeight, int64_t currentHeadersTime)声明于 src/metrics.h调用点有两处metrics 状态面板的刷新逻辑src/metrics.cpp与getblockchaininfoRPC 的estimatedheight字段src/rpc/blockchain.cpp测试位于 src/gtest/test_metrics.cpp通过构造不同的当前头高度/时间输入断言估算结果与期望值的误差小于 2 个区块高度。算法思路结合调用代码可推断以节点已同步到的最新区块头高度与时间为基准结合共识参数中的目标出块间隔与难度调整节奏外推出当前网络大致到达的高度该值在初始同步尚未完成时尤为有用——它让用户知道还差多少个区块而非仅仅看到一个不断增长的本地高度。改进点集中在处理头部时间戳滞后Median Time Past与出块速率波动时的鲁棒性。HTTP RPC 协议401 响应携带认证头Wladimir J. van der Laan 的提交 rpc: Add WWW-Authenticate header to 401 response 是对 Bitcoin Core 同期修复的移植当 HTTP JSON-RPC 请求未提供或提供了错误的基本认证信息时服务器返回 401 的同时现在会附带WWW-Authenticate: Basic ...头使 HTTP 客户端如 curl、浏览器、各类 SDK能够识别该端点需要 Basic Auth 并正确提示凭据输入。源码证据在 src/httprpc.cpp 与 src/httprpc.cpp两处 401 分支均调用req-WriteHeader(WWW-Authenticate, WWW_AUTH_HEADER_DATA)头内容常量定义于 src/httprpc.cpp。对 RPC 使用者而言这一变更使错误响应更符合 HTTP 规范也便于自动化工具在 401 时自动触发认证流程对安全模型没有削弱——认证校验本身rpcuser/rpcpassword或 cookie 文件逻辑不变。代码质量与安全修复pyflakes 清理与资源泄漏pyflakes 静态检查清理issue #2450Daira Hopwood 的三条提交围绕 Python 代码的静态检查Clean up imports to be pyflakes-checkable. fixes #2450清理 import 语句使其可被 pyflakes 无告警检查For unused variables reported by pyflakes...对 pyflakes 报告的未使用变量逐一处理——删除变量、抑制告警或在用错了变量时修复实际 bugCosmetics (trailing whitespace, comment conventions, etc.)统一尾随空白、注释风格等格式。这属于典型的静态分析门禁建设在 CI 中引入 pyflakes 意味着后续每个 PR 的 Python 代码主要覆盖 contrib、qa、zcutil 等目录中的脚本都必须通过检查从源头减少未使用 import 与拼写错误的变量引用。仓库中对应的工程化约定还可参考 CONTRIBUTING.md 与 test/lint 下的 lint 脚本。ReadBinaryFile 资源泄漏修复practicalswift 的提交 Net: Fix resource leak in ReadBinaryFile(...) 修复了ReadBinaryFile函数在特定错误路径下未释放文件句柄的资源泄漏问题。资源泄漏类问题在长时间运行的全节点上会缓慢消耗文件描述符最终可能导致节点无法打开新文件数据库、日志等属于低概率、高影响的稳定性修复通常与后续的内存/句柄审计工作配套出现。工程与发布基础设施make-release.py 版本化流程Ariel Gabizon两条提交均为发布流程自动化产出make-release.py: Versioning changes for 1.0.11-rc1由 zcutil/make-release.py 自动执行的版本号更新make-release.py: Updated manpages for 1.0.11-rc1同步更新手册页。版本号相关的源代码集中在 src/clientversion.h客户端版本定义与 configure.ac构建系统版本手册页位于 doc/man如 doc/man/zcashd.1。临时 release notes 机制Jack GriggPull in temporary release notes during the release process 为发布流程增加了临时发布说明机制允许在正式发布说明定稿前将开发期间各 PR 的草稿说明合并进候选版本的 release notes再由发布负责人统一整理。这也是本仓库 doc/release-notes 目录中 rc 版本如 release-notes-1.0.11-rc1.md与正式版本说明并存的原因——rc 说明记录了累积变更正式版说明则在 rc 基础上补充定稿内容。Ansible 部署与 Buildbot CI 基础设施Jack GriggJack Grigg 的六条提交构成了一套完整的 CI worker 自动化部署方案Ansible playbook for installing Zcash dependencies and Buildbot worker新增 Ansible playbook自动化安装 Zcash 编译依赖并配置 Buildbot workerVariable overrides for Debian, Ubuntu and Fedora / Variable overrides for FreeBSD为不同发行版/操作系统提供变量覆盖Simplify Python installation...简化 Python 安装步骤并在需要手动配置时明确告知用户Add steps for setting up a latent worker on Amazon EC2 Add a separate Buildbot host info template for EC2支持在 AWS EC2 上按需latent拉起构建 workerAdd pyblake2 to required Python modules、Add pyflakes to required Python modules、Remove Buildbot version from host file更新依赖模块清单与主机信息模板。这套设施的目标是让 Zcash 的 CIBuildbot能在多平台Linux 各发行版 FreeBSD EC2 弹性实例上统一、可复现地执行编译与测试是 contrib 与 qa 下测试体系能够稳定运行的基础。Alert 1004 与 README/CI 文档修订Daira HopwoodAlert 1004 (version 1.0.10 only)针对1.0.10 版本单独签发的紧急网络告警alert——它只作用于 1.0.10 节点属于版本限定的一次性通告对升级到 1.0.11 的用户不再适用Change wording in Security Warnings section of README.md修订 README.md 安全警告章节的措辞与 SECURITY.md 共同构成项目的安全信息披露口径Document our criteria for adding CI workers. closes #2499将新增 CI worker 的准入标准写成文档避免随意扩充构建资源。升级与验证指引对于运行 1.0.10 及更早版本的节点运营者升级到 1.0.11-rc1 前应注意RPC 兼容性listunspent新增的generated字段是增量字段旧版调用方不会因多余字段而报错但依赖严格 schema 校验的工具需要同步更新NAT 配置若此前依赖-upnp自动映射端口升级后需在路由器上手工转发 8233 端口或接受入站连接减少HTTP 客户端行为401 响应新增WWW-Authenticate头后部分 HTTP 库会自动弹出认证框或重试需确认 RPC 调用脚本兼容屏蔽地址发送minconf0在 zaddr 发送场景被禁止脚本中如有此用法需改为minconf1Alert 1004 仅针对 1.0.101.0.11-rc1 不受该告警影响。验证变更是否生效可在升级后依次执行# 检查 listunspent 是否返回 generated 字段coinbase 输出应为 true zcash-cli listunspent # 检查 getblockchaininfo 的 estimatedheight 字段 zcash-cli getblockchaininfo # 在未启用 rpcuser 认证时观察 401 响应是否带 WWW-Authenticate 头 curl -i http://127.0.0.1:8232/对应测试用例可分别在 src/wallet/test/rpc_wallet_tests.cppRPC 参数校验、src/gtest/test_metrics.cpp高度估算中运行验证。小结Zcash 1.0.11-rc1 是一个以正确性、稳定性与工程基建为主题的维护版本钱包侧修复了listunspent信息缺失、zaddr 零确认发送风险与空指针段错误网络侧移除了 UPnP 并改进了高度估算与同步进度展示HTTP RPC 侧补齐了 401 认证头同时通过 pyflakes 门禁、Ansible/Buildbot 自动化与发布流程改进为后续版本的持续迭代奠定了工程基础。这些变更虽不涉及共识层面的网络升级但对运行 1.0.x 主网节点的运营者而言升级价值集中在安全性、稳定性与运维便利性上。【免费下载链接】zcashZcash - Internet Money项目地址: https://gitcode.com/GitHub_Trending/zc/zcash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考