Skip to content

Commit

Permalink
Raises polling interval to 12s from 4s to reduce infura load. (#70)
Browse files Browse the repository at this point in the history
* Refactor provider init and update polling.

* Lower to 12s.
  • Loading branch information
jnaviask authored Aug 4, 2021
1 parent 9d10e53 commit ea0c125
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 90 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@commonwealth/chain-events",
"version": "0.7.1",
"version": "0.7.2",
"description": "Listen to various chains for events.",
"license": "GPL-3.0",
"files": [
Expand Down
2 changes: 1 addition & 1 deletion scripts/listener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const networkUrls = {
aave: 'wss://mainnet.infura.io/ws',
'aave-local': 'ws://127.0.0.1:9545',
'dydx-ropsten': 'wss://ropsten.infura.io/ws',
'dydx': 'wss://mainnet.infura.io/ws',
dydx: 'wss://mainnet.infura.io/ws',

erc20: 'wss://mainnet.infura.io/ws',
} as const;
Expand Down
24 changes: 2 additions & 22 deletions src/aave/subscribeFunc.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { providers } from 'ethers';
import Web3 from 'web3';
import sleep from 'sleep-promise';

import { createProvider } from '../eth';
import {
IDisconnectedRange,
CWEvent,
Expand Down Expand Up @@ -32,27 +31,8 @@ export async function createApi(
governanceAddress: string,
retryTimeMs = 10 * 1000
): Promise<Api> {
if (ethNetworkUrl.includes('infura')) {
const networkPrefix = ethNetworkUrl.split('infura')[0];
if (process && process.env) {
const { INFURA_API_KEY } = process.env;
if (!INFURA_API_KEY) {
throw new Error('no infura key found!');
}
ethNetworkUrl = `${networkPrefix}infura.io/ws/v3/${INFURA_API_KEY}`;
} else {
throw new Error('must use nodejs to connect to infura provider!');
}
}
try {
const web3Provider = new Web3.providers.WebsocketProvider(ethNetworkUrl, {
reconnect: {
auto: true,
delay: retryTimeMs,
onTimeout: true,
},
});
const provider = new providers.Web3Provider(web3Provider);
const provider = createProvider(ethNetworkUrl);

// fetch governance contract
const governanceContract = IAaveGovernanceV2Factory.connect(
Expand Down
24 changes: 2 additions & 22 deletions src/erc20/subscribeFunc.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { providers } from 'ethers';
import Web3 from 'web3';
import sleep from 'sleep-promise';

import { createProvider } from '../eth';
import { CWEvent, SubscribeFunc, ISubscribeOptions } from '../interfaces';
import { factory, formatFilename } from '../logging';
import { ERC20__factory as ERC20Factory } from '../contractTypes';
Expand All @@ -27,27 +26,8 @@ export async function createApi(
tokenAddresses: string[],
retryTimeMs = 10 * 1000
): Promise<Api> {
if (ethNetworkUrl.includes('infura')) {
const networkPrefix = ethNetworkUrl.split('infura')[0];
if (process && process.env) {
const { INFURA_API_KEY } = process.env;
if (!INFURA_API_KEY) {
throw new Error('no infura key found!');
}
ethNetworkUrl = `${networkPrefix}infura.io/ws/v3/${INFURA_API_KEY}`;
} else {
throw new Error('must use nodejs to connect to infura provider!');
}
}
try {
const web3Provider = new Web3.providers.WebsocketProvider(ethNetworkUrl, {
reconnect: {
auto: true,
delay: retryTimeMs,
onTimeout: true,
},
});
const provider = new providers.Web3Provider(web3Provider);
const provider = createProvider(ethNetworkUrl);

const tokenContracts = tokenAddresses.map((o) =>
ERC20Factory.connect(o, provider)
Expand Down
28 changes: 28 additions & 0 deletions src/eth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { providers } from 'ethers';
import Web3 from 'web3';

export function createProvider(ethNetworkUrl: string): providers.Web3Provider {
if (ethNetworkUrl.includes('infura')) {
const networkPrefix = ethNetworkUrl.split('infura')[0];
if (process && process.env) {
const { INFURA_API_KEY } = process.env;
if (!INFURA_API_KEY) {
throw new Error('no infura key found!');
}
ethNetworkUrl = `${networkPrefix}infura.io/ws/v3/${INFURA_API_KEY}`;
} else {
throw new Error('must use nodejs to connect to infura provider!');
}
}
const web3Provider = new Web3.providers.WebsocketProvider(ethNetworkUrl, {
reconnect: {
auto: true,
delay: 5000,
onTimeout: true,
},
});
const provider = new providers.Web3Provider(web3Provider);
// 12s minute polling interval (default is 4s)
provider.pollingInterval = 12000;
return provider;
}
24 changes: 2 additions & 22 deletions src/marlin/subscribeFunc.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { providers } from 'ethers';
import Web3 from 'web3';
import EthDater from 'ethereum-block-by-date';
import sleep from 'sleep-promise';

import { createProvider } from '../eth';
import {
IDisconnectedRange,
CWEvent,
Expand Down Expand Up @@ -33,27 +32,8 @@ export async function createApi(
governorAlphaAddress: string,
retryTimeMs = 10 * 1000
): Promise<Api> {
if (ethNetworkUrl.includes('infura')) {
const networkPrefix = ethNetworkUrl.split('infura')[0];
if (process && process.env) {
const { INFURA_API_KEY } = process.env;
if (!INFURA_API_KEY) {
throw new Error('no infura key found!');
}
ethNetworkUrl = `${networkPrefix}infura.io/ws/v3/${INFURA_API_KEY}`;
} else {
throw new Error('must use nodejs to connect to infura provider!');
}
}
try {
const web3Provider = new Web3.providers.WebsocketProvider(ethNetworkUrl, {
reconnect: {
auto: true,
delay: retryTimeMs,
onTimeout: true,
},
});
const provider = new providers.Web3Provider(web3Provider);
const provider = createProvider(ethNetworkUrl);

// init governance contract
const governorAlphaContract = GovernorAlphaFactory.connect(
Expand Down
24 changes: 2 additions & 22 deletions src/moloch/subscribeFunc.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { providers } from 'ethers';
import Web3 from 'web3';
import EthDater from 'ethereum-block-by-date';
import sleep from 'sleep-promise';

import { createProvider } from '../eth';
import {
Moloch1__factory as Moloch1Factory,
Moloch2__factory as Moloch2Factory,
Expand All @@ -28,27 +27,8 @@ export async function createApi(
contractAddress: string,
retryTimeMs = 10 * 1000
): Promise<Api> {
if (ethNetworkUrl.includes('infura')) {
const networkPrefix = ethNetworkUrl.split('infura')[0];
if (process && process.env) {
const { INFURA_API_KEY } = process.env;
if (!INFURA_API_KEY) {
throw new Error('no infura key found!');
}
ethNetworkUrl = `${networkPrefix}infura.io/ws/v3/${INFURA_API_KEY}`;
} else {
throw new Error('must use nodejs to connect to infura provider!');
}
}
try {
const web3Provider = new Web3.providers.WebsocketProvider(ethNetworkUrl, {
reconnect: {
auto: true,
delay: retryTimeMs,
onTimeout: true,
},
});
const provider = new providers.Web3Provider(web3Provider);
const provider = createProvider(ethNetworkUrl);
const contract =
contractVersion === 1
? Moloch1Factory.connect(contractAddress, provider)
Expand Down

0 comments on commit ea0c125

Please sign in to comment.