From f92e9baedf18f8b02b970de2eb4b6a9100eda32c Mon Sep 17 00:00:00 2001 From: amateima <89395931+amateima@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:20:50 +0200 Subject: [PATCH 1/4] fix: profile events storage relatively to insertion timestamp (#144) --- .../service/SpokePoolIndexerDataHandler.ts | 49 +++++++++++++++++++ .../src/database/SpokePoolRepository.ts | 16 ------ 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/packages/indexer/src/data-indexing/service/SpokePoolIndexerDataHandler.ts b/packages/indexer/src/data-indexing/service/SpokePoolIndexerDataHandler.ts index f40ffddb..d5681936 100644 --- a/packages/indexer/src/data-indexing/service/SpokePoolIndexerDataHandler.ts +++ b/packages/indexer/src/data-indexing/service/SpokePoolIndexerDataHandler.ts @@ -114,7 +114,56 @@ export class SpokePoolIndexerDataHandler implements IndexerDataHandler { ); await this.updateNewDepositsWithIntegratorId(newInsertedDeposits); await this.spokePoolProcessor.process(storedEvents); + this.profileStoreEvents(storedEvents); } + + /** + * Log the time that it took to store the events from the moment they were emitted onchain + * @param events + */ + private profileStoreEvents(events: StoreEventsResult) { + const insertedDeposits = indexerDatabaseUtils.filterSaveQueryResults( + events.deposits, + SaveQueryResultType.Inserted, + ); + + // Log the time difference for each deposit event for profiling in datadog + insertedDeposits.forEach((event) => { + if (event.blockTimestamp === undefined) return; + const timeDifference = + event.createdAt.getTime() - event.blockTimestamp.getTime(); + this.logger.debug({ + at: "SpokePoolIndexerDataHandler#profileStoreEvents", + message: "V3FundsDeposited event profile", + depositId: event.depositId, + originChainId: event.originChainId, + timeDifference, + createdAt: event.createdAt, + blockTimestamp: event.blockTimestamp, + }); + }); + + const insertedFills = indexerDatabaseUtils.filterSaveQueryResults( + events.fills, + SaveQueryResultType.Inserted, + ); + insertedFills.forEach((event) => { + if (event.blockTimestamp === undefined) return; + const timeDifference = + event.createdAt.getTime() - event.blockTimestamp.getTime(); + this.logger.debug({ + at: "SpokePoolIndexerDataHandler#profileStoreEvents", + message: "FilledV3Relay event profile", + depositId: event.depositId, + originChainId: event.originChainId, + destinationChainId: event.destinationChainId, + timeDifference, + createdAt: event.createdAt, + blockTimestamp: event.blockTimestamp, + }); + }); + } + private async getBlockTime(blockNumber: number): Promise { const block = await this.provider.getBlock(blockNumber); if (!block) { diff --git a/packages/indexer/src/database/SpokePoolRepository.ts b/packages/indexer/src/database/SpokePoolRepository.ts index dd123412..0158c71d 100644 --- a/packages/indexer/src/database/SpokePoolRepository.ts +++ b/packages/indexer/src/database/SpokePoolRepository.ts @@ -68,22 +68,6 @@ export class SpokePoolRepository extends dbUtils.BlockchainEventRepository { ), ); const result = savedEvents.flat(); - - // Log the time difference for each deposit event for profiling in datadog - const now = new Date(); - formattedEvents.forEach((event) => { - if (event.blockTimestamp === undefined) return; - const timeDifference = now.getTime() - event.blockTimestamp.getTime(); - this.logger.debug({ - at: "SpokePoolRepository#formatAndSaveV3FundsDepositedEvents", - message: "V3FundsDepositedEvent profile", - depositId: event.depositId, - chainId: event.originChainId, - timeDifference, - now, - blockTimestamp: event.blockTimestamp, - }); - }); return result; } From a8df10c15e5f0e28d26bf6078ecf45e0ff4c516c Mon Sep 17 00:00:00 2001 From: amateima <89395931+amateima@users.noreply.github.com> Date: Wed, 8 Jan 2025 12:36:48 +0200 Subject: [PATCH 2/4] fix: revert redstone max block lookback (#145) --- packages/indexer/src/web3/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/indexer/src/web3/constants.ts b/packages/indexer/src/web3/constants.ts index feb42838..e3af3742 100644 --- a/packages/indexer/src/web3/constants.ts +++ b/packages/indexer/src/web3/constants.ts @@ -83,7 +83,7 @@ const MAX_BLOCK_LOOK_BACK = { [CHAIN_IDs.BOBA]: 4990, [CHAIN_IDs.INK]: 10000, [CHAIN_IDs.ZK_SYNC]: 10000, - [CHAIN_IDs.REDSTONE]: 500, // TODO: Update when Quicknode is enable as a provider + [CHAIN_IDs.REDSTONE]: 10000, [CHAIN_IDs.LISK]: 10000, [CHAIN_IDs.BASE]: 10000, [CHAIN_IDs.MODE]: 10000, From 5f92176ac1a8eabbec439ff52dc927cce12e6fe5 Mon Sep 17 00:00:00 2001 From: amateima <89395931+amateima@users.noreply.github.com> Date: Sun, 12 Jan 2025 23:21:36 +0200 Subject: [PATCH 3/4] fix: fix building executed bundles (#146) --- .../services/BundleIncludedEventsService.ts | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/indexer/src/services/BundleIncludedEventsService.ts b/packages/indexer/src/services/BundleIncludedEventsService.ts index 849254ec..95041057 100644 --- a/packages/indexer/src/services/BundleIncludedEventsService.ts +++ b/packages/indexer/src/services/BundleIncludedEventsService.ts @@ -1,7 +1,10 @@ import * as across from "@across-protocol/sdk"; +import { getDeployedBlockNumber } from "@across-protocol/contracts"; import Redis from "ioredis"; import winston from "winston"; + import { DataSource, entities } from "@repo/indexer-database"; + import { BaseIndexer } from "../generics"; import { BundleRepository } from "../database/BundleRepository"; import * as utils from "../utils"; @@ -191,12 +194,37 @@ export class BundleIncludedEventsService extends BaseIndexer { const blockTime = getBlockTime(chainId); const endBlockTimeBuffer = 60 * 15; const blockBuffer = Math.round(endBlockTimeBuffer / blockTime); + const endBlockWithBuffer = endBlock + blockBuffer; + const deployedBlockNumber = getDeployedBlockNumber( + "SpokePool", + chainId, + ); + this.logger.debug({ + at: "Indexer#BundleIncludedEventsService#getSpokeClientsForLookbackBlockRange", + message: `Instantiate SpokePool client for chain ${chainId}`, + deployedBlockNumber, + startBlock, + endBlockWithBuffer, + }); + // A chain can be included in the bundle even if the SpokePool is not deployed yet + // In this case, the SpokePool client will not be instantiated and updated + if (deployedBlockNumber > endBlock) { + this.logger.debug({ + at: "Indexer#BundleIncludedEventsService#getSpokeClientsForLookbackBlockRange", + message: `SpokePool client not instantiated as it is not deployed yet for chain ${chainId}`, + deployedBlockNumber, + startBlock, + endBlockWithBuffer, + }); + return acc; + } + return { ...acc, [chainId]: spokePoolClientFactory.get( chainId, startBlock, - endBlock + blockBuffer, + endBlockWithBuffer, { hubPoolClient: this.hubPoolClient, }, From 92a63999a25163f045a3131a74018e21c239978e Mon Sep 17 00:00:00 2001 From: amateima <89395931+amateima@users.noreply.github.com> Date: Mon, 13 Jan 2025 22:45:06 +0200 Subject: [PATCH 4/4] fix: rename deposit status unfilled value (#147) --- packages/indexer-api/src/services/deposits.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/indexer-api/src/services/deposits.ts b/packages/indexer-api/src/services/deposits.ts index d36de052..0ce5ed78 100644 --- a/packages/indexer-api/src/services/deposits.ts +++ b/packages/indexer-api/src/services/deposits.ts @@ -156,7 +156,10 @@ export class DepositsService { } const result = { - status: relay.status, + status: + relay.status === entities.RelayStatus.Unfilled + ? "pending" + : relay.status, originChainId: relay.originChainId, depositId: relay.depositId, depositTxHash: relay.depositTxHash,