赞
踩
上面几篇文章有用到web3.js 获取合约里的事件,发现有时候事件多的话会报超出访问限制,我用ethers.js的 JsonRpcBatchProvider解决了这个问题。
JsonRpcBatchProvider他是把多个访问rpc的请求组装成一个请求返回数据, 减少了rpc的调用次数, 降低了rpc响应时间
电脑要安装node 环境
npm install ethers
yarn add ethers
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) { } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。