Skip to content

Commit 2e79918

Browse files
committed
feat: chunkedQueryFilter
1 parent 0cff2a1 commit 2e79918

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ const readConfig = async (): Promise<
5757
new Option('--multicall-size <n>', 'max number of calls in a multicall')
5858
.default(100)
5959
.argParser((x) => +x)
60+
)
61+
.addOption(
62+
new Option(
63+
'--query-logs-size <n>',
64+
'max block range to use for eth_queryLogs'
65+
)
66+
.default(50000)
67+
.argParser((x) => +x)
6068
);
6169
program.parse();
6270

@@ -69,6 +77,7 @@ const readConfig = async (): Promise<
6977
module: selectedModule,
7078
lookbackRange,
7179
multicallSize,
80+
queryLogsSize,
7281
} = options;
7382
const network = selectedNetwork || 'mainnet';
7483

@@ -124,6 +133,7 @@ const readConfig = async (): Promise<
124133
lookbackRange,
125134
targetSafe,
126135
multicallSize,
136+
queryLogsSize,
127137
},
128138
provider,
129139
];

ts/common.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export interface IConfig {
3434
appData: string;
3535
lookbackRange: number;
3636
multicallSize: number;
37+
queryLogsSize: number;
3738
}
3839

3940
const toChainId = (network: keyof typeof networkSpecificConfigs) => {
@@ -88,6 +89,26 @@ export const chunkedMulticall = async (
8889
return ret;
8990
};
9091

92+
export const chunkedQueryFilter = async (
93+
contract: ethers.Contract,
94+
filter: ethers.EventFilter,
95+
fromBlock: number,
96+
toBlock: number,
97+
chunkSize: number
98+
) => {
99+
const ret = [];
100+
for (let i = fromBlock; i <= toBlock; i += chunkSize) {
101+
ret.push(
102+
...(await contract.queryFilter(
103+
filter,
104+
i,
105+
Math.min(i + chunkSize - 1, toBlock)
106+
))
107+
);
108+
}
109+
return ret;
110+
};
111+
91112
const logger = pino();
92113
export const getLogger = (name: string) => {
93114
return logger.child({ name, level: process.env.LOG_LEVEL || 'info' });

ts/token-fetcher.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import axios from 'axios';
22
import {
33
IConfig,
44
chunkedMulticall,
5+
chunkedQueryFilter,
56
getLogger,
67
getMulticall3,
78
getOrderbookApi,
89
} from './common';
910
import { BigNumber, ethers } from 'ethers';
1011
import { erc20Abi, settlementAbi } from './abi';
1112

12-
const logger = getLogger('explorer-apis');
13+
const logger = getLogger('token-fetcher');
1314

1415
interface ITokenInfo {
1516
address: string;
@@ -60,10 +61,12 @@ export const getTokenInfosFromChain = async (
6061
const currentBlock = await provider.getBlockNumber();
6162
const fromBlock = currentBlock - config.lookbackRange;
6263
logger.info(`querying trades from ${fromBlock} to ${currentBlock}`);
63-
const logs = await settlement.queryFilter(
64+
const logs = await chunkedQueryFilter(
65+
settlement,
6466
tradeFilter,
6567
currentBlock - config.lookbackRange,
66-
currentBlock
68+
currentBlock,
69+
config.queryLogsSize
6770
);
6871
logger.info(`Found ${logs.length} trades`);
6972
const allTokens = Array.from(

0 commit comments

Comments
 (0)