个人账户调用智能合约中的那些写入类型的函数怎么才能拿到函数的返回值呢?

只知道如果是调用那种read类型的,不管是用web3还是ethers那个库,直接打印函数返回结果就行了,但是如果是写入操作的话,返回的是一个交易信息,那怎么才能获取到函数返回值呢?

请先 登录 后评论

2 个回答

不爱你ZC

我有用过的方法:
调用eth_getTransactionReceipt 拿到交易详情
再调用eth_call把交易信息提交到节点上 就会拿到函数返回值

golang的话可以试下下面的代码

func GetMessage(hash common.Hash) (string, error) {
	tx, _, err := eth.Client.TransactionByHash(context.Background(), hash)
	if err != nil {
		return "", err
	}

	from, err := types.Sender(types.NewEIP155Signer(tx.ChainId()), tx)
	if err != nil {
		return "", err
	}

	msg := ethereum.CallMsg{
		From:     from,
		To:       tx.To(),
		Gas:      tx.Gas(),
		GasPrice: tx.GasPrice(),
		Value:    tx.Value(),
		Data:     tx.Data(),
	}

	res, err := eth.Client.CallContract(context.Background(), msg, nil)
	if err != nil {
		return "", err
	}

	return string(res), nil
}
请先 登录 后评论
李宗荣

emit event?

请先 登录 后评论
  • 2 关注
  • 0 收藏,4334 浏览
  • 996633 提出于 2022-05-18 13:36