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



我将令牌存入我的帐户,它返回事务哈希,但我想现在这个哈希状态。像js可以使用回调函数等待这个trx完成

var promise = await token.mint("my account",1)
console.log(promise.transactionHash)

golang

transaction, err := erc721.Mint(trx, common.HexToAddress("my account"), big.NewInt(int64(i)))
if err != nil {
fmt.Println(err)
}
fmt.Println(transaction.Hash().String())

正如评论中提到的,您必须侦听事件日志(最好针对您的地址进行过滤),并在确认后呼叫接收。

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

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
}

最新更新