diff --git a/src/config.ts b/src/config.ts index 67ef18fa..9e115da3 100644 --- a/src/config.ts +++ b/src/config.ts @@ -145,10 +145,10 @@ export const SCRAPER_MODE: ScraperMode = process.env.SCRAPER_MODE === undefined ? DEFAULT_SCRAPER_MODE : process.env.SCRAPER_MODE === 'BLOCKS' - ? 'BLOCKS' - : process.env.SCRAPER_MODE === 'EVENTS' - ? 'EVENTS' - : throwError('Wrong SCRAPER_MODE'); + ? 'BLOCKS' + : process.env.SCRAPER_MODE === 'EVENTS' + ? 'EVENTS' + : throwError('Wrong SCRAPER_MODE'); export const METRICS_PATH = process.env.METRICS_PATH || DEFAULT_METRICS_PATH; export const PROMETHEUS_PORT = getIntConfig('PROMETHEUS_PORT', DEFAULT_PROMETHEUS_PORT); @@ -389,13 +389,13 @@ export const FEAT_UNISWAP_V2_PAIR_CREATED_EVENT = getBoolConfig( export const UNISWAP_V2_PAIR_CREATED_PROTOCOL_CONTRACT_ADDRESSES_AND_START_BLOCKS = process.env .UNISWAP_V2_PAIR_CREATED_PROTOCOL_CONTRACT_ADDRESSES_AND_START_BLOCKS ? process.env.UNISWAP_V2_PAIR_CREATED_PROTOCOL_CONTRACT_ADDRESSES_AND_START_BLOCKS.split(',').map((contract) => { - const [name, factoryAddress, startBlock] = contract.split(':'); - return { - name, - factoryAddress, - startBlock: parseInt(startBlock), - }; - }) + const [name, factoryAddress, startBlock] = contract.split(':'); + return { + name, + factoryAddress, + startBlock: parseInt(startBlock), + }; + }) : []; if ( diff --git a/src/data_sources/events/web3.ts b/src/data_sources/events/web3.ts index ee04deb5..32126da4 100644 --- a/src/data_sources/events/web3.ts +++ b/src/data_sources/events/web3.ts @@ -28,12 +28,20 @@ export interface ContractCallInfo { data: string; } +const web3HttpOptions = { + providerOptions: { + headers: { + 'Accept-Encoding': 'gzip', + }, + } as RequestInit, +}; + export class Web3Source { private readonly _web3Wrapper: Web3Wrapper; private readonly _web3: any; constructor(provider: Web3ProviderEngine, wsProvider: string) { this._web3Wrapper = new Web3Wrapper(provider); - this._web3 = new Web3(wsProvider); + this._web3 = new Web3(new Web3.providers.HttpProvider(wsProvider, web3HttpOptions)); if (BLOCK_RECEIPTS_MODE === 'standard') { this._web3.eth.extend({ diff --git a/src/utils/retry.ts b/src/utils/retry.ts new file mode 100644 index 00000000..d57997a5 --- /dev/null +++ b/src/utils/retry.ts @@ -0,0 +1,22 @@ +import { logger } from './logger'; + +export async function retry any>( + fn: T, + args: Parameters, + maxTry: number, + retryCount = 1, +): Promise>> { + const currRetry = typeof retryCount === 'number' ? retryCount : 1; + try { + logger.info(`Attempt #${currRetry}.`); + const result = await fn(...args); + return result; + } catch (e) { + logger.info(`Retry ${currRetry} failed.`); + if (currRetry > maxTry) { + logger.info(`All ${maxTry} retry attempts exhausted`); + throw e; + } + return retry(fn, args, maxTry, currRetry + 1); + } +}