我为智能合约创建go bindings但在执行交易时遇到问题。它仅在我明确指定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.From
为txOpts.Nonce
时,documentation告诉它会从nil
检索待处理的nonce。
答案 0 :(得分: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服务器,则必须亲自验证它是否真的遵循此规范。