如何从安全帽中发出的事件获取参数?

问题描述 投票:0回答:1

我一直在尝试获取从合约函数调用发出的事件的参数。但到目前为止还没有运气。

基于我发现类似的东西应该有效:

  const tx = await eventEmitter.emitBothEvents(42, "foo");

  const receipt = await tx.wait()

  for (const event of receipt.events) {
    console.log(`Event ${event.event} with args ${event.args}`);
  }

https://github.com/fvictorio/hardhat-examples/blob/master/reading-events/scripts/getEventsFromTx.js

但是无论我调用什么函数,

receipt.events
始终是未定义的。 那么..对此有任何更新吗?我还有其他方法可以实现这一目标吗?

solidity hardhat
1个回答
0
投票

找到解决方案:

const tx = await myContract.myFunction()
  result = await tx.wait()

  function findEventArgs(logs, eventName) {
    let _event = null;
  
    for (const event of logs) {
      if (event.fragment && event.fragment.name === eventName) {
        _event = event.args;
      }
    }
    return _event
  }

  console.log(findEventArgs(result.logs, "myEventName"))
© www.soinside.com 2019 - 2024. All rights reserved.