From 6b16c9532f6ac2c59c2e54a7dfb28be1dc24d139 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 13:34:58 -0400 Subject: [PATCH] [CT-874] Add realizedPnl/unrealizedPnl to consolidated subaccount websocket msg sent from fills/liquidations/deleveraging Ender handlers (backport #1603) (#1609) Co-authored-by: dydxwill <119354122+dydxwill@users.noreply.github.com> --- .../helpers/indexer-proto-helpers.ts | 44 ++++++++++++++++--- .../order-fills/deleveraging-handler.ts | 31 ++++++++++++- .../order-fills/liquidation-handler.ts | 30 +++++++++++-- .../src/handlers/order-fills/order-handler.ts | 25 ++++++++++- 4 files changed, 116 insertions(+), 14 deletions(-) diff --git a/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts b/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts index a10a16afb0..bf0fac44f3 100644 --- a/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts +++ b/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts @@ -29,7 +29,13 @@ import { PerpetualMarketFromDatabase, PerpetualMarketTable, IsoString, - fillTypeToTradeType, OrderSubaccountMessageContents, + fillTypeToTradeType, + OrderSubaccountMessageContents, + MarketFromDatabase, + MarketTable, + MarketsMap, + MarketColumns, + UpdatedPerpetualPositionSubaccountKafkaObject, } from '@dydxprotocol-indexer/postgres'; import { getOrderIdHash, ORDER_FLAG_CONDITIONAL } from '@dydxprotocol-indexer/v4-proto-parser'; import { @@ -52,14 +58,13 @@ import { PerpetualMarketCreateEventV2, DeleveragingEventV1, protoTimestampToDate, -} from '@dydxprotocol-indexer/v4-protos'; -import { PerpetualMarketType, -} from '@dydxprotocol-indexer/v4-protos/build/codegen/dydxprotocol/indexer/protocol/v1/perpetual'; +} from '@dydxprotocol-indexer/v4-protos'; import { IHeaders, Message, ProducerRecord } from 'kafkajs'; import _ from 'lodash'; import { + annotateWithPnl, convertPerpetualPosition, generateFillSubaccountMessage, generatePerpetualMarketMessage, @@ -676,13 +681,27 @@ export async function expectFillSubaccountKafkaMessageFromLiquidationEvent( expect(fill).toBeDefined(); expect(position).toBeDefined(); + const markets: MarketFromDatabase[] = await MarketTable.findAll( + {}, + [], + ); + const marketIdToMarket: MarketsMap = _.keyBy( + markets, + MarketColumns.id, + ); + const positionUpdate = annotateWithPnl( + convertPerpetualPosition(position!), + perpetualMarketRefresher.getPerpetualMarketsMap(), + marketIdToMarket, + ); + const contents: SubaccountMessageContents = { fills: [ generateFillSubaccountMessage(fill!, ticker), ], perpetualPositions: generatePerpetualPositionsContents( subaccountIdProto, - [convertPerpetualPosition(position!)], + [positionUpdate], perpetualMarketRefresher.getPerpetualMarketsMap(), ), blockHeight, @@ -804,9 +823,22 @@ export async function expectOrderFillAndPositionSubaccountKafkaMessageFromIds( }; if (position !== undefined) { + const markets: MarketFromDatabase[] = await MarketTable.findAll( + {}, + [], + ); + const marketIdToMarket: MarketsMap = _.keyBy( + markets, + MarketColumns.id, + ); + const positionUpdate: UpdatedPerpetualPositionSubaccountKafkaObject = annotateWithPnl( + convertPerpetualPosition(position), + perpetualMarketRefresher.getPerpetualMarketsMap(), + marketIdToMarket, + ); contents.perpetualPositions = generatePerpetualPositionsContents( subaccountIdProto, - [convertPerpetualPosition(position)], + [positionUpdate], perpetualMarketRefresher.getPerpetualMarketsMap(), ); } diff --git a/indexer/services/ender/src/handlers/order-fills/deleveraging-handler.ts b/indexer/services/ender/src/handlers/order-fills/deleveraging-handler.ts index 712779a6a7..983aca7b46 100644 --- a/indexer/services/ender/src/handlers/order-fills/deleveraging-handler.ts +++ b/indexer/services/ender/src/handlers/order-fills/deleveraging-handler.ts @@ -2,17 +2,24 @@ import { logger } from '@dydxprotocol-indexer/base'; import { FillFromDatabase, FillModel, + MarketColumns, + MarketFromDatabase, + MarketsMap, + MarketTable, PerpetualMarketFromDatabase, PerpetualMarketModel, perpetualMarketRefresher, PerpetualPositionFromDatabase, PerpetualPositionModel, SubaccountTable, + UpdatedPerpetualPositionSubaccountKafkaObject, } from '@dydxprotocol-indexer/postgres'; import { DeleveragingEventV1 } from '@dydxprotocol-indexer/v4-protos'; +import _ from 'lodash'; import * as pg from 'pg'; import { SUBACCOUNT_ORDER_FILL_EVENT_TYPE } from '../../constants'; +import { annotateWithPnl, convertPerpetualPosition } from '../../helpers/kafka-helper'; import { ConsolidatedKafkaEvent } from '../../lib/types'; import { AbstractOrderFillHandler } from './abstract-order-fill-handler'; @@ -59,18 +66,38 @@ export class DeleveragingHandler extends AbstractOrderFillHandler