Zcash 1.1.1-rc2 版本解读:zcash-cli 参数隐私与 scriptSig SIGHASH 类型解码

发布时间:2026/11/7 1:48:57

Zcash 1.1.1-rc2 版本解读:zcash-cli 参数隐私与 scriptSig SIGHASH 类型解码 Zcash 1.1.1-rc2 版本解读zcash-cli 参数隐私与 scriptSig SIGHASH 类型解码【免费下载链接】zcashZcash - Internet Money项目地址: https://gitcode.com/GitHub_Trending/zc/zcash本文基于 Zcash 开源仓库的官方发布说明 release-notes-1.1.1-rc2.md系统解读该版本的两项核心用户可见变更zcash-cli -stdin参数输入模式带来的敏感信息隐私保护以及各交易解析接口输出中scriptSig.asm开始附带 SIGHASH 类型解码的行为变化。读完本文你将掌握在命令行中安全传递钱包口令/私钥的标准做法并能准确理解getrawtransaction、decoderawtransaction、REST 接口与zcash-tx输出中[ALL]、[SINGLE]等标注的含义及底层实现原理同时一览该版本为 Sapling 网络升级铺路的共识层改动。背景1.1.1-rc2 的定位1.1.1-rc2 是 Zcash 主网 Blossom 升级之前的过渡版本其任务清单集中体现了当时的开发重心为即将到来的Sapling 网络升级做共识层与序列化准备v4 交易结构、Sapling 零知识证明验证、Sapling Merkle 树与锚点、ZIP 243 签名哈希从 Bitcoin Core 上游回移植一系列工程质量改进序列化重构、bitcoin-cli/zcash-cli功能增强、RPC 输出改进修复内存管理、构建脚本、macOS 参数下载等细节问题。对普通节点运营者与钱包用户而言最直接可感知的是两大变更zcash-cli -stdin与scriptSig 的 SIGHASH 类型解码。下文逐一展开。一、zcash-cli 参数隐私-stdin输入模式为什么需要它所有支持 RPC 的命令行客户端都有一个通病命令行参数会暴露在进程表中同一系统上的任何用户通常都能通过ps、/proc/pid/cmdline等手段读到其他进程的命令行参数。如果你在命令行上直接执行src/zcash-cli walletpassphrase mysecretcode 120那么mysecretcode就会以明文形式出现在进程表中任何人都有机会窥探到你的钱包口令、私钥等敏感信息。为此1.1.1-rc2 为 RPC 命令行客户端新增了-stdin参数从标准输入逐行读取额外参数直到 EOF或 Ctrl-D。官方推荐用这种方式输入私钥、口令等敏感信息。使用方式以解锁钱包为例官方发布说明给出的示例$ src/zcash-cli -stdin walletpassphrase mysecretcode 120 ^D (Ctrl-D)执行流程为先运行src/zcash-cli -stdin walletpassphrase随后在标准输入中逐行输入参数第一行为口令mysecretcode第二行为解锁时长120秒最后以 Ctrl-DEOF结束输入zcash-cli会将读取到的每一行作为后续参数追加并组装出完整的 RPC 调用。源码级实现细节该功能位于 src/bitcoin-cli.cpp 的CommandLineRPC中第 341-370 行if (GetBoolArg(-stdin, false)) { bool hide false; if (args.size() 0 args[0] walletpassphrase) { if (!SetStdinEcho(false)) throw std::runtime_error(unable to set terminal to non-echoing); hide true; } // Read one arg per line from stdin and append std::string line; while (std::getline(std::cin,line)) { args.push_back(line); if (hide) { if (!SetStdinEcho(true)) throw std::runtime_error(unable to set terminal back to echoing); hide false; } } }其中值得注意的细节逐行追加通过std::getline(std::cin, line)循环读取标准输入每行作为一个独立参数追加到args中直至 EOF。回显抑制如果第一个参数恰好是walletpassphrase客户端会调用SetStdinEcho(false)关闭终端的输入回显使口令输入不显示在屏幕上类 Unix 平台通过tcsetattr修改termios的ECHO标志实现见 src/bitcoin-cli.cpp并在读取完第一行后立即恢复回显。这同时防止了口令被屏幕记录和肩窥。帮助文本命令行帮助中对该参数的描述为Read extra arguments from standard input, one per line until EOF/Ctrl-D (recommended for sensitive information such as passphrases). If first extra argument iswalletpassphrasethen the first line(password) will not be echoed.见 src/bitcoin-cli.cpp。非终端场景当标准输入不是终端如重定向自文件或管道时SetStdinEcho会因ENOTTY直接返回成功——非终端输入本来就不会回显因此不会报错这也意味着-stdin天然支持脚本化调用# 从文件或管道喂入参数同样可行 echo -e mysecretcode\n120 | src/zcash-cli -stdin walletpassphrase该功能上游对应 Bitcoin Core 的 rpc: Input-from-stdin mode for bitcoin-cliWladimir J. van der Laan提交并在本版本由同一作者补充了发布说明。二、scriptSig 的 SIGHASH 类型解码变更内容从 1.1.1-rc2 开始每个 scriptSig 的asm属性会为其中“携带合法已定义哈希类型”的每一条签名追加解码后的签名哈希类型标注。典型示例引自发布说明变更前304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001变更后304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL]对比可见DER 编码签名末尾的 SIGHASH 类型字节01即SIGHASH_ALL被解码并替换为可读文本[ALL]。签名主体十六进制不变只是末尾哈希类型字节的展示形式从裸字节变成了语义标注。受影响的所有输出接口发布说明明确列出了所有受影响的位置接口说明RPCgetrawtransaction交易详情中的scriptSig.asmRPCdecoderawtransaction交易解码中的scriptSig.asmREST/rest/tx/JSON 格式交易 JSON 中的scriptSig.asmREST/rest/block/JSON 格式、含扩展交易详情时区块内交易的scriptSig.asmzcash-tx -jsonJSON 输出的scriptSig.asm不受影响RPCdecodescript的输出没有变化——因为它被明确配置为只处理scriptPubKey而非scriptSig脚本。底层实现原理解码逻辑集中在 src/core_write.cpp 的ScriptToAsmStr第 73-115 行其签名带有一个关键布尔参数std::string ScriptToAsmStr(const CScript script, const bool fAttemptSighashDecode)实现要点按需开启解码fAttemptSighashDecode默认值为false见 src/core_io.h。只有scriptSig的输出路径才显式传入true如 src/core_write.cpp 的ScriptToAsmStr(txin.scriptSig, true)、src/rpc/rawtransaction.cpp而scriptPubKey的输出路径如 src/core_write.cpp、src/rpc/rawtransaction.cpp保持默认false——这正解释了decodescript不受影响的原因。签名格式校验对每个大于 4 字节的 pushdata先通过CheckSignatureEncoding校验其是否符合 DER 签名格式避免把公钥或任意数据误判为签名源码注释明确指出Pubkey/Multisig 脚本中的公钥因格式与CheckSignatureEncoding检查不兼容不会被误解码。哈希类型查表替换对通过校验的数据取出最后一个字节作为 SIGHASH 类型在mapSigHashTypes中查表src/core_write.cpp字节值解码文本01[ALL]02[NONE]03[SINGLE]81[ALL|ANYONECANPAY]82[NONE|ANYONECANPAY]83[SINGLE|ANYONECANPAY]查表命中后弹出原哈希类型字节改为追加解码文本即HexStr(vch) strSigHashDecode。字节常量定义位于 src/script/interpreter.hSIGHASH_ALL 1、SIGHASH_NONE 2、SIGHASH_SINGLE 3、SIGHASH_ANYONECANPAY 0x80。只解码已定义类型对于00、80等未在表中定义的字节值例如空签名00或仅带ANYONECANPAY位而无基本类型的值不进行解码直接以裸十六进制展示。测试佐证ScriptToAsmStr的 SIGHASH 解码行为在 src/test/script_tests.cpp 有完备的单测覆盖。在fAttemptSighashDecode true时BOOST_CHECK_EQUAL(derSig [ALL] pubKey, ScriptToAsmStr(CScript() ToByteVector(ParseHex(derSig 01)) vchPubKey, true)); BOOST_CHECK_EQUAL(derSig [NONE] pubKey, ScriptToAsmStr(CScript() ToByteVector(ParseHex(derSig 02)) vchPubKey, true)); BOOST_CHECK_EQUAL(derSig [SINGLE] pubKey, ScriptToAsmStr(CScript() ToByteVector(ParseHex(derSig 03)) vchPubKey, true)); BOOST_CHECK_EQUAL(derSig [ALL|ANYONECANPAY] pubKey, ScriptToAsmStr(CScript() ToByteVector(ParseHex(derSig 81)) vchPubKey, true));而在fAttemptSighashDecode false默认时同一批数据全部保持裸十六进制输出derSig 01 pubKey等验证了该开关仅影响显式开启解码的调用方。此外tt-delin1-out.json、tt-delout1-out.json等 交易解析测试向量 中已出现大量...[ALL] pubkey形态的期望输出说明该格式已固化进全量测试体系。实用意义对开发者与运维人员而言这一变更让getrawtransaction/decoderawtransaction/ REST 接口的调试输出更具可读性无需再人工对照 DER 签名末尾字节与 SIGHASH 常量表即可一眼看出交易输入使用的是哪种签名哈希语义ALL、NONE、SINGLE以及是否叠加ANYONECANPAY。这对分析多签交易、部分签名交易PSBT 前身方案以及排查签名验证失败问题都很有帮助。三、同期关键改动速览为 Sapling 铺路除上述两项用户可见变更外1.1.1-rc2 的 changelog 还透露出大量服务于 Sapling 升级与工程质量的内部改动摘录如下Sapling 共识与钱包准备交易版本与序列化从 Sapling 激活高度起要求 v4 交易Adjust consensus rules to require v4 transactions from Sapling activation实现 Sapling v4 交易解析器、SpendDescription/OutputDescription数据结构并将 Overwinter 交易在 Sapling 激活高度前过期。签名哈希实现 ZIP 243 Sapling 签名哈希并更新相应 sighash 测试。Merkle 树与锚点新增 Sapling Merkle 树实现与回归测试向量将hashAnchor/DB_ANCHOR/GetAnchorAt/PushAnchor等重命名为 Sprout 专属并新增GetBestAnchor(SAPLING)、PushSaplingAnchor、Sapling 锚点共识校验、mempool 中过期锚点交易的驱逐等。nullifier 跟踪引入 Sapling nullifier 集合与 nullifier 类型枚举将旧缓存/映射重命名为 Sprout nullifier并支持在数据库与 mempool 中记录 Sapling nullifiers同时确保 Coinbase 交易不得包含 shielded spend/output。librustzcash 集成多次升级 librustzcash含 sapling-crypto 依赖接入 Sapling 测试网参数加载、Groth16 证明验证与生成、merkle_hashAPI 测试等Rust 工具链升至 1.26 Stable。交易大小上限从 Sapling 激活起将交易大小上限从 100kB 提高到MAX_BLOCK_SIZE对应源码 src/consensus/consensus.h 中的MAX_TX_SIZE_AFTER_SAPLING MAX_BLOCK_SIZE并新增最大合法 Sapling 交易的基准测试与大小边界测试。地址/密钥编码重构引入CBitcoinAddress包装、{Encode,Decode}PaymentAddress等无CZCEncoding的新实现并以boost::variant表达 shielded 地址与密钥为后续统一地址格式Unified Addresses演进打基础。上游工程质量回移植序列化重构Pieter Wuille 等prevector类型、流读写返回void、GetSerializeSize包装为CSizeComputer、去除nType/nVersion、unique_ptr/shared_ptr序列化支持等为后续代码大幅瘦身。RPC 增强createrawtransaction支持按输入设置nSequence并可选locktimeTom Hardinggetblock回移植 Bitcoin PR #8704 的可选完整交易详情并增加 verbosity 级别改进Simon Liu关闭 issue #3178。uacomment 配置按 BIP-0014 实现uacomment配置参数可为 user agent 添加注释并限制其总长度。健壮性修复OOM 时不再抛std::bad_alloc而是立即终止并尝试记录日志prevector断言成功分配base58SetString清洗完整向量修复memcpy传 NULL 指针的未定义行为统一使用EXIT_*退出码常量。构建与脚本默认禁用libzcashconsensus构建移除废弃的CreateJoinSplit/GenerateParams二进制macOS 下 fetch-params 改用 curl 与shlockBDB 备份下载改为 https。结语Zcash 1.1.1-rc2 是一个典型的“承上启下”版本zcash-cli -stdin与 scriptSig SIGHASH 类型解码为使用者提供了更安全的交互方式与更可读的交易解析输出二者在 src/bitcoin-cli.cpp 与 src/core_write.cpp 中都有清晰的实现与单测支撑而隐藏在 changelog 中的大量 Sapling 共识改动则直接铺平了后续 v4 交易与 Sapling 激活的道路。对于需要自行审计或二次开发 Zcash 的工程师建议以本版本为基线结合 src/test/script_tests.cpp 与 src/test/data/tt-delin1-out.json 等测试资产验证你对接 RPC 输出格式的解析代码。【免费下载链接】zcashZcash - Internet Money项目地址: https://gitcode.com/GitHub_Trending/zc/zcash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/6 15:45:44

