Zcash T/Z地址执行RawTransaction时报错:无效Zcash地址
解决Zcash createrawtransaction的「invalid zcash address」错误
我来帮你排查这个报错问题,你遇到的「invalid zcash address」通常有两个核心原因,对应下面的解决方案:
一、先排查地址网络是否匹配
你使用的Z地址是ztJTQ72v68ZddM4vmJg77K1mdBXHWQPS8GXN4Yb7A8e48JUo3tNzLgej1yqFPFeNkVUL1CMeg62qHMr7joaYK35A86neMNM,开头是zt——这是Zcash测试网的屏蔽地址格式,但如果你的节点运行在主网模式下,主网节点会直接拒绝识别测试网地址,从而触发错误。
验证方法:
运行以下命令查看当前节点的网络模式:
./src/zcash-cli getnetworkinfo
查看输出中的chain字段:
- 如果显示
main,说明是主网,需要改用主网Z地址(以z开头) - 如果显示
test,说明是测试网,这个zt开头的地址是合法的
调整方式:
如果网络不匹配,要么修改zcash.conf配置文件(添加testnet=1启用测试网,删除该参数则回到主网),要么更换对应网络的合法地址。
二、修正createrawtransaction的输出格式
Zcash的createrawtransaction命令处理**屏蔽地址(Z地址)和透明地址(T地址)**混合输出时,不能直接用{"地址": 金额}的键值对格式,需要改用数组结构,每个输出是独立的对象。
正确的命令格式:
./src/zcash-cli createrawtransaction '[{"txid":"f7e04b684ee10c3c8e7aacdcd11454e7f21d91c5a8b27ae6cbbbca93efa57ddd","vout":0}]' '[{"address": "ztJTQ72v68ZddM4vmJg77K1mdBXHWQPS8GXN4Yb7A8e48JUo3tNzLgej1yqFPFeNkVUL1CMeg62qHMr7joaYK35A86neMNM", "amount":7}, {"address": "tmNHNUV56LiEyb8cSrrAgupHXnrxhbN1H6v", "amount":2.9999}]'
注意:这个格式需要你的Zcash客户端版本在5.0及以上,旧版本可能不支持这种混合输出的结构化写法。
三、更简单的替代方案:使用zcash_sendmany
如果不需要手动构建原始交易,zcash_sendmany命令对混合地址输出更友好,不需要纠结格式:
./src/zcash-cli zcash_sendmany "" '{"ztJTQ72v68ZddM4vmJg77K1mdBXHWQPS8GXN4Yb7A8e48JUo3tNzLgej1yqFPFeNkVUL1CMeg62qHMr7joaYK35A86neMNM":7, "tmNHNUV56LiEyb8cSrrAgupHXnrxhbN1H6v":2.9999}' 1 "" '[{"txid":"f7e04b684ee10c3c8e7aacdcd11454e7f21d91c5a8b27ae6cbbbca93efa57ddd","vout":0}]'
参数说明:
- 第一个空字符串:表示从默认钱包的可用地址中自动匹配输入(这里我们指定了自定义UTXO,所以不影响)
- 第二个对象:输出的地址和对应金额
1:手续费优先级(可根据需求调整)- 第四个空字符串:交易备注(可选)
- 最后一个数组:你指定的输入UTXO
额外注意点:
- 确保你指定的UTXO金额足够覆盖输出总额+手续费,否则会触发余额不足的错误
- 如果是测试网,先确认节点已经同步到最新区块高度
内容的提问来源于stack exchange,提问作者Pratibha R
相关产品推荐
相关产品推荐

