ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Zcash BitRPC:用 Python 脚本通过 JSON-RPC 交互钱包命令的辅助工具解析

Zcash BitRPC:用 Python 脚本通过 JSON-RPC 交互钱包命令的辅助工具解析 Zcash BitRPC用 Python 脚本通过 JSON-RPC 交互钱包命令的辅助工具解析【免费下载链接】zcashZcash - Internet Money项目地址: https://gitcode.com/GitHub_Trending/zc/zcashBitRPC 是 Zcash 仓库contrib/bitrpc目录中保留的一个历史辅助工具它让你不再逐条敲命令行参数而是通过 RPC 接口以交互式方式向本地节点发送各类钱包/节点命令。本文基于仓库中的 BitRPC 说明文档 与 bitrpc.py 脚本本体讲清它的工作原理、支持的命令集合、与节点 RPC 的连接方式端口、认证并结合当前仓库源码说明它在现代 Zcash 节点上的适用边界——读完后你可以理解这套工具的来龙去脉并知道哪些命令在今天仍然有效、哪些已被zcash-cli取代。一、BitRPC 是什么把标准命令从命令行参数变成 RPC 调用BitRPC 的 README 对其定位只有一句话“Allows for sending of all standard Bitcoin commands via RPC rather than as command line args”——允许通过 RPC 而不是命令行参数的方式发送所有标准命令。它的实际形态是一个 Python 脚本 bitrpc.py你以第一个命令行参数指定要执行的方法名如getinfo、walletpassphrase脚本随后逐项交互式地向你收集该方法的参数再通过 JSON-RPC 发给本地zcashd。README 还专门指出BitRPC 完全覆盖了仓库早期两个独立钱包工具脚本的能力bitrpc.py walletpassphrasechange # 等价于原 walletchangepass.py 的功能 bitrpc.py walletpassphrase # 等价于原 walletunlock.py 的功能需要注意的是walletchangepass.py与walletunlock.py在当前仓库中已不存在全仓库检索无此两文件BitRPC 是它们功能的历史承接者而 contrib 总目录 也把 BitRPC 归类为 “Wallet Tools”并明确标注了 “This document has not been updated for Zcash and may be inaccurate”——也就是说这套工具是 Bitcoin 遗产代码在 Zcash 节点上使用时需要对照当前的 RPC 命令表验证有效性。二、脚本结构解析连接、认证与命令分发bitrpc.py 全文约 330 行结构非常直接可以分为三段2.1 用户设置区与 RPC 连接脚本开头是一个“USER SETTINGS”区块让你直接写死 RPC 用户名和密码避免每条命令都重新认证# BEGIN USER SETTINGS # if you do not set these you will be prompted for a password for every command rpcuser rpcpass # END USER SETTINGS if rpcpass : access ServiceProxy(http://127.0.0.1:8232) else: access ServiceProxy(http://rpcuser:rpcpass127.0.0.1:8232)两个关键点端口 8232 是 Zcash 节点的主网默认 JSON-RPC 端口。这一点在当前仓库源码中得到印证chainparamsbase.cpp 中主网nRPCPort 8232testnet/回归测试网为18232bitcoin-cli.cpp 与 init.cpp 的-rpcport帮助文案也写着 “default: 8232 or testnet: 18232”。脚本硬编码127.0.0.1:8232因此只适用于本机运行的主网zcashd若节点改用了非默认端口或运行的是 testnet脚本需要手工修改这行 URL。认证信息直接内嵌在 HTTP URL 中http://user:pass127.0.0.1:8232底层依赖第三方jsonrpc库的ServiceProxy完成 JSON-RPC 2.0 请求。对于如何获得合法的rpcuser/rpcpass仓库提供了配套工具 rpcuser.py见 share/rpcuser/README.md执行./rpcuser.py username会生成一串rpcauthusername:salt$hash供写入zcash.conf其原理是 src/rpc/protocol.h 中定义的 RPC 认证 cookie 机制GenerateAuthCookie/GetAuthCookie/DeleteAuthCookie所支持的 salted-hash 校验方案。2.2 命令分发cmd sys.argv[1].lower()之后脚本用一长串if/elif链做命令分发每个分支内部都是同一个模式elif cmd getbalance: try: acct raw_input(Enter an account (optional): ) mc raw_input(Minimum confirmations (optional): ) try: print access.getbalance(acct, mc) except: print access.getbalance() except Exception as inst: print inst这个双层try/except是脚本的通用容错手法先尝试带上全部交互输入的参数调用一旦服务端因参数不合法报错就退化为调用无参版本。敏感命令则用getpass.getpass静默读取密码encryptwallet、walletpassphrase、walletpassphrasechange分支密码不会回显在终端上。2.3 不支持的命令任何未列入分发链的第一个参数都会走到末尾的兜底分支打印Command not found or not supported——所以脚本“支持哪些命令”完全由源码中的elif列表决定。三、BitRPC 支持的命令清单按 bitrpc.py 源码逐一核对脚本共覆盖 35 个命令可按功能分组分组命令交互收集的主要参数钱包安全walletpassphrase钱包口令固定 60 秒解锁时长钱包安全walletpassphrasechange旧口令 新口令钱包安全encryptwallet口令 二次确认备份backupwallet目标路径/文件名账户getaccount/getaccountaddress/getaddressesbyaccount/setaccount/listaccounts地址、账户名地址getnewaddress账户名可留空查询getbalance/getreceivedbyaccount/getreceivedbyaddress/listtransactions/listreceivedbyaccount/listreceivedbyaddress账户/地址、最小确认数、交易条数等交易gettransaction/validateaddress/settxfee/move/sendfrom/sendmany/sendtoaddresstxid、地址、金额、备注节点信息getblockbycount/getblockcount/getblocknumber/getconnectioncount/getdifficulty/getgenerate/gethashespersec/getinfo块高度仅getblockbycount挖矿getwork/setgenerate数据、是否生成、CPU 数其他help/stop可选的方法名其中walletpassphrase分支值得注意调用时写死了access.walletpassphrase(pwd, 60)即每次解锁固定 60 秒脚本没有提供自定义超时参数的入口而当前节点该命令的第二参数是可指定的例如 src/wallet/rpcwallet.cpp 中的帮助示例walletpassphrase my pass phrase 60。四、BitRPC 与当前 Zcash 节点的兼容边界4.1 大量“账户类”命令已从节点移除BitRPC 是 Bitcoin 早期客户端的产物其命令表中约三分之一getaccount、getaccountaddress、setaccount、listaccounts、getreceivedbyaccount、listreceivedbyaccount、move、sendfrom等属于比特币钱包的 “account账户” 模型。当前 Zcash 钱包 RPC 已不再支持账户模型——src/rpc/protocol.h 保留了专门的错误码RPC_WALLET_ACCOUNTS_UNSUPPORTED -11“Accounts are unsupported”用于这类调用。因此这些分支在当前zcashd上运行会收到-11错误只有getbalance、sendmany、getnewaddress、walletpassphrase、getinfo等核心命令仍然有效例如getbalance/sendmany现注册于 src/wallet/rpcwallet.cpp 的钱包命令表中。4.2 等效的现代做法zcash-cli 与 curl仓库自身的帮助信息已经指向zcash-cli作为首选入口src/rpc/server.cpp 中HelpExampleCli/HelpExampleRpc生成的示例分别为 zcash-cli method args curl --user myusername --data-binary {jsonrpc: 1.0, id:curltest, method: method, params: [ args ] } -H content-type: text/plain; http://127.0.0.1:8232/也就是说BitRPC 想解决的问题不必手写 curl、不必每次敲完整参数今天已由zcash-cli完整覆盖而 src/bitcoin-cli.cpp 中对walletpassphrase的特判逻辑也正是zcash-cli交互式解锁钱包的实现位置。4.3 使用前提与限制小结运行环境脚本使用raw_input与print语句是 Python 2 代码并依赖第三方jsonrpc包from jsonrpc import ServiceProxy在纯 Python 3 环境下无法直接运行适用网络仅主网本机节点127.0.0.1:8232testnet18232或自定义-rpcport需手改 URL认证方式只支持把rpcuser/rpcpass写进脚本或走节点自动生成的 cookie写死凭据的脚本文件注意保管避免泄露命令有效性以上述 35 个命令为准且在当前节点上使用前应以zcash-cli help command的输出为准——账户类命令会因-11错误被拒绝。五、结语contrib/bitrpc 是理解 Zcash 钱包 RPC 交互模型的一个“活化石”样本它用最朴素的 if/elif 分发展示了 JSON-RPC 客户端的最小形态——固定地址与端口8232、凭据内嵌 URL、参数交互式收集、双层异常回退。对于熟悉zcash-cli之后仍想理解 RPC 报文层的读者bitrpc.py 配合 src/rpc/server.cpp 中的 curl 示例足以作为一份可读的 RPC 请求参考实现而生产环境中的钱包操作仍建议以zcash-cli及 share/rpcuser 提供的凭据生成工具为准。【免费下载链接】zcashZcash - Internet Money项目地址: https://gitcode.com/GitHub_Trending/zc/zcash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表