Skip to content

Commit

Permalink
Merge pull request #220 from lidofinance/develop
Browse files Browse the repository at this point in the history
Merge develop to main
  • Loading branch information
jake4take authored Apr 19, 2024
2 parents f11d603 + 907fabd commit 92ae248
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 19 deletions.
58 changes: 39 additions & 19 deletions src/events/rewards/rewards.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import { ConfigService } from '../../common/config';
import { ContractConfigStorageService, RewardsStorageService } from '../../storage';
import { PrometheusService } from '../../common/prometheus';

import { getLogsByRetryCount } from './rewards.utils';

@Injectable()
export class RewardsService {
constructor(
Expand Down Expand Up @@ -146,19 +148,24 @@ export class RewardsService {
postCLBalance: BigNumber;
}> {
const res = this.contractLido.filters.ETHDistributed();
const logs = await this.provider.getLogs({
topics: res.topics,
toBlock: 'latest',
fromBlock,
address: res.address,
});
const logs = await getLogsByRetryCount(
this.provider,
{
topics: res.topics,
toBlock: 'latest',
fromBlock,
address: res.address,
},
this.logger,
'ETHDistributed',
);

this.logger.log('ETHDistributed event logs', { service: 'rewards', logsCount: logs.length });

const lastLog = logs[logs.length - 1];

if (!lastLog) {
this.logger.warn('ETHDistributed event is not found for CL balance.');
this.logger.warn('ETHDistributed event is not found for CL balance.', { service: 'rewards', fromBlock });

// if balances is not found leave them empty and so diff CL (which is CL rewards) will be 0
return {
Expand All @@ -184,12 +191,17 @@ export class RewardsService {

protected async getWithdrawalsReceived(fromBlock: number): Promise<BigNumber> {
const res = this.contractLido.filters.WithdrawalsReceived();
const logs = await this.provider.getLogs({
topics: res.topics,
toBlock: 'latest',
fromBlock,
address: res.address,
});
const logs = await getLogsByRetryCount(
this.provider,
{
topics: res.topics,
toBlock: 'latest',
fromBlock,
address: res.address,
},
this.logger,
'WithdrawalsReceived',
);

this.logger.log('WithdrawalsReceived event logs', { service: 'rewards', logsCount: logs.length });

Expand Down Expand Up @@ -218,16 +230,24 @@ export class RewardsService {
const last48HoursAgoBlock = await this.get48HoursAgoBlock();

const res = this.contractLido.filters.TokenRebased();
const logs = await this.provider.getLogs({
topics: res.topics,
toBlock: 'latest',
fromBlock: last48HoursAgoBlock,
address: res.address,
});

const logs = await getLogsByRetryCount(
this.provider,
{
topics: res.topics,
toBlock: 'latest',
fromBlock: last48HoursAgoBlock,
address: res.address,
},
this.logger,
'TokenRebased',
);

this.logger.log('TokenRebase event logs for last 48 hours', { service: 'rewards', logsCount: logs.length });

if (logs.length === 0) {
this.logger.warn('TokenRebase events are not found for last 48 hours.', { service: 'rewards' });

return null;
}

Expand Down
26 changes: 26 additions & 0 deletions src/events/rewards/rewards.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { SimpleFallbackJsonRpcBatchProvider } from '@lido-nestjs/execution';
import { Log, Filter } from '@ethersproject/abstract-provider';
import { LoggerService } from '@lido-nestjs/logger';

const DEFAULT_RETRY_COUNT = 5;

// Retry needs for the case when the logs are not available in the RPC response, but they are expected to be there.
export const getLogsByRetryCount = async (
provider: SimpleFallbackJsonRpcBatchProvider,
filter: Filter,
logger: LoggerService,
eventName: string,
retryCount = DEFAULT_RETRY_COUNT,
): Promise<Log[]> => {
let logs = await provider.getLogs(filter);

while (logs.length === 0 && retryCount > 0) {
logger.warn(`${eventName}: No logs found. Retrying in 200 ms...`, { service: 'rewards' });

await new Promise((resolve) => setTimeout(resolve, 200));
logs = await provider.getLogs(filter);
retryCount -= 1;
}

return logs;
};

0 comments on commit 92ae248

Please sign in to comment.