golang语言调用以太坊测试网的合约一直失败

问题描述

大概是这样的问题,我通过页面调用(metamask)和通过代码(golang)调用,通过区块链浏览器查询两笔交易,发现很多几乎一样,但是代码调用就是一直失败,报什么msg.value错误,这个值我明明设置了。我挑两笔主要的交易供排查问题,我这个账户调试了很多交易一直失败,弄不懂。

  • 合约地址:0xe5e30e7c24e4dfcb281a682562e53154c15d3332,我没接触过以太坊的合约,这个好像是个代理合约还是啥,真正的合约应该是0xcbA6a367A45708F9f4307A75062C1047677bfAd4

  • 账户:0x69b0b7f5079201D4d34C66A8AD7De56607F7dc40

  • 交易失败的:0x6a98cedebd223900e90b225506db580267981542ff25db6ea339e46689ba3ac9

  • 交易成功的:0x9be67d6f52d20b5ffcccaa481f3efa5b58eb48a513bad78b322c9f7df9ecc82d

截图

image.png

image.png

代码


// key store file
keyfile := filepath.Join(KeyStoreDir, fromAddress)

// 打开keyfile
keyJson, err := os.ReadFile(keyfile)
if err != nil {
        log.Fatalf("Could not read key file: %v", err)
        return
}

txIDOpts, err := bind.NewTransactorWithChainID(strings.NewReader(string(keyJson)), Password, chainID)
if err != nil {
        log.Println("new key store tx error", err.Error())
        return
}

noce, err := goerliCli.NonceAt(ctx, txIDOpts.From, nil)
if err != nil {
        log.Fatal("get nonce error", err.Error())
        return
}

log.Println("nonce", noce)

gasPrice, _ := goerliCli.SuggestGasPrice(ctx)
log.Println("gas price", gasPrice.String())

// 设置gas
txIDOpts.GasLimit = uint64(300000)
// 设置value
txIDOpts.Value = big.NewInt(1000000000000000)
// 设置nonce
txIDOpts.Nonce = big.NewInt(int64(noce))

// 发送交易,有结果,但是就是区块链查询一直失败
res, err := abi.DepositETH(txIDOpts, big.NewInt(1000000000000000), new(big.Int).SetUint64(uint64(40000)))
if err != nil {
        log.Println("call Deposit Eth error: ", err.Error())
        return
}

log.Println("res value", res.Value().String())
请先 登录 后评论

4 个回答

天才威
请先 登录 后评论
天才威
请先 登录 后评论
xjm
请先 登录 后评论
zen
请先 登录 后评论