为了账号安全,请及时绑定邮箱和手机立即绑定

当我使用golang调用合约方法时,如何确认这个trx状态?

当我使用golang调用合约方法时,如何确认这个trx状态?

Go
蛊毒传说 2022-12-19 21:14:04
我将令牌铸造到我的帐户并返回交易哈希,但我现在不知道这个哈希状态。就像 js 可以使用回调函数来等待这个 trx 完成     var promise = await token.mint("my account",1)     console.log(promise.transactionHash)高朗transaction, err := erc721.Mint(trx, common.HexToAddress("my account"), big.NewInt(int64(i)))        if err != nil {            fmt.Println(err)        }        fmt.Println(transaction.Hash().String())
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

如评论中所述,您必须收听事件日志(最好针对您的地址进行过滤),并在确认后致电收据。


注意:示例只是为了演示必要的步骤。


func waitForReceipt(c *ethclient.Client, hash, addr string) (*types.Receipt, error) {

    query := ethereum.FilterQuery{

        Addresses: []common.Address{addr},

    }

    var ch = make(chan types.Log)

    sub, err := c.SubscribeFilterLogs(ctx, query, ch) // subscribe to all logs for addr

    if err != nil {

        return nil, err

    }


    for confirmed := false; !confirmed;  { // wait for confirmation on blockchain

        select {

        case err := <-sub.Err():

            return nil, err

        case vLog := <-ch:

            if vLog.TxHash.Hex() == hash {

                confirmed = true

            }

        }


    }

    return c.TransactionReceipt(ctx, hash) // call for receipt

}


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信