调用eth_sendTransaction返回-32000 unknown account错误如何解决?
问题根因
你调用了错误的RPC接口,同时参数构造也不符合规范:
eth_sendTransaction是节点托管账户场景专用的接口,要求参数必须传from字段指定节点上已解锁的账户地址,节点会调用自身托管的私钥完成交易签名,你只传了data字段没有指定from,节点找不到对应签名用的账户,才会返回unknown account错误。- 你代码里传入的是已经签名完成的原始交易(rawTransaction),这种场景应该使用
eth_sendRawTransaction接口,不需要传from字段,直接把签名后的十六进制原始交易作为唯一参数传入即可。
代码修复方案
调整后的可运行代码如下:
func ExecuteSignedTransaction(rawTransaction string) { var hash web3.Hash // 替换为正确的接口,直接传入签名后的原始交易 err := Web3HTTPClient.Call("eth_sendRawTransaction", &hash, rawTransaction) if err != nil{ fmt.Println(err) os.Exit(1) } fmt.Println("Sent tx hash:", hash) }
额外排查点
如果修改接口后仍有报错,可以按以下顺序核对:
- 确认
rawTransaction是符合规范的十六进制字符串,且带有0x前缀 - 确认签名交易用的私钥对应地址在链上有足够余额支付gas费用
- 确认交易的nonce值和
from地址链上最新的nonce值匹配,没有重复或跳号
补充说明:如果你确实要使用节点托管账户的模式调用
eth_sendTransaction,需要在参数里补充from、to、gas、gasPrice、value等必填字段,不需要传入已签名的raw data,节点会自行完成交易签名。但该模式安全性极低,生产环境不建议使用。
内容的提问来源于stack exchange,提问作者0xKitsune
相关产品推荐
相关产品推荐

