如何使用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
相关产品推荐
相关产品推荐

