diff --git a/components/Statistics.vue b/components/Statistics.vue index 15b5165..c12eb3f 100644 --- a/components/Statistics.vue +++ b/components/Statistics.vue @@ -93,9 +93,7 @@ export default { } }, mounted() { - if (!this.timer) { - this.updateEvents() - } + this.updateEvents() }, beforeDestroy() { clearTimeout(this.timer) @@ -103,10 +101,6 @@ export default { methods: { updateEvents() { this.$store.dispatch('application/updateSelectEvents') - - this.timer = setTimeout(() => { - this.updateEvents() - }, 60 * 1000) } } } diff --git a/services/events.js b/services/events.js index 5bf6d71..7d951f2 100644 --- a/services/events.js +++ b/services/events.js @@ -4,7 +4,7 @@ import graph from '@/services/graph' import { download } from '@/store/snark' import networkConfig from '@/networkConfig' import InstanceABI from '@/abis/Instance.abi.json' -import { CONTRACT_INSTANCES, eventsType, corsConfig } from '@/constants' +import { CONTRACT_INSTANCES, eventsType, httpConfig } from '@/constants' import { sleep, flattenNArray, formatEvents, capitalizeFirstLetter } from '@/utils' const supportedCaches = ['1', '56', '100', '137'] @@ -332,8 +332,6 @@ class EventService { } async getBatchEventsFromRpc({ fromBlock, type }) { - this.updateEventProgress(0, type) - try { const batchSize = 10 const blockRange = 10000 @@ -349,6 +347,8 @@ class EventService { let events = [] if (fromBlock < currentBlockNumber) { + this.updateEventProgress(0, type) + for (let batchIndex = 0; batchIndex < batchCount; batchIndex++) { const batch = await Promise.all( this.createBatchRequest({ batchIndex, batchBlocks, blockDenom, batchSize, type }) @@ -375,10 +375,11 @@ class EventService { async getEventsFromRpc({ fromBlock, type }) { try { const { blockDifference } = await this.getBlocksDiff({ fromBlock }) + const blockRange = 10000 let events - if (blockDifference < 10000) { + if (blockDifference < blockRange) { const rpcEvents = await this.getEventsPartFromRpc({ fromBlock, toBlock: 'latest', type }) events = rpcEvents?.events || [] } else { @@ -441,7 +442,7 @@ class EventsFactory { instances = new Map() constructor(rpcUrl) { - const httpProvider = new Web3.providers.HttpProvider(rpcUrl, corsConfig(rpcUrl)) + const httpProvider = new Web3.providers.HttpProvider(rpcUrl, httpConfig) this.provider = new Web3(httpProvider).eth } diff --git a/services/registry/index.js b/services/registry/index.js index 29184e1..c20a744 100644 --- a/services/registry/index.js +++ b/services/registry/index.js @@ -4,7 +4,7 @@ import { BigNumber as BN } from 'bignumber.js' import { toChecksumAddress, isAddress } from 'web3-utils' import networkConfig from '@/networkConfig' -import { REGISTRY_DEPLOYED_BLOCK, corsConfig } from '@/constants' +import { REGISTRY_DEPLOYED_BLOCK } from '@/constants' import { sleep, flattenNArray } from '@/utils' import AggregatorABI from '@/abis/Aggregator.abi.json' @@ -25,9 +25,9 @@ class RelayerRegister { this.relayerRegistry = new this.provider.Contract(RelayerRegistryABI, registryContract) } - fetchEvents = ({ fromBlock, toBlock }) => { - if (fromBlock <= toBlock) { - return new Promise((resolve, reject) => { + fetchEvents = ({ fromBlock, toBlock }, shouldRetry = false) => { + return new Promise((resolve, reject) => { + if (fromBlock <= toBlock) { try { const registeredEventsPart = this.relayerRegistry.getPastEvents('RelayerRegistered', { fromBlock, @@ -36,22 +36,20 @@ class RelayerRegister { resolve(registeredEventsPart) } catch (error) { - sleep(200) + if (shouldRetry) { + sleep(1000) - const midBlock = (fromBlock + toBlock) >> 1 + const events = this.fetchEvents({ fromBlock, toBlock }) - if (midBlock - fromBlock < 2) { - reject(new Error(`error fetching events: ${error.message}`)) + resolve(events) + } else { + reject(new Error(error)) } - - const arr1 = this.fetchEvents({ fromBlock, toBlock: midBlock }) - const arr2 = this.fetchEvents({ fromBlock: midBlock + 1, toBlock }) - resolve([...arr1, ...arr2]) } - }) - } else { - return [] - } + } else { + resolve([]) + } + }) } batchFetchEvents = async ({ fromBlock, toBlock }) => { @@ -60,11 +58,20 @@ class RelayerRegister { const chunkCount = Math.ceil(blockDifference / blockRange) const blockDenom = Math.ceil(blockDifference / chunkCount) - const promises = new Array(chunkCount).fill('').map((_, i) => - this.fetchEvents({ - fromBlock: i * blockDenom + fromBlock, - toBlock: (i + 1) * blockDenom + fromBlock - }) + const promises = new Array(chunkCount).fill('').map( + (_, i) => + new Promise((resolve) => { + sleep(300) + + const batch = this.fetchEvents( + { + fromBlock: i * blockDenom + fromBlock, + toBlock: (i + 1) * blockDenom + fromBlock + }, + true + ) + resolve(batch) + }) ) const batchEvents = flattenNArray(await Promise.all(promises)) @@ -123,8 +130,7 @@ class RelayerRegister { getENSAddress = async (ensName) => { const { url } = Object.values(networkConfig.netId1.rpcUrls)[0] - const httpProvider = new Web3.providers.HttpProvider(url, corsConfig(url)) - const provider = new Web3(httpProvider) + const provider = new Web3(url) const ensAddress = await provider.eth.ens.getAddress(ensName) @@ -144,24 +150,21 @@ class RelayerRegister { try { let toBlock let registerRelayerEvents - let lastBlock + let lastSyncBlock = blockTo if (cachedEvents.length > 0 || blockDifference === 0) { return cachedEvents } else if (blockDifference >= blockRange) { toBlock = currentBlockNumber registerRelayerEvents = await this.batchFetchEvents({ fromBlock, toBlock }) - lastBlock = toBlock + lastSyncBlock = toBlock } else { toBlock = fromBlock + blockRange - registerRelayerEvents = await this.fetchEvents({ fromBlock, toBlock }) - lastBlock = toBlock + registerRelayerEvents = await this.fetchEvents({ fromBlock, toBlock }, true) + lastSyncBlock = toBlock } - const lastIndex = registerRelayerEvents.length - 1 - const lastSyncBlock = registerRelayerEvents[lastIndex]?.blockNumber || lastBlock const relayerEvents = cachedEvents.concat(registerRelayerEvents || []) - const events = [] for (let x = 0; x < relayerEvents.length; x++) { @@ -180,8 +183,8 @@ class RelayerRegister { await this.saveEvents({ storeName: 'register_events', lastSyncBlock, events }) allRelayers = allRelayers.concat(events) - } catch (e) { - return cachedEvents + } catch (err) { + console.log(err) } return allRelayers }