当前位置:   article > 正文

ethers.js 和 node.js获取合约里的事件_ettherjs provider

ettherjs provider

上面几篇文章有用到web3.js 获取合约里的事件,发现有时候事件多的话会报超出访问限制,我用ethers.js的 JsonRpcBatchProvider解决了这个问题。

JsonRpcBatchProvider他是把多个访问rpc的请求组装成一个请求返回数据, 减少了rpc的调用次数, 降低了rpc响应时间

安装环境

电脑要安装node 环境

npm install ethers
yarn add ethers
  • 1
  • 2

主要代码

import { providers, utils} from 'ethers'
import path from 'path'
import fs from 'fs'

class Model {
  introBindAbi: any
  provider: any
  constructor () {
    this.initWeb3()
  }
   
  async initWeb3 () {
    this.introBindAbi = JSON.parse((fs.readFileSync(path.resolve(__dirname, '../abi/introBindAbi.json'))).toString())
    
    this.provider = new providers.JsonRpcBatchProvider(config.rpcUrl);
  }
  getBlockNumber () {
    return this.provider.getBlockNumber()
  }
  
  async getIntroBindLogData (localBlock: Number, endBlock: Number) {
    let Interface = new utils.Interface(this.introBindAbi)
    let filter = {
      address: config.introBindContractAddress,
      fromBlock: localBlock,
      toBlock: endBlock,
    }
    let logs = await this.provider.getLogs(filter)
    console.log(logs.length, 'logs.length')
    for(let i = 0; i < logs.length ;i++) {
      let item = logs[i]
      try {
        let data = Interface.parseLog({topics:item.topics, data: item.data})
        switch(data.name) {
          case 'BindIntroLog':
            break
        }
      
      } catch (error) {
      
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/877809
推荐阅读
相关标签
  

闽ICP备14008679号