ethers.js9、过滤事件

 在 合约监听 的基础上,我们拓展一下,在监听的过程中增加过滤器,监听指定地址的转入转出。

 过滤器

 

当合约创建日志(释放事件)时,它最多可以包含[4]条数据作为索引(indexed)。索引数据经过哈希处理并包含在布隆过滤器中,这是一种允许有效过滤的数据结构。因此,一个事件过滤器最多包含4个主题集,每个主题集是个条件,用于筛选目标事件。规则:

  • 如果一个主题集为null,则该位置的日志主题不会被过滤,任何值都匹配。
  • 如果主题集是单个值,则该位置的日志主题必须与该值匹配。
  • 如果主题集是数组,则该位置的日志主题至少与数组中其中一个匹配。

ethers.js9、过滤事件_第1张图片

构建过滤器 

ethers.js中的合约类提供了contract.filters来简化过滤器的创建:

const filter = contract.filters.EVENT_NAME( ...args ) 

其中EVENT_NAME为要过滤的事件名,..args为主题集/条件。前面的规则有一点抽象,下面举几个例子。

  1. 过滤来自myAddress地址的Transfer事件

    contract.filters.Transfer(myAddress)
    

  2. 过滤所有发给 myAddress地址的Transfer事件

    contract.filters.Transfer(null, myAddress)
    

  3. 过滤所有从 myAddress发给otherAddressTransfer事件

    contract.filters.Transfer(myAddress, otherAddress)
    

  4. 过滤所有发给myAddressotherAddressTransfer事件

    contract.filters.Transfer(null, [ myAddress, otherAddress ])
    

监听交易所的USDT转账

你可能感兴趣的:(区块链)