泛微OA流程三要素校验:表单、路径、流转闭环配置指南

简介:本资源是一份面向泛微OA系统管理员与流程配置人员的实操型搭建指南,聚焦低代码流程引擎的核心配置能力,解决从零构建审批流、人事表单等业务流程的实际难题。文档以“加值班登记单”为完整案例,系统覆盖新建表单(…

2026/11/6 3:51:26

STM32H750寄存器级SD卡读写:SDMMC驱动与FATFS移植实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 13:44:19

大清包负责电工证吗内部消息:洛阳涧西区应届生必看电工证报考指南

大清包负责电工证吗内部消息:洛阳涧西区应届生必看电工证报考指南 现在找工作动不动就卡在特种作业证上,特别是电工证,没有它连门都进不去。你是不是也在担心,大清包负责电工证吗?有没有内部消息能帮咱们避开坑?别急,这篇就帮你理清楚电工证报考的全部…

2026/11/7 13:44:19

煤矿机电工证考试2026河南最新政策全解析

煤矿机电工证考试2026河南最新政策全解析 你是不是正在找煤矿机电工的工作,却发现没有 煤矿机电工证 根本进不了门?别急,2026年河南最新政策已经出炉,报考流程、考试内容、证书有效期等关键信息都在这了,看完这篇你就知道怎么快速拿到证,顺利…

2026/11/7 13:44:19

睢宁县电工证报名中心官方报名入口怎么找?找工作必须知道

睢宁县电工证报名中心官方报名入口怎么找?找工作必须知道 你有没有想过,找工作时被问:“有电工证吗?”一句话就卡住你了?现在各行各业都要求持证上岗,尤其是特种作业岗位,像电工、焊工、高处作业这些, 没有特种作业操作证,连门都进不去 。而…

2026/11/7 13:44:19

特种工证书遗失后怎么补办 通过率揭秘

特种工证书遗失后怎么补办 通过率揭秘 怕考不过白交培训费,现在很多人在报考特种工证书时最担心的就是钱花了却拿不到证,或者拿到证后因为各种原因遗失了,又得重新补办。尤其是像郑州金水区的学员,很多都是在工作之余抽时间备考,时间紧、任务重,…

2026/11/7 13:44:19

渝北电工证怎么考多少钱?新手必看报名全攻略

渝北电工证怎么考多少钱?新手必看报名全攻略 你是不是正在为找工作发愁?别急,特种作业证就是你打开高薪岗位的“金钥匙”。特别是在渝北地区,电工证已经成为很多岗位的门槛,尤其是像建筑、电力、制造业这些行业, 没有电工证,连面试资格都没有…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