Skip to content

Commit cac4374

Browse files
committed
fix: set block range to 1k max for event fetching
1 parent 8f8e132 commit cac4374

File tree

1 file changed

+66
-28
lines changed

1 file changed

+66
-28
lines changed

src/services/UnderlyingYieldService.ts

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { AaveV2Ethereum, MiscEthereum } from '@bgd-labs/aave-address-book';
22
import { Provider } from '@ethersproject/providers';
3-
import { Contract } from 'ethers';
3+
import { Contract, EventFilter } from 'ethers';
44
import { formatUnits } from 'ethers/lib/utils';
5+
import { FORK_ENABLED } from 'src/utils/marketsAndNetworksConfig';
56

67
import {
78
cbEthOracle,
@@ -125,11 +126,12 @@ export class UnderlyingYieldService {
125126

126127
const blocksInDay = DAY_IN_SECONDS / 12;
127128

128-
const events = await connectedContract.queryFilter(
129-
connectedContract.filters.TokenRebased(),
130-
currentBlockNumber - blocksInDay * EVENTS_PERIOD_DAYS,
131-
currentBlockNumber
132-
);
129+
const events = await this.fetchEventsInBatches({
130+
connectedContract,
131+
eventFilter: connectedContract.filters.TokenRebased(),
132+
fromBlock: currentBlockNumber - blocksInDay * EVENTS_PERIOD_DAYS,
133+
toBlock: currentBlockNumber,
134+
});
133135

134136
const latestEvent = events.length === 0 ? null : events[events.length - 1];
135137

@@ -198,11 +200,12 @@ export class UnderlyingYieldService {
198200

199201
const contract = new Contract(rocketNetworkBalances, abi);
200202
const connectedContract = contract.connect(provider);
201-
const events = await connectedContract.queryFilter(
202-
connectedContract.filters.BalancesUpdated(),
203-
currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
204-
currentBlockNumber
205-
);
203+
const events = await this.fetchEventsInBatches({
204+
connectedContract,
205+
eventFilter: connectedContract.filters.BalancesUpdated(),
206+
fromBlock: currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
207+
toBlock: currentBlockNumber,
208+
});
206209

207210
const rates = events
208211
.map((event) => {
@@ -246,12 +249,12 @@ export class UnderlyingYieldService {
246249

247250
const contract = new Contract(staderLabsOracle, abi); // Stader Labs Oracle
248251
const connectedContract = contract.connect(provider);
249-
250-
const events = await connectedContract.queryFilter(
251-
connectedContract.filters.ExchangeRateUpdated(),
252-
currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
253-
currentBlockNumber
254-
);
252+
const events = await this.fetchEventsInBatches({
253+
connectedContract,
254+
eventFilter: connectedContract.filters.ExchangeRateUpdated(),
255+
fromBlock: currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
256+
toBlock: currentBlockNumber,
257+
});
255258

256259
const rates = events
257260
.map((event) => {
@@ -285,12 +288,12 @@ export class UnderlyingYieldService {
285288

286289
const contract = new Contract(cbEthOracle, abi); // cbETH Oracle
287290
const connectedContract = contract.connect(provider);
288-
289-
const events = await connectedContract.queryFilter(
290-
connectedContract.filters.ExchangeRateUpdated(),
291-
currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
292-
currentBlockNumber
293-
);
291+
const events = await this.fetchEventsInBatches({
292+
connectedContract,
293+
eventFilter: connectedContract.filters.ExchangeRateUpdated(),
294+
fromBlock: currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
295+
toBlock: currentBlockNumber,
296+
});
294297

295298
if (events && events.length > 2) {
296299
const lastestEventArgs = events[events.length - 1].args;
@@ -346,11 +349,12 @@ export class UnderlyingYieldService {
346349
];
347350
const contract = new Contract(etherfiLiquidityPool, abi); // Etherfi LiquidityPool
348351
const connectedContract = contract.connect(provider);
349-
const events = await connectedContract.queryFilter(
350-
connectedContract.filters.Rebase(),
351-
currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
352-
currentBlockNumber
353-
);
352+
const events = await this.fetchEventsInBatches({
353+
connectedContract,
354+
eventFilter: connectedContract.filters.Rebase(),
355+
fromBlock: currentBlockNumber - BLOCKS_A_DAY * EVENTS_PERIOD_DAYS,
356+
toBlock: currentBlockNumber,
357+
});
354358

355359
if (events && events.length > 2) {
356360
const lastestEventArgs = events[events.length - 1].args;
@@ -381,4 +385,38 @@ export class UnderlyingYieldService {
381385
return await getApyFromApi();
382386
}
383387
};
388+
389+
fetchEventsInBatches = async (parameters: {
390+
connectedContract: Contract;
391+
eventFilter: EventFilter;
392+
fromBlock: number;
393+
toBlock: number;
394+
blockRange?: number;
395+
}) => {
396+
const { connectedContract, eventFilter, fromBlock, toBlock } = parameters;
397+
398+
let blockRange;
399+
400+
if (parameters.blockRange) {
401+
blockRange = parameters.blockRange;
402+
} else if (FORK_ENABLED) {
403+
blockRange = 1000;
404+
} else {
405+
blockRange = 100000;
406+
}
407+
408+
let startBlock = fromBlock;
409+
410+
const allEvents = [];
411+
412+
while (startBlock <= toBlock) {
413+
const nextBlock = startBlock + blockRange - 1;
414+
const endBlock = nextBlock < toBlock ? nextBlock : toBlock;
415+
const events = await connectedContract.queryFilter(eventFilter, startBlock, endBlock);
416+
allEvents.push(...events);
417+
startBlock = endBlock + 1;
418+
}
419+
420+
return allEvents;
421+
};
384422
}

0 commit comments

Comments
 (0)