我为我的智能合约创建了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.Nonce为nil时,documentation告诉它将从txOpts.From检索挂起的现时值。
发布于 2017-11-28 02:57:36
对于其他对此感到疑惑的人,我在使用Truffle develop框架进行测试时遇到了这个错误。对我来说,这个问题是因为Truffle JSON-RPC服务器返回的十六进制值带有前导零,比如"0x04",这违反了这里的规范:
https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding
当编码数量(整数,数字)时:编码为十六进制,前缀为"0x",最紧凑的表示形式(稍有例外:0应表示为"0x0")。
错误: 0x0400 (不允许前导零)
也就是说,对于Truffle,这里已经有了一个拉取请求:https://github.com/trufflesuite/ganache-core/pull/32
如果您正在使用另一个JSON-RPC服务器,则必须亲自验证它是否确实遵循此规范。
https://stackoverflow.com/questions/45534151
复制相似问题