You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Wagmi从交易回执中获取事件?

关于Wagmi获取交易事件数组的问题

Ethers.js 中的 ContractReceipt 继承自 TransactionReceipt,包含交易的事件数组;而当前 Wagmi 返回的是 Viem 类型的 TransactionReceipt,确实没有对应的 ContractReceipt 类型,但依然可以获取交易事件数组,具体方式如下:

  • Wagmi 调用合约(writeContract/readContract)返回的交易收据中,logs 字段就是对应的事件数组,对应 Ethers.js 里 ContractReceipt 的事件集合。
  • 如果需要解析这些日志为结构化的事件数据,可以使用 Viem 的 decodeEventLog 方法,传入合约事件的 ABI 和日志对象即可解析出事件参数。

示例代码参考:

import { decodeEventLog, writeContract } from '@wagmi/core'
import { abi } from './yourContractAbi'

// 调用合约并获取收据
const receipt = await writeContract({
  address: '0x...',
  abi,
  functionName: 'yourFunction',
  args: [...],
})

// 筛选并解析指定事件
const transferLog = receipt.logs.find(log => 
  log.topics[0] === decodeEventLog({ abi, eventName: 'Transfer' }).topic
)

if (transferLog) {
  const parsedEvent = decodeEventLog({
    abi,
    eventName: 'Transfer',
    data: transferLog.data,
    topics: transferLog.topics,
  })
  console.log('解析后的Transfer事件:', parsedEvent)
}

内容的提问来源于stack exchange,提问作者Brian Doyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:08:09