You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Geth的eth_sign方法报invalid argument 0错误的原因排查

错误原因解析

问题核心

你调用的eth_sign方法参数格式完全不符合规范,导致Geth无法解析参数。

你发送的请求参数(错误示例)

{
"jsonrpc":"2.0",
"id":1,
"method": "eth_sign",
  "params": [
    {
      "from": "0xDc89096c0E279933a7C99e13f1474A0a84320207",
      "gas": "0x55555",
      "maxFeePerGas": "0x1234",
      "maxPriorityFeePerGas": "0x1234",
      "input": "",
      "nonce": "0x0",
      "to": "0xCdde93eEDC6c911D33E7fe41DC05208E0630a4c0",
      "value": "0x1234"
    }
  ]
}

收到的错误

{
    "jsonrpc": "2.0",
    "id": 1,
    "error": {
        "code": -32602,
        "message": "invalid argument 0: json: cannot unmarshal non-string into Go value of type common.Address"
    }
}

具体原因

eth_sign方法的参数要求是两个字符串:

  • 第一个参数:要签名的账户地址(字符串格式)
  • 第二个参数:要签名的数据(16进制字符串格式,通常以0x开头)

而你传入的第一个参数是一个交易对象(JSON对象),不是字符串格式的地址,Geth试图把这个对象解析成common.Address类型(Go语言的地址类型,要求为字符串),因此抛出了"无法将非字符串反序列化为common.Address类型"的错误。

另外,如果你是想签名并发送交易,应该使用eth_sendTransaction或eth_signTransaction方法,而非eth_sign。eth_sign是用来对任意数据进行签名,并非处理交易的接口。

正确的eth_sign调用示例

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sign",
  "params": [
    "0xDc89096c0E279933a7C99e13f1474A0a84320207",
    "0x48656c6c6f20576f726c64" // 对应"Hello World"的16进制编码
  ]
}

若要处理交易的正确调用示例(eth_signTransaction)

如果你是要签名交易,应该使用eth_signTransaction,参数为交易对象:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_signTransaction",
  "params": [
    {
      "from": "0xDc89096c0E279933a7C99e13f1474A0a84320207",
      "gas": "0x55555",
      "maxFeePerGas": "0x1234",
      "maxPriorityFeePerGas": "0x1234",
      "input": "",
      "nonce": "0x0",
      "to": "0xCdde93eEDC6c911D33E7fe41DC05208E0630a4c0",
      "value": "0x1234"
    }
  ]
}

内容的提问来源于stack exchange,提问作者Mahsum Akbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:15:39