首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ethers.js收听契约事件?

如何使用ethers.js收听契约事件?
EN

Ethereum用户
提问于 2020-09-21 04:11:42
回答 2查看 63.5K关注 0票数 38

我需要侦听特定的契约事件,并在事件发出后执行一些任务。我没有在ethers.js文档中找到合适的文档。

有人能告诉我如何继续使用ethers.js监听我的合同事件吗?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-09-22 11:15:26

此答案假设您了解如何使用以太连接到合同。

您的问题指定侦听要发出的事件,并在此基础上执行任务。

下面是到以太v5文档的链接,我们将在下面对其进行一些扩展:https://docs.ethers.io/v5/api/providers/provider/#Provider--events

(醚v4为这里这里)

基本上,on函数就是您要寻找的东西。使用提供程序,您可以在发出特定事件时设置一个on来触发某个事件。这将在区块链上发出事件时触发回调( on中的第二个参数,函数)。如果您只希望在调用特定契约的事件时才触发on,则需要使用筛选器--在从任何契约发出此事件时,提供者将触发回调。

如果您查看上面链接到v5文档的示例(至少现在是22/09/2020),下面是如何使用过滤器的示例(一般过滤器或主题过滤器--我们将讨论第一个例子)。基本上:

代码语言:javascript
复制
filter = {
    address: THE_ADDRESS_OF_YOUR_CONTRACT,
    topics: [
        // the name of the event, parnetheses containing the data type of each event, no spaces
        utils.id("Transfer(address,address,uint256)")
    ]
}
provider.on(filter, () => {
    // do whatever you want here
    // I'm pretty sure this returns a promise, so don't forget to resolve it
})

关于如何以及如何在上面的链接中过滤哪些内容,还有更多的细节,但是这是基本的构建块。我希望这能帮到你!

更新:基于一条评论,我想我应该补充一下,on也可以与一个contract一起使用。如果您有一个表示契约的变量(我们称之为contract),您也可以将一个on连接到它上。这里's链接到v4文档中的一个部分,其中有一个示例(至少目前还没有在v5文档中)--向下滚动到“侦听事件”代码示例。它的格式与为第一个arg传递事件名称或筛选器的格式相同,然后可以将函数回调作为第二个。这只会从contract返回事件。

票数 36
EN

Ethereum用户

发布于 2021-04-06 06:51:59

// ERC-20中的事件:传输(地址索引src,地址索引dst,uint val)

代码语言:javascript
复制
contract.on("Transfer", (to, amount, from) => {
    console.log(to, amount, from);
});

你可以在这里读到:https://docs.ethers.io/v5/api/contract/contract/#Contract--events

这里也有很好的例子:https://docs.ethers.io/v5/concepts/events/

以及更多信息的讨论主题:https://github.com/ethers-io/ethers.js/issues/492

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

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

复制
相关文章

相似问题

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