From e1ecab61687fe7be301b5ba6766d2a306e75eeac Mon Sep 17 00:00:00 2001 From: Nabarun Date: Wed, 19 Mar 2025 19:48:38 +0530 Subject: [PATCH] Add filtering for event name in eventsInRange GQL query --- packages/codegen/src/schema.ts | 3 ++- .../src/templates/database-template.handlebars | 4 ++-- .../src/templates/indexer-template.handlebars | 4 ++-- .../src/templates/resolvers-template.handlebars | 6 +++--- packages/util/src/database.ts | 14 +++++++++----- packages/util/src/indexer.ts | 6 +++--- packages/util/src/types.ts | 2 +- 7 files changed, 22 insertions(+), 17 deletions(-) diff --git a/packages/codegen/src/schema.ts b/packages/codegen/src/schema.ts index f5800905..44022baa 100644 --- a/packages/codegen/src/schema.ts +++ b/packages/codegen/src/schema.ts @@ -579,7 +579,8 @@ export class Schema { type: this._composer.getOTC('ResultEvent').NonNull.List, args: { fromBlockNumber: 'Int!', - toBlockNumber: 'Int!' + toBlockNumber: 'Int!', + name: 'String' } } }); diff --git a/packages/codegen/src/templates/database-template.handlebars b/packages/codegen/src/templates/database-template.handlebars index 31dc706c..34611ace 100644 --- a/packages/codegen/src/templates/database-template.handlebars +++ b/packages/codegen/src/templates/database-template.handlebars @@ -193,10 +193,10 @@ export class Database implements DatabaseInterface { return this._baseDatabase.getProcessedBlockCountForRange(repo, fromBlockNumber, toBlockNumber); } - async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise> { + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, name?: string): Promise> { const repo = this._conn.getRepository(Event); - return this._baseDatabase.getEventsInRange(repo, fromBlockNumber, toBlockNumber); + return this._baseDatabase.getEventsInRange(repo, fromBlockNumber, toBlockNumber, name); } async saveEventEntity (queryRunner: QueryRunner, entity: Event): Promise { diff --git a/packages/codegen/src/templates/indexer-template.handlebars b/packages/codegen/src/templates/indexer-template.handlebars index b8d37d59..dadde5a2 100644 --- a/packages/codegen/src/templates/indexer-template.handlebars +++ b/packages/codegen/src/templates/indexer-template.handlebars @@ -659,8 +659,8 @@ export class Indexer implements IndexerInterface { return this._baseIndexer.getProcessedBlockCountForRange(fromBlockNumber, toBlockNumber); } - async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise> { - return this._baseIndexer.getEventsInRange(fromBlockNumber, toBlockNumber, this._serverConfig.gql.maxEventsBlockRange); + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, name?: string): Promise> { + return this._baseIndexer.getEventsInRange(fromBlockNumber, toBlockNumber, name, this._serverConfig.gql.maxEventsBlockRange); } async getSyncStatus (): Promise { diff --git a/packages/codegen/src/templates/resolvers-template.handlebars b/packages/codegen/src/templates/resolvers-template.handlebars index 40dd71ff..cc2c67f8 100644 --- a/packages/codegen/src/templates/resolvers-template.handlebars +++ b/packages/codegen/src/templates/resolvers-template.handlebars @@ -225,10 +225,10 @@ export const createResolvers = async ( eventsInRange: async ( _: any, - { fromBlockNumber, toBlockNumber }: { fromBlockNumber: number, toBlockNumber: number }, + { fromBlockNumber, toBlockNumber, name }: { fromBlockNumber: number, toBlockNumber: number, name?: string }, expressContext: ExpressContext ) => { - log('eventsInRange', fromBlockNumber, toBlockNumber); + log('eventsInRange', fromBlockNumber, toBlockNumber, name); return executeAndRecordMetrics( indexer, @@ -246,7 +246,7 @@ export const createResolvers = async ( throw new Error(`Block range should be between ${syncStatus.initialIndexedBlockNumber} and ${syncStatus.latestProcessedBlockNumber}`); } - const events = await indexer.getEventsInRange(fromBlockNumber, toBlockNumber); + const events = await indexer.getEventsInRange(fromBlockNumber, toBlockNumber, name); return events.map(event => indexer.getResultEvent(event)); } ); diff --git a/packages/util/src/database.ts b/packages/util/src/database.ts index 753a5a3a..3bf28afc 100644 --- a/packages/util/src/database.ts +++ b/packages/util/src/database.ts @@ -509,18 +509,22 @@ export class Database { return { expected, actual: parseInt(actual) }; } - async getEventsInRange (repo: Repository, fromBlockNumber: number, toBlockNumber: number): Promise> { - const events = repo.createQueryBuilder('event') + async getEventsInRange (repo: Repository, fromBlockNumber: number, toBlockNumber: number, name?: string): Promise> { + const queryBuilder = repo.createQueryBuilder('event') .innerJoinAndSelect('event.block', 'block') .where('block_number >= :fromBlockNumber AND block_number <= :toBlockNumber AND event_name <> :eventName AND is_pruned = false', { fromBlockNumber, toBlockNumber, eventName: UNKNOWN_EVENT_NAME - }) + }); + + if (name) { + queryBuilder.andWhere('event.event_name = :name', { name }); + } + + return queryBuilder .addOrderBy('event.id', 'ASC') .getMany(); - - return events; } async saveEventEntity (repo: Repository, entity: EventInterface): Promise { diff --git a/packages/util/src/indexer.ts b/packages/util/src/indexer.ts index 6fe500ea..92a22d78 100644 --- a/packages/util/src/indexer.ts +++ b/packages/util/src/indexer.ts @@ -789,7 +789,7 @@ export class Indexer { return this._db.getProcessedBlockCountForRange(fromBlockNumber, toBlockNumber); } - async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, maxBlockRange: number = DEFAULT_MAX_EVENTS_BLOCK_RANGE): Promise> { + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number, maxBlockRange: number = DEFAULT_MAX_EVENTS_BLOCK_RANGE, name?: string): Promise> { if (toBlockNumber <= fromBlockNumber) { throw new Error('toBlockNumber should be greater than fromBlockNumber'); } @@ -798,7 +798,7 @@ export class Indexer { throw new Error(`Max range (${maxBlockRange}) exceeded`); } - return this._db.getEventsInRange(fromBlockNumber, toBlockNumber); + return this._db.getEventsInRange(fromBlockNumber, toBlockNumber, name); } isWatchedContract (address : string): ContractInterface | undefined { @@ -1359,7 +1359,7 @@ export class Indexer { } } - async clearProcessedBlockData (block: BlockProgressInterface, entities: EntityTarget<{ blockNumber: number }>[]): Promise { + async clearProcessedBlockData (block: BlockProgressInterface, entities: EntityTarget<{ blockNumber: number, blockHash: string }>[]): Promise { const dbTx = await this._db.createTransactionRunner(); try { diff --git a/packages/util/src/types.ts b/packages/util/src/types.ts index c01d2f63..6f2ef0ff 100644 --- a/packages/util/src/types.ts +++ b/packages/util/src/types.ts @@ -254,7 +254,7 @@ export interface DatabaseInterface { getSyncStatus (queryRunner: QueryRunner): Promise getAncestorAtHeight (blockHash: string, height: number): Promise getProcessedBlockCountForRange (fromBlockNumber: number, toBlockNumber: number): Promise<{ expected: number, actual: number }>; - getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise>; + getEventsInRange (fromBlockNumber: number, toBlockNumber: number, name?: string): Promise>; markBlocksAsPruned (queryRunner: QueryRunner, blocks: BlockProgressInterface[]): Promise; saveBlockProgress (queryRunner: QueryRunner, block: DeepPartial): Promise; updateBlockProgress (queryRunner: QueryRunner, block: BlockProgressInterface, lastProcessedEventIndex: number): Promise