首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wagmi useContractWrite响应不包括事件参数

wagmi useContractWrite响应不包括事件参数
EN

Ethereum用户
提问于 2023-02-07 06:18:45
回答 2查看 460关注 0票数 2

我使用wagmi useContractWrite钩子执行智能契约函数,并希望从通过事件发出的函数中捕获响应。事件似乎是在data.logs下捕获的,事件参数/params包含在logs[0].data字段中,但是命名的参数/params不存在。是否还需要做一些额外的工作来捕获事件参数,或者我必须以某种方式解析日志0.data中完整字符串中的各个参数。

数据字符串中突出显示的部分是事件的第一个参数,其余部分将在该参数之后追加。

下面是来自useContractWrite的响应数据对象的屏幕截图。

EN

回答 2

Ethereum用户

回答已采纳

发布于 2023-02-07 16:08:49

您需要解析来自logs[0].data字段的各个参数,因为它包含事件的编码数据,而不是命名的参数。

您可以在这里阅读更多内容:https://docs.ethers.org/v5/api/utils/abi/coder/

示例代码:

代码语言:javascript
复制
/* some more code here */

// define signature and hash
const eventSignature = 'YourEvent(uint256, string)';
const eventSignatureHash = ethers.utils.id(eventSignature);

/* some more code here */

// check topics for your event
if (logs.topics[0] === eventSignatureHash) {
      const decodedEvent = ethers.utils.defaultAbiCoder.decode(
        [
          'uint256',
          'string'
        ],
        logs[0].data
      );
      // console decoded data
      console.log(decodedEvent);
}

示例演示console.log()输出的decodedEvent

代码语言:javascript
复制
[ 123, 'hello world' ]
票数 0
EN

Ethereum用户

发布于 2023-04-10 20:05:52

如果您使用的是Wagmi,则不需要经过复杂的事务日志解码过程。您可以简单地使用Wagmi的useContractEvent({})钩子和useContractWrite({})来处理事件。

钩子的结构如下:

代码语言:javascript
复制
  useContractEvent({
     address: 'Your Contract Address',
     abi: 'You Contract ABI',
     eventName: 'Name of Your Event',
     listener(parameter1, parameter2, parameter3) {
       console.log(parameter1, parameter2, parameter3)
     },
  })

阅读它的文档,并根据您的需要修改这个挂钩:

https://wagmi.sh/react/hooks/useContractEvent

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/144431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档