From 06eeb77804a83694c3ae5f1ae183474888a05438 Mon Sep 17 00:00:00 2001 From: dydxwill <119354122+dydxwill@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:32:51 -0400 Subject: [PATCH] Remove open interest handler (#2319) --- .../open-interest-update-handler.test.ts | 136 ------------------ .../handlers/open-interest-update-handler.ts | 65 --------- .../helpers/postgres/postgres-functions.ts | 1 - .../services/ender/src/lib/block-processor.ts | 2 - indexer/services/ender/src/lib/helper.ts | 10 -- indexer/services/ender/src/lib/types.ts | 8 -- .../dydx_block_processor_ordered_handlers.sql | 2 - .../dydx_open_interest_update_handler.sql | 35 ----- .../open-interest-update-validator.ts | 32 ----- 9 files changed, 291 deletions(-) delete mode 100644 indexer/services/ender/__tests__/handlers/open-interest-update-handler.test.ts delete mode 100644 indexer/services/ender/src/handlers/open-interest-update-handler.ts delete mode 100644 indexer/services/ender/src/scripts/handlers/dydx_open_interest_update_handler.sql delete mode 100644 indexer/services/ender/src/validators/open-interest-update-validator.ts diff --git a/indexer/services/ender/__tests__/handlers/open-interest-update-handler.test.ts b/indexer/services/ender/__tests__/handlers/open-interest-update-handler.test.ts deleted file mode 100644 index 2038fd4d41..0000000000 --- a/indexer/services/ender/__tests__/handlers/open-interest-update-handler.test.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { - IndexerTendermintBlock, - IndexerTendermintEvent, - OpenInterestUpdateEventV1, - Timestamp, -} from '@dydxprotocol-indexer/v4-protos'; -import { - dbHelpers, - PerpetualMarketFromDatabase, - perpetualMarketRefresher, - testMocks, -} from '@dydxprotocol-indexer/postgres'; -import { KafkaMessage } from 'kafkajs'; -import { createKafkaMessage, producer } from '@dydxprotocol-indexer/kafka'; -import { onMessage } from '../../src/lib/on-message'; -import { DydxIndexerSubtypes } from '../../src/lib/types'; -import { - createIndexerTendermintBlock, - createIndexerTendermintEvent, - expectMarketKafkaMessage, -} from '../helpers/indexer-proto-helpers'; -import { - defaultHeight, - defaultOpenInterestUpdateEvent, - defaultPreviousHeight, - defaultTime, - defaultTxHash, -} from '../helpers/constants'; -import { updateBlockCache } from '../../src/caches/block-cache'; -import _ from 'lodash'; -import { createPostgresFunctions } from '../../src/helpers/postgres/postgres-functions'; -import { - bytesToBigInt, -} from '@dydxprotocol-indexer/v4-proto-parser'; -import { quantumsToHumanFixedString } from '@dydxprotocol-indexer/postgres/build/src/lib/protocol-translations'; - -describe('openInterestUpdateHandler', () => { - beforeAll(async () => { - await dbHelpers.migrate(); - await createPostgresFunctions(); - }); - - beforeEach(async () => { - await testMocks.seedData(); - await perpetualMarketRefresher.updatePerpetualMarkets(); - updateBlockCache(defaultPreviousHeight); - }); - - afterEach(async () => { - await dbHelpers.clearData(); - jest.clearAllMocks(); - perpetualMarketRefresher.clear(); - }); - - afterAll(async () => { - await dbHelpers.teardown(); - jest.resetAllMocks(); - }); - - it('update open interest', async () => { - const transactionIndex: number = -1; - const openInterestUpdateEvent: OpenInterestUpdateEventV1 = defaultOpenInterestUpdateEvent; - const kafkaMessage: KafkaMessage = createKafkaEventForOpenInterestUpdateEvent({ - openInterestUpdateEvent, - transactionIndex, - height: defaultHeight, - time: defaultTime, - txHash: defaultTxHash, - }); - const producerSendMock: jest.SpyInstance = jest.spyOn(producer, 'send'); - await onMessage(kafkaMessage); - await perpetualMarketRefresher.updatePerpetualMarkets(); - - const perpetualMarketsFromDB: PerpetualMarketFromDatabase[] = []; - for (const openInterestUpdate - of defaultOpenInterestUpdateEvent.openInterestUpdates) { - const perpetualMarket: - PerpetualMarketFromDatabase = perpetualMarketRefresher.getPerpetualMarketFromId( - openInterestUpdate.perpetualId.toString())!; - expect(perpetualMarket.baseOpenInterest).toEqual( - quantumsToHumanFixedString(bytesToBigInt(openInterestUpdate.openInterest).toString(), - perpetualMarket.atomicResolution)); - perpetualMarketsFromDB.push(perpetualMarket); - } - expectMarketKafkaMessage({ - producerSendMock, - contents: - JSON.stringify({ - trading: - _.chain(perpetualMarketsFromDB) - .keyBy('ticker') - .mapValues((perpetualMarket) => { - return { - id: perpetualMarket.id, - baseOpenInterest: perpetualMarket.baseOpenInterest, - }; - }) - .value(), - }), - }); - }); -}); - -function createKafkaEventForOpenInterestUpdateEvent({ - openInterestUpdateEvent, - transactionIndex, - height, - time, - txHash, -}: { - openInterestUpdateEvent: OpenInterestUpdateEventV1, - transactionIndex: number, - height: number, - time: Timestamp, - txHash: string, -}) { - const events: IndexerTendermintEvent[] = []; - events.push( - createIndexerTendermintEvent( - DydxIndexerSubtypes.OPEN_INTEREST_UPDATE, - OpenInterestUpdateEventV1.encode(openInterestUpdateEvent).finish(), - transactionIndex, - 0, - ), - ); - - const block: IndexerTendermintBlock = createIndexerTendermintBlock( - height, - time, - events, - [txHash], - ); - - const binaryBlock: Uint8Array = IndexerTendermintBlock.encode(block).finish(); - return createKafkaMessage(Buffer.from(binaryBlock)); -} diff --git a/indexer/services/ender/src/handlers/open-interest-update-handler.ts b/indexer/services/ender/src/handlers/open-interest-update-handler.ts deleted file mode 100644 index fe39f0db3f..0000000000 --- a/indexer/services/ender/src/handlers/open-interest-update-handler.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { logger } from '@dydxprotocol-indexer/base'; -import { - PerpetualMarketFromDatabase, - PerpetualMarketModel, - PerpetualMarketColumns, - MarketMessageContents, - TradingMarketMessageContents, - TradingPerpetualMarketMessage, -} from '@dydxprotocol-indexer/postgres'; -import { OpenInterestUpdateEventV1 } from '@dydxprotocol-indexer/v4-protos'; -import _ from 'lodash'; -import * as pg from 'pg'; - -import { ConsolidatedKafkaEvent } from '../lib/types'; -import { Handler } from './handler'; - -export class OpenInterestUpdateHandler extends Handler { - eventType: string = 'OpenInterestUpdate'; - - public getParallelizationIds(): string[] { - return []; - } - - // eslint-disable-next-line @typescript-eslint/require-await - public async internalHandle(resultRow: pg.QueryResultRow): Promise { - const perpetualMarkets: PerpetualMarketFromDatabase[] = resultRow.open_interest_updates.map( - (openInterestUpdate: PerpetualMarketFromDatabase) => { - return PerpetualMarketModel.fromJson( - openInterestUpdate as object) as PerpetualMarketFromDatabase; - }, - ); - logger.info({ - at: 'OpenInterestUpdateHandler#handle', - message: 'Received OpenInterestUpdate', - }); - - if (perpetualMarkets.length === 0) { - return []; - } - - return [ - this.generateConsolidatedMarketKafkaEvent( - JSON.stringify(generateMarketMessage(perpetualMarkets)), - ), - ]; - } -} - -function generateMarketMessage( - perpetualMarkets: PerpetualMarketFromDatabase[], -): MarketMessageContents { - const tradingMarketMessageContents: TradingMarketMessageContents = _.chain(perpetualMarkets) - .keyBy(PerpetualMarketColumns.ticker) - .mapValues((perpetualMarket: PerpetualMarketFromDatabase): TradingPerpetualMarketMessage => { - return { - id: perpetualMarket.id, - baseOpenInterest: perpetualMarket.baseOpenInterest, - }; - }) - .value(); - - return { - trading: tradingMarketMessageContents, - }; -} diff --git a/indexer/services/ender/src/helpers/postgres/postgres-functions.ts b/indexer/services/ender/src/helpers/postgres/postgres-functions.ts index 1a52926f37..9a82c0eeff 100644 --- a/indexer/services/ender/src/helpers/postgres/postgres-functions.ts +++ b/indexer/services/ender/src/helpers/postgres/postgres-functions.ts @@ -36,7 +36,6 @@ const HANDLER_SCRIPTS: string[] = [ 'dydx_market_create_handler.sql', 'dydx_market_modify_handler.sql', 'dydx_market_price_update_handler.sql', - 'dydx_open_interest_update_handler.sql', 'dydx_perpetual_market_v1_handler.sql', 'dydx_perpetual_market_v2_handler.sql', 'dydx_register_affiliate_handler.sql', diff --git a/indexer/services/ender/src/lib/block-processor.ts b/indexer/services/ender/src/lib/block-processor.ts index 91efb5af7f..f3ab8ba1e3 100644 --- a/indexer/services/ender/src/lib/block-processor.ts +++ b/indexer/services/ender/src/lib/block-processor.ts @@ -20,7 +20,6 @@ import { DeleveragingValidator } from '../validators/deleveraging-validator'; import { FundingValidator } from '../validators/funding-validator'; import { LiquidityTierValidatorV2, LiquidityTierValidator } from '../validators/liquidity-tier-validator'; import { MarketValidator } from '../validators/market-validator'; -import { OpenInterestUpdateValidator } from '../validators/open-interest-update-validator'; import { OrderFillValidator } from '../validators/order-fill-validator'; import { PerpetualMarketValidator } from '../validators/perpetual-market-validator'; import { RegisterAffiliateValidator } from '../validators/register-affiliate-validator'; @@ -63,7 +62,6 @@ const BLOCK_EVENT_SUBTYPE_VERSION_TO_VALIDATOR_MAPPING: Record'openInterestUpdates') LOOP - perpetual_market_record."id" = (open_interest_update->'perpetualId')::bigint; - perpetual_market_record."openInterest" = dydx_from_serializable_int(open_interest_update->'openInterest'); - - UPDATE perpetual_markets - SET - "baseOpenInterest" = dydx_trim_scale(perpetual_market_record."openInterest"::numeric * power(10, "atomicResolution")::numeric) - WHERE - "id" = perpetual_market_record."id" - RETURNING * INTO perpetual_market_record; - - updates_array = array_append(updates_array, dydx_to_jsonb(perpetual_market_record)); - END LOOP; - - RETURN jsonb_build_object( - 'open_interest_updates', - updates_array - ); -END; -$$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/indexer/services/ender/src/validators/open-interest-update-validator.ts b/indexer/services/ender/src/validators/open-interest-update-validator.ts deleted file mode 100644 index 212da1ea6a..0000000000 --- a/indexer/services/ender/src/validators/open-interest-update-validator.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IndexerTendermintEvent, OpenInterestUpdateEventV1 } from '@dydxprotocol-indexer/v4-protos'; - -import { Handler } from '../handlers/handler'; -import { OpenInterestUpdateHandler } from '../handlers/open-interest-update-handler'; -import { Validator } from './validator'; - -export class OpenInterestUpdateValidator extends Validator { - public validate(): void { - if (this.event.openInterestUpdates === null) { - return this.logAndThrowParseMessageError( - 'OpenInterestUpdateEventV1 openInterestUpdates is not populated', - { event: this.event }, - ); - } - } - - public createHandlers( - indexerTendermintEvent: IndexerTendermintEvent, - txId: number, - _: string, - ): Handler[] { - const handler: Handler = new OpenInterestUpdateHandler( - this.block, - this.blockEventIndex, - indexerTendermintEvent, - txId, - this.event, - ); - - return [handler]; - } -}