1

我为我的智能合约创建了 go 绑定,但在执行交易时遇到了问题。它仅在我明确指定txOpts.Nonce(见注释行)时才有效。当我离开评论行时,我收到此错误:

Failed to execute transaction: failed to retrieve account nonce: json: cannot unmarshal hex number with leading zero digits into Go value of type hexutil.Uint64`

以下是相关代码:

txOpts := bind.NewKeyedTransactor(key)

//txOpts.Nonce = big.NewInt(<nonce>)

tx, err := token.MyContract(txOpts, big.NewInt(1))
if err != nil {
    log.Fatalf("Failed to execute transaction: %v", err)
}

文档告诉它将从txOpts.Fromwhen txOpts.Nonceis检索待处理的随机数nil

4

1 回答 1

1

对于其他对此感到疑惑的人,我在使用 Truffle 开发框架进行测试时遇到了这个错误。对我来说,这个问题是因为 Truffle JSON-RPC 服务器返回带有前导零的十六进制值,如“0x04”,这违反了这里的规范:

https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding

编码 QUANTITIES(整数、数字)时:编码为十六进制,前缀为“0x”,最紧凑的表示(轻微例外:零应表示为“0x0”)。

错误:0x0400(不允许前导零)

也就是说,对于 Truffle,这里已经有一个拉取请求:https ://github.com/trufflesuite/ganache-core/pull/32

如果您使用另一个 JSON-RPC 服务器,您必须自己验证它是否确实遵循此规范。

于 2017-11-27T18:57:36.483 回答