From a3708c958d4a3ca4861d1405450e238760272bdc Mon Sep 17 00:00:00 2001 From: dydxwill <119354122+dydxwill@users.noreply.github.com> Date: Mon, 18 Sep 2023 15:00:51 -0400 Subject: [PATCH] [IND-394] add version to Indexer events (#289) --- .gitignore | 1 + .../indexer/indexer_manager/event.ts | 18 ++- .../helpers/indexer-proto-helpers.ts | 4 + .../ender/__tests__/lib/helper.test.ts | 1 + .../ender/__tests__/lib/on-message.test.ts | 45 +++++++ .../services/ender/src/lib/block-processor.ts | 61 ++++++---- indexer/services/ender/src/lib/helper.ts | 17 ++- indexer/services/ender/src/lib/types.ts | 18 ++- .../indexer/indexer_manager/event.proto | 3 + protocol/indexer/events/constants.go | 15 +++ protocol/indexer/indexer_manager/event.pb.go | 111 ++++++++++++------ .../indexer/indexer_manager/event_manager.go | 16 ++- .../indexer_manager/event_manager_test.go | 22 ++++ protocol/indexer/indexer_manager/events.go | 4 + protocol/mocks/IndexerEventManager.go | 12 +- protocol/testutil/keeper/clob.go | 1 + protocol/x/assets/keeper/asset.go | 1 + protocol/x/clob/abci.go | 1 + protocol/x/clob/abci_test.go | 5 + protocol/x/clob/e2e/short_term_orders_test.go | 9 ++ protocol/x/clob/genesis_test.go | 1 + protocol/x/clob/keeper/clob_pair.go | 2 + protocol/x/clob/keeper/clob_pair_test.go | 11 +- .../x/clob/keeper/get_price_premium_test.go | 1 + protocol/x/clob/keeper/liquidations_test.go | 8 ++ .../x/clob/keeper/msg_server_cancel_orders.go | 1 + .../keeper/msg_server_cancel_orders_test.go | 9 +- .../msg_server_create_clob_pair_test.go | 3 + .../x/clob/keeper/msg_server_place_order.go | 2 + .../keeper/msg_server_place_order_test.go | 4 + .../msg_server_update_clob_pair_test.go | 1 + protocol/x/clob/keeper/orders_test.go | 5 + protocol/x/clob/keeper/process_operations.go | 3 + .../x/clob/keeper/process_operations_test.go | 5 + .../keeper/untriggered_conditional_orders.go | 1 + protocol/x/clob/module_test.go | 1 + protocol/x/perpetuals/keeper/perpetual.go | 4 + protocol/x/prices/genesis.go | 1 + protocol/x/prices/keeper/market.go | 1 + protocol/x/prices/keeper/market_param.go | 1 + protocol/x/prices/keeper/market_price.go | 1 + protocol/x/sending/app_test.go | 4 + protocol/x/sending/keeper/transfer.go | 3 + protocol/x/subaccounts/genesis.go | 1 + protocol/x/subaccounts/keeper/subaccount.go | 1 + 45 files changed, 360 insertions(+), 80 deletions(-) diff --git a/.gitignore b/.gitignore index 53931a96d9..a88d2ec1a4 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ v4-proto-js/node_modules v4-proto-js/src .idea +**/.DS_Store diff --git a/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/indexer_manager/event.ts b/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/indexer_manager/event.ts index 7b95c26842..67e65e6d2f 100644 --- a/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/indexer_manager/event.ts +++ b/indexer/packages/v4-protos/src/codegen/dydxprotocol/indexer/indexer_manager/event.ts @@ -133,6 +133,9 @@ export interface IndexerTendermintEvent { */ eventIndex: number; + /** Version of the event. */ + + version: number; } /** * IndexerTendermintEvent contains the base64 encoded event proto emitted from @@ -158,6 +161,9 @@ export interface IndexerTendermintEventSDKType { */ event_index: number; + /** Version of the event. */ + + version: number; } /** * IndexerTendermintBlock contains all the events for the block along with @@ -292,7 +298,8 @@ function createBaseIndexerTendermintEvent(): IndexerTendermintEvent { data: "", transactionIndex: undefined, blockEvent: undefined, - eventIndex: 0 + eventIndex: 0, + version: 0 }; } @@ -318,6 +325,10 @@ export const IndexerTendermintEvent = { writer.uint32(40).uint32(message.eventIndex); } + if (message.version !== 0) { + writer.uint32(48).uint32(message.version); + } + return writer; }, @@ -350,6 +361,10 @@ export const IndexerTendermintEvent = { message.eventIndex = reader.uint32(); break; + case 6: + message.version = reader.uint32(); + break; + default: reader.skipType(tag & 7); break; @@ -366,6 +381,7 @@ export const IndexerTendermintEvent = { message.transactionIndex = object.transactionIndex ?? undefined; message.blockEvent = object.blockEvent ?? undefined; message.eventIndex = object.eventIndex ?? 0; + message.version = object.version ?? 0; return message; } diff --git a/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts b/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts index 2cc33c0d67..8824e9e19e 100644 --- a/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts +++ b/indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts @@ -74,6 +74,7 @@ const defaultPerpetualMarketTicker: string = testConstants.defaultPerpetualMarke * @param data * @param transactionIndex * @param eventIndex + * @param version * @returns */ export function createIndexerTendermintEvent( @@ -81,6 +82,7 @@ export function createIndexerTendermintEvent( data: string, transactionIndex: number, eventIndex: number, + version: number = 1, ): IndexerTendermintEvent { if (transactionIndex < 0) { // blockEvent @@ -89,6 +91,7 @@ export function createIndexerTendermintEvent( data, blockEvent: IndexerTendermintEvent_BlockEvent.BLOCK_EVENT_END_BLOCK, eventIndex, + version, }; } // transactionIndex @@ -97,6 +100,7 @@ export function createIndexerTendermintEvent( data, transactionIndex, eventIndex, + version, }; } diff --git a/indexer/services/ender/__tests__/lib/helper.test.ts b/indexer/services/ender/__tests__/lib/helper.test.ts index 8ccdfde0e9..092b7108bb 100644 --- a/indexer/services/ender/__tests__/lib/helper.test.ts +++ b/indexer/services/ender/__tests__/lib/helper.test.ts @@ -48,6 +48,7 @@ describe('helper', () => { subtype: 'order_fill', data: 'data', eventIndex: 0, + version: 1, }; if (throwError) { expect(() => indexerTendermintEventToTransactionIndex(event)) diff --git a/indexer/services/ender/__tests__/lib/on-message.test.ts b/indexer/services/ender/__tests__/lib/on-message.test.ts index 990bb6ddfe..67df8d4512 100644 --- a/indexer/services/ender/__tests__/lib/on-message.test.ts +++ b/indexer/services/ender/__tests__/lib/on-message.test.ts @@ -208,6 +208,51 @@ describe('on-message', () => { expect.any(Number), 1, { success: 'true' }); }); + it('successfully processes block with transaction event with unset version', async () => { + const transactionIndex: number = 0; + const eventIndex: number = 0; + const events: IndexerTendermintEvent[] = [ + createIndexerTendermintEvent( + DydxIndexerSubtypes.SUBACCOUNT_UPDATE, + defaultSubaccountUpdateEventData, + transactionIndex, + eventIndex, + 0, + ), + ]; + + const block: IndexerTendermintBlock = createIndexerTendermintBlock( + defaultHeight, + defaultTime, + events, + [defaultTxHash], + ); + const binaryBlock: Uint8Array = Uint8Array.from(IndexerTendermintBlock.encode(block).finish()); + const kafkaMessage: KafkaMessage = createKafkaMessage(Buffer.from(binaryBlock)); + + await onMessage(kafkaMessage); + await Promise.all([ + expectTendermintEvent(defaultHeight.toString(), transactionIndex, eventIndex), + expectTransactionWithHash([defaultTxHash]), + expectBlock(defaultHeight.toString(), defaultDateTime.toISO()), + ]); + + expect((SubaccountUpdateHandler as jest.Mock)).toHaveBeenCalledTimes(1); + expect((SubaccountUpdateHandler as jest.Mock)).toHaveBeenNthCalledWith( + 1, + block, + events[0], + expect.any(Number), + defaultSubaccountUpdateEvent, + ); + expect(stats.increment).toHaveBeenCalledWith('ender.received_kafka_message', 1); + expect(stats.timing).toHaveBeenCalledWith( + 'ender.message_time_in_queue', expect.any(Number), 1, { topic: KafkaTopics.TO_ENDER }); + expect(stats.gauge).toHaveBeenCalledWith('ender.processing_block_height', expect.any(Number)); + expect(stats.timing).toHaveBeenCalledWith('ender.processed_block.timing', + expect.any(Number), 1, { success: 'true' }); + }); + it('successfully processes block with transfer event', async () => { const transactionIndex: number = 0; const eventIndex: number = 0; diff --git a/indexer/services/ender/src/lib/block-processor.ts b/indexer/services/ender/src/lib/block-processor.ts index 07bc3dbb3a..d35b26c72a 100644 --- a/indexer/services/ender/src/lib/block-processor.ts +++ b/indexer/services/ender/src/lib/block-processor.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ import { logger } from '@dydxprotocol-indexer/base'; import { IndexerTendermintBlock, IndexerTendermintEvent } from '@dydxprotocol-indexer/v4-protos'; import _ from 'lodash'; @@ -20,26 +21,33 @@ import { indexerTendermintEventToEventProtoWithType, indexerTendermintEventToTra import { KafkaPublisher } from './kafka-publisher'; import { SyncHandlers, SYNCHRONOUS_SUBTYPES } from './sync-handlers'; import { - DydxIndexerSubtypes, EventMessage, EventProtoWithType, GroupedEvents, + DydxIndexerSubtypes, EventMessage, EventProtoWithTypeAndVersion, GroupedEvents, } from './types'; -const TXN_EVENT_SUBTYPE_TO_VALIDATOR_MAPPING: Record = { - [DydxIndexerSubtypes.ORDER_FILL.toString()]: OrderFillValidator, - [DydxIndexerSubtypes.SUBACCOUNT_UPDATE.toString()]: SubaccountUpdateValidator, - [DydxIndexerSubtypes.TRANSFER.toString()]: TransferValidator, - [DydxIndexerSubtypes.MARKET.toString()]: MarketValidator, - [DydxIndexerSubtypes.STATEFUL_ORDER.toString()]: StatefulOrderValidator, - [DydxIndexerSubtypes.ASSET.toString()]: AssetValidator, - [DydxIndexerSubtypes.PERPETUAL_MARKET.toString()]: PerpetualMarketValidator, - [DydxIndexerSubtypes.LIQUIDITY_TIER.toString()]: LiquidityTierValidator, - [DydxIndexerSubtypes.UPDATE_PERPETUAL.toString()]: UpdatePerpetualValidator, - [DydxIndexerSubtypes.UPDATE_CLOB_PAIR.toString()]: UpdateClobPairValidator, +const TXN_EVENT_SUBTYPE_VERSION_TO_VALIDATOR_MAPPING: Record = { + [serializeSubtypeAndVersion(DydxIndexerSubtypes.ORDER_FILL.toString(), 1)]: OrderFillValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.SUBACCOUNT_UPDATE.toString(), 1)]: SubaccountUpdateValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.TRANSFER.toString(), 1)]: TransferValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.MARKET.toString(), 1)]: MarketValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.STATEFUL_ORDER.toString(), 1)]: StatefulOrderValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.ASSET.toString(), 1)]: AssetValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.PERPETUAL_MARKET.toString(), 1)]: PerpetualMarketValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.LIQUIDITY_TIER.toString(), 1)]: LiquidityTierValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.UPDATE_PERPETUAL.toString(), 1)]: UpdatePerpetualValidator, + [serializeSubtypeAndVersion(DydxIndexerSubtypes.UPDATE_CLOB_PAIR.toString(), 1)]: UpdateClobPairValidator, }; -const BLOCK_EVENT_SUBTYPE_TO_VALIDATOR_MAPPING: Record = { - [DydxIndexerSubtypes.FUNDING.toString()]: FundingValidator, +const BLOCK_EVENT_SUBTYPE_VERSION_TO_VALIDATOR_MAPPING: Record = { + [serializeSubtypeAndVersion(DydxIndexerSubtypes.FUNDING.toString(), 1)]: FundingValidator, }; +function serializeSubtypeAndVersion( + subtype: string, + version: number, +): string { + return `${subtype}-${version}`; +} + export class BlockProcessor { block: IndexerTendermintBlock; txId: number; @@ -94,7 +102,7 @@ export class BlockProcessor { _.forEach(this.block.events, (event: IndexerTendermintEvent) => { const transactionIndex: number = indexerTendermintEventToTransactionIndex(event); const eventProtoWithType: - EventProtoWithType | undefined = indexerTendermintEventToEventProtoWithType( + EventProtoWithTypeAndVersion | undefined = indexerTendermintEventToEventProtoWithType( event, ); if (eventProtoWithType === undefined) { @@ -122,50 +130,53 @@ export class BlockProcessor { for (const eventProtoWithType of eventsInTransaction) { this.validateAndAddHandlerForEvent( eventProtoWithType, - TXN_EVENT_SUBTYPE_TO_VALIDATOR_MAPPING, + TXN_EVENT_SUBTYPE_VERSION_TO_VALIDATOR_MAPPING, ); } } for (const eventProtoWithType of groupedEvents.blockEvents) { this.validateAndAddHandlerForEvent( eventProtoWithType, - BLOCK_EVENT_SUBTYPE_TO_VALIDATOR_MAPPING, + BLOCK_EVENT_SUBTYPE_VERSION_TO_VALIDATOR_MAPPING, ); } } private validateAndAddHandlerForEvent( - eventProtoWithType: EventProtoWithType, + eventProto: EventProtoWithTypeAndVersion, validatorMap: Record, ): void { const Initializer: ValidatorInitializer | undefined = validatorMap[ - eventProtoWithType.type + serializeSubtypeAndVersion( + eventProto.type, + eventProto.version, + ) ]; if (Initializer === undefined) { - const message: string = `cannot process subtype ${eventProtoWithType.type}`; + const message: string = `cannot process subtype ${eventProto.type} and version ${eventProto.version}`; logger.error({ at: 'onMessage#saveTendermintEventData', message, - eventProtoWithType, + eventProto, }); return; } const validator: Validator = new Initializer( - eventProtoWithType.eventProto, + eventProto.eventProto, this.block, ); validator.validate(); const handlers: Handler[] = validator.createHandlers( - eventProtoWithType.indexerTendermintEvent, + eventProto.indexerTendermintEvent, this.txId, ); _.map(handlers, (handler: Handler) => { - if (SYNCHRONOUS_SUBTYPES.includes(eventProtoWithType.type as DydxIndexerSubtypes)) { - this.syncHandlers.addHandler(eventProtoWithType.type, handler); + if (SYNCHRONOUS_SUBTYPES.includes(eventProto.type as DydxIndexerSubtypes)) { + this.syncHandlers.addHandler(eventProto.type, handler); } else { this.batchedHandlers.addHandler(handler); } diff --git a/indexer/services/ender/src/lib/helper.ts b/indexer/services/ender/src/lib/helper.ts index 40860afe5d..eda9d3f8b6 100644 --- a/indexer/services/ender/src/lib/helper.ts +++ b/indexer/services/ender/src/lib/helper.ts @@ -32,7 +32,7 @@ import { import { base64StringToBinary } from '../helpers/encoding-helper'; import { DydxIndexerSubtypes, - EventProtoWithType, + EventProtoWithTypeAndVersion, } from './types'; export function indexerTendermintEventToTransactionIndex( @@ -79,14 +79,17 @@ export function dateToDateTime( */ export function indexerTendermintEventToEventProtoWithType( event: IndexerTendermintEvent, -): EventProtoWithType | undefined { +): EventProtoWithTypeAndVersion | undefined { const eventDataBinary: Uint8Array = base64StringToBinary(event.data); + // set the default version to 1 + const version: number = event.version === 0 ? 1 : event.version; switch (event.subtype) { case (DydxIndexerSubtypes.ORDER_FILL.toString()): { return { type: DydxIndexerSubtypes.ORDER_FILL, eventProto: OrderFillEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.SUBACCOUNT_UPDATE.toString()): { @@ -94,6 +97,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.SUBACCOUNT_UPDATE, eventProto: SubaccountUpdateEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.TRANSFER.toString()): { @@ -101,6 +105,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.TRANSFER, eventProto: TransferEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.MARKET.toString()): { @@ -108,6 +113,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.MARKET, eventProto: MarketEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.STATEFUL_ORDER.toString()): { @@ -115,6 +121,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.STATEFUL_ORDER, eventProto: StatefulOrderEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.FUNDING.toString()): { @@ -122,6 +129,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.FUNDING, eventProto: FundingEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.ASSET.toString()): { @@ -129,6 +137,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.ASSET, eventProto: AssetCreateEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.PERPETUAL_MARKET.toString()): { @@ -136,6 +145,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.PERPETUAL_MARKET, eventProto: PerpetualMarketCreateEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.LIQUIDITY_TIER.toString()): { @@ -143,6 +153,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.LIQUIDITY_TIER, eventProto: LiquidityTierUpsertEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.UPDATE_PERPETUAL.toString()): { @@ -150,6 +161,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.UPDATE_PERPETUAL, eventProto: UpdatePerpetualEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } case (DydxIndexerSubtypes.UPDATE_CLOB_PAIR.toString()): { @@ -157,6 +169,7 @@ export function indexerTendermintEventToEventProtoWithType( type: DydxIndexerSubtypes.UPDATE_CLOB_PAIR, eventProto: UpdateClobPairEventV1.decode(eventDataBinary), indexerTendermintEvent: event, + version, }; } default: { diff --git a/indexer/services/ender/src/lib/types.ts b/indexer/services/ender/src/lib/types.ts index 5ccb0b25e7..dc104c85d8 100644 --- a/indexer/services/ender/src/lib/types.ts +++ b/indexer/services/ender/src/lib/types.ts @@ -61,60 +61,72 @@ export enum DydxIndexerSubtypes { // eslint-disable-next-line @typescript-eslint/no-explicit-any export type EventMessage = any; -export type EventProtoWithType = { +export type EventProtoWithTypeAndVersion = { type: string, eventProto: EventMessage, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } & ({ type: DydxIndexerSubtypes.ORDER_FILL, eventProto: OrderFillEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.SUBACCOUNT_UPDATE, eventProto: SubaccountUpdateEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.TRANSFER, eventProto: TransferEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.MARKET, eventProto: MarketEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.STATEFUL_ORDER, eventProto: StatefulOrderEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.FUNDING, eventProto: FundingEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.ASSET, eventProto: AssetCreateEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.PERPETUAL_MARKET, eventProto: PerpetualMarketCreateEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.LIQUIDITY_TIER, eventProto: LiquidityTierUpsertEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.UPDATE_PERPETUAL, eventProto: UpdatePerpetualEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, } | { type: DydxIndexerSubtypes.UPDATE_CLOB_PAIR, eventProto: UpdateClobPairEventV1, indexerTendermintEvent: IndexerTendermintEvent, + version: number, }); // Events grouped into events block events and events for each transactionIndex export interface GroupedEvents { - transactionEvents: EventProtoWithType[][], - blockEvents: EventProtoWithType[], + transactionEvents: EventProtoWithTypeAndVersion[][], + blockEvents: EventProtoWithTypeAndVersion[], } export type MarketPriceUpdateEventMessage = { diff --git a/proto/dydxprotocol/indexer/indexer_manager/event.proto b/proto/dydxprotocol/indexer/indexer_manager/event.proto index 3223d424b9..a9db92e643 100644 --- a/proto/dydxprotocol/indexer/indexer_manager/event.proto +++ b/proto/dydxprotocol/indexer/indexer_manager/event.proto @@ -50,6 +50,9 @@ message IndexerTendermintEvent { // transaction or during processing of a block. // TODO(DEC-537): Deprecate this field because events are already ordered. uint32 event_index = 5; + + // Version of the event. + uint32 version = 6; } // IndexerTendermintBlock contains all the events for the block along with diff --git a/protocol/indexer/events/constants.go b/protocol/indexer/events/constants.go index bacf3c7855..dcf1273039 100644 --- a/protocol/indexer/events/constants.go +++ b/protocol/indexer/events/constants.go @@ -18,6 +18,21 @@ const ( SubtypeUpdateClobPair = "update_clob_pair" ) +const ( + // Indexer event versions. + OrderFillEventVersion uint32 = 1 + SubaccountUpdateEventVersion uint32 = 1 + TransferEventVersion uint32 = 1 + MarketEventVersion uint32 = 1 + FundingValuesEventVersion uint32 = 1 + StatefulOrderEventVersion uint32 = 1 + AssetEventVersion uint32 = 1 + PerpetualMarketEventVersion uint32 = 1 + LiquidityTierEventVersion uint32 = 1 + UpdatePerpetualEventVersion uint32 = 1 + UpdateClobPairEventVersion uint32 = 1 +) + var OnChainEventSubtypes = []string{ SubtypeOrderFill, SubtypeSubaccountUpdate, diff --git a/protocol/indexer/indexer_manager/event.pb.go b/protocol/indexer/indexer_manager/event.pb.go index c90a4eef1c..05c462020e 100644 --- a/protocol/indexer/indexer_manager/event.pb.go +++ b/protocol/indexer/indexer_manager/event.pb.go @@ -183,6 +183,8 @@ type IndexerTendermintEvent struct { // transaction or during processing of a block. // TODO(DEC-537): Deprecate this field because events are already ordered. EventIndex uint32 `protobuf:"varint,5,opt,name=event_index,json=eventIndex,proto3" json:"event_index,omitempty"` + // Version of the event. + Version uint32 `protobuf:"varint,6,opt,name=version,proto3" json:"version,omitempty"` } func (m *IndexerTendermintEvent) Reset() { *m = IndexerTendermintEvent{} } @@ -276,6 +278,13 @@ func (m *IndexerTendermintEvent) GetEventIndex() uint32 { return 0 } +func (m *IndexerTendermintEvent) GetVersion() uint32 { + if m != nil { + return m.Version + } + return 0 +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*IndexerTendermintEvent) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -369,43 +378,44 @@ func init() { } var fileDescriptor_18a6a94c31da6b1f = []byte{ - // 565 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, - 0x14, 0xf5, 0x34, 0xe9, 0x4f, 0x26, 0xea, 0xa7, 0x7e, 0x23, 0xda, 0xba, 0xad, 0x70, 0xac, 0x88, - 0x85, 0x37, 0xb5, 0x51, 0x60, 0xc1, 0x82, 0x0d, 0x4e, 0x4d, 0x13, 0x81, 0x02, 0x72, 0x43, 0x91, - 0xe8, 0xc2, 0x1a, 0xc7, 0x83, 0x6d, 0x48, 0x66, 0x22, 0x7b, 0x12, 0xdc, 0x97, 0x40, 0x7d, 0xac, - 0x2e, 0xbb, 0x64, 0xc3, 0x8f, 0x92, 0xf7, 0x40, 0x28, 0xd7, 0x4e, 0x09, 0x55, 0x24, 0x90, 0xb2, - 0xf2, 0xbd, 0x73, 0xef, 0x39, 0x73, 0x66, 0x7c, 0xee, 0xe0, 0x87, 0xc1, 0x65, 0x90, 0x0d, 0x13, - 0x21, 0x45, 0x4f, 0xf4, 0xad, 0x98, 0x07, 0x2c, 0x63, 0xc9, 0xfc, 0xeb, 0x0d, 0x28, 0xa7, 0x21, - 0x4b, 0x2c, 0x36, 0x66, 0x5c, 0x9a, 0xd0, 0x46, 0x1e, 0x2c, 0x22, 0xcc, 0xa2, 0xd3, 0xbc, 0x83, - 0x38, 0xac, 0x85, 0x42, 0x84, 0x7d, 0x66, 0x41, 0xa3, 0x3f, 0x7a, 0x6f, 0xc9, 0x78, 0xc0, 0x52, - 0x49, 0x07, 0xc3, 0x9c, 0xe6, 0xf0, 0x5e, 0x28, 0x42, 0x01, 0xa1, 0x35, 0x8b, 0xf2, 0xd5, 0xfa, - 0x67, 0x84, 0xef, 0xb7, 0x73, 0xaa, 0x2e, 0xe3, 0x01, 0x4b, 0x06, 0x31, 0x97, 0xce, 0x6c, 0xf7, - 0xb7, 0x09, 0x1d, 0x0e, 0x59, 0x42, 0x5c, 0xbc, 0x0e, 0x6a, 0x54, 0xa4, 0x23, 0xa3, 0xda, 0x78, - 0x6a, 0xfe, 0x8b, 0x1c, 0x73, 0x39, 0xa7, 0x9b, 0x53, 0x91, 0x03, 0xbc, 0x25, 0x33, 0xee, 0x45, - 0x34, 0x8d, 0xd4, 0x35, 0x1d, 0x19, 0x15, 0x77, 0x53, 0x66, 0xbc, 0x45, 0xd3, 0xa8, 0x3e, 0xc6, - 0xfb, 0x05, 0x16, 0x10, 0xe9, 0x99, 0x14, 0x09, 0x3b, 0xa7, 0xfd, 0x11, 0x23, 0x17, 0x78, 0x03, - 0xe0, 0xa9, 0x8a, 0xf4, 0x92, 0x51, 0x6d, 0x34, 0x57, 0x91, 0x52, 0x1c, 0xcf, 0x2d, 0x28, 0xeb, - 0x3f, 0xd7, 0xf0, 0xde, 0xf2, 0x4e, 0xa2, 0xe2, 0xcd, 0x74, 0xe4, 0xcb, 0xcb, 0x21, 0x83, 0x3b, - 0xa8, 0xb8, 0xf3, 0x94, 0x10, 0x5c, 0x0e, 0xa8, 0xa4, 0xc5, 0x19, 0x20, 0x26, 0xc7, 0xf8, 0x7f, - 0x99, 0x50, 0x9e, 0xd2, 0x9e, 0x8c, 0x05, 0xf7, 0x40, 0x8d, 0x5a, 0xd2, 0x91, 0xb1, 0xdd, 0x52, - 0xdc, 0x9d, 0x85, 0x12, 0xec, 0x46, 0x3e, 0xe0, 0xaa, 0xdf, 0x17, 0xbd, 0x8f, 0x5e, 0x7e, 0xc9, - 0x65, 0x1d, 0x19, 0xff, 0x35, 0x4e, 0x57, 0x39, 0x99, 0x69, 0xcf, 0xf8, 0x20, 0x6c, 0x29, 0x2e, - 0xf6, 0x6f, 0x33, 0x52, 0xc3, 0x55, 0xd8, 0xa5, 0x10, 0xb5, 0x3e, 0x13, 0xe5, 0x62, 0x58, 0x02, - 0xaa, 0x3a, 0xc5, 0xf8, 0x37, 0x98, 0x1c, 0xe1, 0x7d, 0xfb, 0xe5, 0xab, 0xe6, 0x0b, 0xcf, 0x39, - 0x77, 0x3a, 0x5d, 0xef, 0x4d, 0xe7, 0xec, 0xb5, 0xd3, 0x6c, 0x3f, 0x6f, 0x3b, 0x27, 0x3b, 0xca, - 0xdd, 0xa2, 0xed, 0x9c, 0xb6, 0x3b, 0x1e, 0xac, 0xec, 0x20, 0x72, 0x80, 0x77, 0x17, 0x8b, 0x4e, - 0xe7, 0xa4, 0x28, 0xad, 0xd9, 0xfb, 0x78, 0x57, 0x24, 0x01, 0x4b, 0x62, 0x1e, 0x7a, 0x9f, 0x62, - 0x19, 0xc5, 0xdc, 0x03, 0x85, 0xf5, 0xaf, 0x68, 0xc9, 0x0f, 0x00, 0x35, 0x64, 0x0f, 0x6f, 0x44, - 0x2c, 0x0e, 0xa3, 0xdc, 0x83, 0xdb, 0x6e, 0x91, 0x91, 0x27, 0xb8, 0x3c, 0x73, 0x39, 0x5c, 0x7f, - 0xb5, 0x71, 0x68, 0xe6, 0x23, 0x60, 0xce, 0x47, 0xc0, 0xec, 0xce, 0x47, 0xc0, 0xde, 0xba, 0xfe, - 0x56, 0x53, 0xae, 0xbe, 0xd7, 0x90, 0x0b, 0x08, 0xd2, 0xbd, 0xb5, 0x52, 0x09, 0xac, 0xb4, 0x9a, - 0xab, 0x0b, 0x2e, 0x72, 0x84, 0x2b, 0x32, 0x03, 0x57, 0xb3, 0x54, 0x2d, 0xeb, 0x25, 0xa3, 0xe2, - 0x6e, 0xc9, 0xac, 0x05, 0xb9, 0x7d, 0x71, 0x3d, 0xd1, 0xd0, 0xcd, 0x44, 0x43, 0x3f, 0x26, 0x1a, - 0xba, 0x9a, 0x6a, 0xca, 0xcd, 0x54, 0x53, 0xbe, 0x4c, 0x35, 0xe5, 0xdd, 0xb3, 0x30, 0x96, 0xd1, - 0xc8, 0x37, 0x7b, 0x62, 0x60, 0xfd, 0xf1, 0x3a, 0x8c, 0x1f, 0x1f, 0xf7, 0x22, 0x1a, 0x73, 0xeb, - 0x6f, 0xef, 0x85, 0xbf, 0x01, 0x1d, 0x8f, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x37, 0xf4, 0xa0, - 0xba, 0x5e, 0x04, 0x00, 0x00, + // 578 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4f, 0x6f, 0xd3, 0x4e, + 0x10, 0xf5, 0x36, 0x69, 0xda, 0x6c, 0xd4, 0x9f, 0xfa, 0x5b, 0xd1, 0xd6, 0x6d, 0x85, 0x63, 0x45, + 0x1c, 0x7c, 0xa9, 0x8d, 0x02, 0x07, 0x0e, 0x5c, 0x70, 0x6b, 0x9a, 0x08, 0x14, 0x90, 0x1b, 0x8a, + 0x44, 0x0f, 0xd6, 0x3a, 0x5e, 0x6c, 0x43, 0xb2, 0x1b, 0xd9, 0x9b, 0xe0, 0x7e, 0x09, 0xd4, 0x23, + 0x1f, 0xa9, 0xc7, 0x1e, 0xb9, 0xf0, 0x47, 0xc9, 0x17, 0x41, 0x19, 0x3b, 0x25, 0x54, 0x91, 0x40, + 0xca, 0xc9, 0x33, 0x3b, 0xf3, 0xde, 0xbe, 0xf5, 0xbe, 0x59, 0xfc, 0x30, 0xb8, 0x0c, 0xb2, 0x61, + 0x22, 0xa4, 0xe8, 0x89, 0xbe, 0x15, 0xf3, 0x80, 0x65, 0x2c, 0x99, 0x7f, 0xbd, 0x01, 0xe5, 0x34, + 0x64, 0x89, 0xc5, 0xc6, 0x8c, 0x4b, 0x13, 0xda, 0xc8, 0x83, 0x45, 0x84, 0x59, 0x74, 0x9a, 0x77, + 0x10, 0x07, 0xf5, 0x50, 0x88, 0xb0, 0xcf, 0x2c, 0x68, 0xf4, 0x47, 0xef, 0x2d, 0x19, 0x0f, 0x58, + 0x2a, 0xe9, 0x60, 0x98, 0xd3, 0x1c, 0xdc, 0x0b, 0x45, 0x28, 0x20, 0xb4, 0x66, 0x51, 0xbe, 0xda, + 0xf8, 0x8c, 0xf0, 0xfd, 0x76, 0x4e, 0xd5, 0x65, 0x3c, 0x60, 0xc9, 0x20, 0xe6, 0xd2, 0x99, 0xed, + 0xfe, 0x36, 0xa1, 0xc3, 0x21, 0x4b, 0x88, 0x8b, 0xd7, 0x41, 0x8d, 0x8a, 0x74, 0x64, 0xd4, 0x9a, + 0x4f, 0xcd, 0x7f, 0x91, 0x63, 0x2e, 0xe7, 0x74, 0x73, 0x2a, 0xb2, 0x8f, 0x37, 0x65, 0xc6, 0xbd, + 0x88, 0xa6, 0x91, 0xba, 0xa6, 0x23, 0xa3, 0xea, 0x6e, 0xc8, 0x8c, 0xb7, 0x68, 0x1a, 0x35, 0xc6, + 0x78, 0xaf, 0xc0, 0x02, 0x22, 0x3d, 0x93, 0x22, 0x61, 0xe7, 0xb4, 0x3f, 0x62, 0xe4, 0x02, 0x57, + 0x00, 0x9e, 0xaa, 0x48, 0x2f, 0x19, 0xb5, 0xe6, 0xf1, 0x2a, 0x52, 0x8a, 0xe3, 0xb9, 0x05, 0x65, + 0xe3, 0x4b, 0x09, 0xef, 0x2e, 0xef, 0x24, 0x2a, 0xde, 0x48, 0x47, 0xbe, 0xbc, 0x1c, 0x32, 0xf8, + 0x07, 0x55, 0x77, 0x9e, 0x12, 0x82, 0xcb, 0x01, 0x95, 0xb4, 0x38, 0x03, 0xc4, 0xe4, 0x08, 0xff, + 0x2f, 0x13, 0xca, 0x53, 0xda, 0x93, 0xb1, 0xe0, 0x1e, 0xa8, 0x51, 0x4b, 0x3a, 0x32, 0xb6, 0x5a, + 0x8a, 0xbb, 0xbd, 0x50, 0x82, 0xdd, 0xc8, 0x07, 0x5c, 0xf3, 0xfb, 0xa2, 0xf7, 0xd1, 0xcb, 0x7f, + 0x72, 0x59, 0x47, 0xc6, 0x7f, 0xcd, 0xd3, 0x55, 0x4e, 0x66, 0xda, 0x33, 0x3e, 0x08, 0x5b, 0x8a, + 0x8b, 0xfd, 0xdb, 0x8c, 0xd4, 0x71, 0x0d, 0x76, 0x29, 0x44, 0xad, 0xcf, 0x44, 0xb9, 0x18, 0x96, + 0x72, 0x31, 0x2a, 0xde, 0x18, 0xb3, 0x24, 0x8d, 0x05, 0x57, 0x2b, 0x50, 0x9c, 0xa7, 0x0d, 0x8a, + 0xf1, 0x6f, 0x5a, 0x72, 0x88, 0xf7, 0xec, 0x97, 0xaf, 0x8e, 0x5f, 0x78, 0xce, 0xb9, 0xd3, 0xe9, + 0x7a, 0x6f, 0x3a, 0x67, 0xaf, 0x9d, 0xe3, 0xf6, 0xf3, 0xb6, 0x73, 0xb2, 0xad, 0xdc, 0x2d, 0xda, + 0xce, 0x69, 0xbb, 0xe3, 0xc1, 0xca, 0x36, 0x22, 0xfb, 0x78, 0x67, 0xb1, 0xe8, 0x74, 0x4e, 0x8a, + 0xd2, 0x9a, 0xbd, 0x87, 0x77, 0x44, 0x12, 0xb0, 0x24, 0xe6, 0xa1, 0xf7, 0x29, 0x96, 0x51, 0xcc, + 0x3d, 0xd0, 0xde, 0xf8, 0x86, 0x96, 0x5c, 0x0d, 0xa8, 0x21, 0xbb, 0xb8, 0x12, 0xb1, 0x38, 0x8c, + 0x72, 0x77, 0x6e, 0xb9, 0x45, 0x46, 0x9e, 0xe0, 0xf2, 0xcc, 0xff, 0x70, 0x31, 0xb5, 0xe6, 0x81, + 0x99, 0x0f, 0x87, 0x39, 0x1f, 0x0e, 0xb3, 0x3b, 0x1f, 0x0e, 0x7b, 0xf3, 0xfa, 0x7b, 0x5d, 0xb9, + 0xfa, 0x51, 0x47, 0x2e, 0x20, 0x48, 0xf7, 0xd6, 0x64, 0x25, 0x30, 0xd9, 0x6a, 0x7e, 0x2f, 0xb8, + 0xc8, 0x21, 0xae, 0xca, 0x0c, 0xfc, 0xce, 0x52, 0xb5, 0xac, 0x97, 0x8c, 0xaa, 0xbb, 0x29, 0xb3, + 0x16, 0xe4, 0xf6, 0xc5, 0xf5, 0x44, 0x43, 0x37, 0x13, 0x0d, 0xfd, 0x9c, 0x68, 0xe8, 0x6a, 0xaa, + 0x29, 0x37, 0x53, 0x4d, 0xf9, 0x3a, 0xd5, 0x94, 0x77, 0xcf, 0xc2, 0x58, 0x46, 0x23, 0xdf, 0xec, + 0x89, 0x81, 0xf5, 0xc7, 0xbb, 0x31, 0x7e, 0x7c, 0xd4, 0x8b, 0x68, 0xcc, 0xad, 0xbf, 0xbd, 0x24, + 0x7e, 0x05, 0x3a, 0x1e, 0xfd, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x09, 0x89, 0x0b, 0x78, 0x04, + 0x00, 0x00, } func (m *IndexerTendermintEventWrapper) Marshal() (dAtA []byte, err error) { @@ -507,6 +517,11 @@ func (m *IndexerTendermintEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.Version != 0 { + i = encodeVarintEvent(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x30 + } if m.EventIndex != 0 { i = encodeVarintEvent(dAtA, i, uint64(m.EventIndex)) i-- @@ -684,6 +699,9 @@ func (m *IndexerTendermintEvent) Size() (n int) { if m.EventIndex != 0 { n += 1 + sovEvent(uint64(m.EventIndex)) } + if m.Version != 0 { + n += 1 + sovEvent(uint64(m.Version)) + } return n } @@ -1091,6 +1109,25 @@ func (m *IndexerTendermintEvent) Unmarshal(dAtA []byte) error { break } } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipEvent(dAtA[iNdEx:]) diff --git a/protocol/indexer/indexer_manager/event_manager.go b/protocol/indexer/indexer_manager/event_manager.go index ec95131ca5..4f7a9aff61 100644 --- a/protocol/indexer/indexer_manager/event_manager.go +++ b/protocol/indexer/indexer_manager/event_manager.go @@ -8,11 +8,17 @@ import ( type IndexerEventManager interface { Enabled() bool - AddTxnEvent(ctx sdk.Context, subType string, data string) + AddTxnEvent(ctx sdk.Context, subType string, data string, version uint32) SendOffchainData(message msgsender.Message) SendOnchainData(block *IndexerTendermintBlock) ProduceBlock(ctx sdk.Context) *IndexerTendermintBlock - AddBlockEvent(ctx sdk.Context, subType string, data string, blockEvent IndexerTendermintEvent_BlockEvent) + AddBlockEvent( + ctx sdk.Context, + subType string, + data string, + blockEvent IndexerTendermintEvent_BlockEvent, + version uint32, + ) ClearEvents(ctx sdk.Context) } @@ -63,9 +69,10 @@ func (i *indexerEventManagerImpl) AddTxnEvent( ctx sdk.Context, subType string, data string, + version uint32, ) { if i.indexerMessageSender.Enabled() { - addTxnEvent(ctx, subType, data, i.indexerEventsTransientStoreKey) + addTxnEvent(ctx, subType, data, version, i.indexerEventsTransientStoreKey) } } @@ -84,9 +91,10 @@ func (i *indexerEventManagerImpl) AddBlockEvent( subType string, data string, blockEvent IndexerTendermintEvent_BlockEvent, + version uint32, ) { if i.indexerMessageSender.Enabled() { - addBlockEvent(ctx, subType, data, i.indexerEventsTransientStoreKey, blockEvent) + addBlockEvent(ctx, subType, data, i.indexerEventsTransientStoreKey, blockEvent, version) } } diff --git a/protocol/indexer/indexer_manager/event_manager_test.go b/protocol/indexer/indexer_manager/event_manager_test.go index c22bf8e31d..44a5e3cd7f 100644 --- a/protocol/indexer/indexer_manager/event_manager_test.go +++ b/protocol/indexer/indexer_manager/event_manager_test.go @@ -24,6 +24,7 @@ var ExpectedEvent0 = indexer_manager.IndexerTendermintEvent{ TransactionIndex: 0, }, EventIndex: 0, + Version: indexerevents.OrderFillEventVersion, } var ExpectedEvent1 = indexer_manager.IndexerTendermintEvent{ @@ -35,6 +36,7 @@ var ExpectedEvent1 = indexer_manager.IndexerTendermintEvent{ TransactionIndex: 0, }, EventIndex: 1, + Version: indexerevents.SubaccountUpdateEventVersion, } var ExpectedEvent2 = indexer_manager.IndexerTendermintEvent{ @@ -46,6 +48,7 @@ var ExpectedEvent2 = indexer_manager.IndexerTendermintEvent{ TransactionIndex: 1, }, EventIndex: 0, + Version: indexerevents.TransferEventVersion, } var ExpectedEvent3 = indexer_manager.IndexerTendermintEvent{ @@ -57,6 +60,7 @@ var ExpectedEvent3 = indexer_manager.IndexerTendermintEvent{ BlockEvent: indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, }, EventIndex: 0, + Version: indexerevents.FundingValuesEventVersion, } var ExpectedEvent4 = indexer_manager.IndexerTendermintEvent{ @@ -68,6 +72,7 @@ var ExpectedEvent4 = indexer_manager.IndexerTendermintEvent{ BlockEvent: indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, }, EventIndex: 1, + Version: indexerevents.FundingValuesEventVersion, } var ExpectedEvent5 = indexer_manager.IndexerTendermintEvent{ @@ -79,6 +84,7 @@ var ExpectedEvent5 = indexer_manager.IndexerTendermintEvent{ BlockEvent: indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_BEGIN_BLOCK, }, EventIndex: 0, + Version: indexerevents.FundingValuesEventVersion, } var ExpectedEvent6 = indexer_manager.IndexerTendermintEvent{ @@ -90,8 +96,11 @@ var ExpectedEvent6 = indexer_manager.IndexerTendermintEvent{ BlockEvent: indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_BEGIN_BLOCK, }, EventIndex: 1, + Version: indexerevents.FundingValuesEventVersion, } +var EventVersion uint32 = 1 + func assertIsEnabled(t *testing.T, isEnabled bool) { storeKey := types.NewTransientStoreKey(indexer_manager.TransientStoreKey) mockMsgSender := &mocks.IndexerMessageSender{} @@ -143,6 +152,7 @@ func TestProduceBlockBasicTxnEvent(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &OrderFillEvent, ), + EventVersion, ) block := indexerEventManager.ProduceBlock(ctx) @@ -171,6 +181,7 @@ func TestProduceBlockBasicBlockEvent(t *testing.T) { &FundingRateAndIndexEvent, ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, + EventVersion, ) block := indexerEventManager.ProduceBlock(ctx) @@ -198,6 +209,7 @@ func TestProduceBlockMultipleTxnEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &OrderFillEvent, ), + EventVersion, ) indexerEventManager.AddTxnEvent( ctx, @@ -205,6 +217,7 @@ func TestProduceBlockMultipleTxnEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &SubaccountEvent, ), + EventVersion, ) ctx = ctx.WithTxBytes(constants.TestTxBytes1) indexerEventManager.AddTxnEvent( @@ -213,6 +226,7 @@ func TestProduceBlockMultipleTxnEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &TransferEvent, ), + EventVersion, ) block := indexerEventManager.ProduceBlock(ctx) @@ -245,6 +259,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &OrderFillEvent, ), + EventVersion, ) indexerEventManager.AddTxnEvent( ctx, @@ -252,6 +267,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &SubaccountEvent, ), + EventVersion, ) ctx = ctx.WithTxBytes(constants.TestTxBytes1) indexerEventManager.AddTxnEvent( @@ -260,6 +276,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &TransferEvent, ), + EventVersion, ) indexerEventManager.AddBlockEvent( ctx, @@ -268,6 +285,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { &FundingRateAndIndexEvent, ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, + EventVersion, ) indexerEventManager.AddBlockEvent( ctx, @@ -276,6 +294,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { &FundingPremiumSampleEvent, ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, + EventVersion, ) indexerEventManager.AddBlockEvent( ctx, @@ -284,6 +303,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { &FundingPremiumSampleEvent, ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_BEGIN_BLOCK, + EventVersion, ) indexerEventManager.AddBlockEvent( ctx, @@ -292,6 +312,7 @@ func TestProduceBlockMultipleTxnAndBlockEvents(t *testing.T) { &FundingRateAndIndexEvent, ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_BEGIN_BLOCK, + EventVersion, ) block := indexerEventManager.ProduceBlock(ctx) @@ -328,6 +349,7 @@ func TestClearEvents(t *testing.T) { indexer_manager.GetB64EncodedEventMessage( &OrderFillEvent, ), + EventVersion, ) block := indexerEventManager.ProduceBlock(ctx) diff --git a/protocol/indexer/indexer_manager/events.go b/protocol/indexer/indexer_manager/events.go index 85fb76a24a..763f6644e8 100644 --- a/protocol/indexer/indexer_manager/events.go +++ b/protocol/indexer/indexer_manager/events.go @@ -73,12 +73,14 @@ func addTxnEvent( ctx sdk.Context, subType string, data string, + version uint32, storeKey storetypes.StoreKey, ) { event := IndexerTendermintEventWrapper{ Event: &IndexerTendermintEvent{ Subtype: subType, Data: data, + Version: version, OrderingWithinBlock: &IndexerTendermintEvent_TransactionIndex{}, }, TxnHash: string(lib.GetTxHash(ctx.TxBytes())), @@ -93,11 +95,13 @@ func addBlockEvent( data string, storeKey storetypes.StoreKey, blockEvent IndexerTendermintEvent_BlockEvent, + version uint32, ) { event := IndexerTendermintEventWrapper{ Event: &IndexerTendermintEvent{ Subtype: subType, Data: data, + Version: version, OrderingWithinBlock: &IndexerTendermintEvent_BlockEvent_{ BlockEvent: blockEvent, }, diff --git a/protocol/mocks/IndexerEventManager.go b/protocol/mocks/IndexerEventManager.go index 026ac98a05..5190a5097b 100644 --- a/protocol/mocks/IndexerEventManager.go +++ b/protocol/mocks/IndexerEventManager.go @@ -16,14 +16,14 @@ type IndexerEventManager struct { mock.Mock } -// AddBlockEvent provides a mock function with given fields: ctx, subType, data, blockEvent -func (_m *IndexerEventManager) AddBlockEvent(ctx types.Context, subType string, data string, blockEvent indexer_manager.IndexerTendermintEvent_BlockEvent) { - _m.Called(ctx, subType, data, blockEvent) +// AddBlockEvent provides a mock function with given fields: ctx, subType, data, blockEvent, version +func (_m *IndexerEventManager) AddBlockEvent(ctx types.Context, subType string, data string, blockEvent indexer_manager.IndexerTendermintEvent_BlockEvent, version uint32) { + _m.Called(ctx, subType, data, blockEvent, version) } -// AddTxnEvent provides a mock function with given fields: ctx, subType, data -func (_m *IndexerEventManager) AddTxnEvent(ctx types.Context, subType string, data string) { - _m.Called(ctx, subType, data) +// AddTxnEvent provides a mock function with given fields: ctx, subType, data, version +func (_m *IndexerEventManager) AddTxnEvent(ctx types.Context, subType string, data string, version uint32) { + _m.Called(ctx, subType, data, version) } // ClearEvents provides a mock function with given fields: ctx diff --git a/protocol/testutil/keeper/clob.go b/protocol/testutil/keeper/clob.go index 4b338c4072..a1a0eb397f 100644 --- a/protocol/testutil/keeper/clob.go +++ b/protocol/testutil/keeper/clob.go @@ -284,6 +284,7 @@ func CreateNClobPair( perps[i].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Return() _, err := keeper.CreatePerpetualClobPair( diff --git a/protocol/x/assets/keeper/asset.go b/protocol/x/assets/keeper/asset.go index 2ea2c8b760..8cb62280bd 100644 --- a/protocol/x/assets/keeper/asset.go +++ b/protocol/x/assets/keeper/asset.go @@ -76,6 +76,7 @@ func (k Keeper) CreateAsset( asset.AtomicResolution, ), ), + indexerevents.AssetEventVersion, ) return asset, nil diff --git a/protocol/x/clob/abci.go b/protocol/x/clob/abci.go index 8fbfb06906..965f5f588e 100644 --- a/protocol/x/clob/abci.go +++ b/protocol/x/clob/abci.go @@ -59,6 +59,7 @@ func EndBlocker( indexershared.OrderRemovalReason_ORDER_REMOVAL_REASON_EXPIRED, ), ), + indexerevents.StatefulOrderEventVersion, ) telemetry.IncrCounterWithLabels( []string{types.ModuleName, metrics.Expired, metrics.StatefulOrderRemoved, metrics.Count}, diff --git a/protocol/x/clob/abci_test.go b/protocol/x/clob/abci_test.go index c981bc75ac..c2957301c2 100644 --- a/protocol/x/clob/abci_test.go +++ b/protocol/x/clob/abci_test.go @@ -151,6 +151,7 @@ func TestEndBlocker_Failure(t *testing.T) { indexershared.OrderRemovalReason_ORDER_REMOVAL_REASON_EXPIRED, ), ), + indexerevents.StatefulOrderEventVersion, ).Once().Return() } @@ -698,6 +699,7 @@ func TestEndBlocker_Success(t *testing.T) { constants.BtcUsd_20PercentInitial_10PercentMaintenance.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -729,6 +731,7 @@ func TestEndBlocker_Success(t *testing.T) { constants.EthUsd_20PercentInitial_10PercentMaintenance.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -756,6 +759,7 @@ func TestEndBlocker_Success(t *testing.T) { indexershared.OrderRemovalReason_ORDER_REMOVAL_REASON_EXPIRED, ), ), + indexerevents.StatefulOrderEventVersion, ).Once().Return() } @@ -769,6 +773,7 @@ func TestEndBlocker_Success(t *testing.T) { orderId, ), ), + indexerevents.StatefulOrderEventVersion, ).Once().Return() } diff --git a/protocol/x/clob/e2e/short_term_orders_test.go b/protocol/x/clob/e2e/short_term_orders_test.go index 8dacbaa10e..fac91c001a 100644 --- a/protocol/x/clob/e2e/short_term_orders_test.go +++ b/protocol/x/clob/e2e/short_term_orders_test.go @@ -173,6 +173,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 0, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeSubaccountUpdate, @@ -199,6 +200,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 1, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeOrderFill, @@ -215,6 +217,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 2, + Version: indexerevents.OrderFillEventVersion, }, }, TxHashes: []string{string(lib.GetTxHash(testtx.MustGetTxBytes(&clobtypes.MsgProposedOperations{ @@ -329,6 +332,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 0, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeSubaccountUpdate, @@ -355,6 +359,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 1, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeOrderFill, @@ -371,6 +376,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 2, + Version: indexerevents.OrderFillEventVersion, }, }, TxHashes: []string{string(lib.GetTxHash(testtx.MustGetTxBytes(&clobtypes.MsgProposedOperations{ @@ -485,6 +491,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 0, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeSubaccountUpdate, @@ -511,6 +518,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 1, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeOrderFill, @@ -527,6 +535,7 @@ func TestPlaceOrder(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 2, + Version: indexerevents.OrderFillEventVersion, }, }, TxHashes: []string{string(lib.GetTxHash(testtx.MustGetTxBytes(&clobtypes.MsgProposedOperations{ diff --git a/protocol/x/clob/genesis_test.go b/protocol/x/clob/genesis_test.go index 93e48947bd..5484b66b01 100644 --- a/protocol/x/clob/genesis_test.go +++ b/protocol/x/clob/genesis_test.go @@ -451,6 +451,7 @@ func TestGenesis(t *testing.T) { perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() } } diff --git a/protocol/x/clob/keeper/clob_pair.go b/protocol/x/clob/keeper/clob_pair.go index 9c5ec015e8..a08f739f16 100644 --- a/protocol/x/clob/keeper/clob_pair.go +++ b/protocol/x/clob/keeper/clob_pair.go @@ -90,6 +90,7 @@ func (k Keeper) CreatePerpetualClobPair( perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ) return clobPair, nil @@ -467,6 +468,7 @@ func (k Keeper) UpdateClobPair( satypes.BaseQuantums(clobPair.GetStepBaseQuantums()), ), ), + indexerevents.UpdateClobPairEventVersion, ) return nil diff --git a/protocol/x/clob/keeper/clob_pair_test.go b/protocol/x/clob/keeper/clob_pair_test.go index c0569b5dc2..38fbc91ec5 100644 --- a/protocol/x/clob/keeper/clob_pair_test.go +++ b/protocol/x/clob/keeper/clob_pair_test.go @@ -63,6 +63,7 @@ func TestCreatePerpetualClobPair_MultiplePerpetual(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[i].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() //nolint: errcheck ks.ClobKeeper.CreatePerpetualClobPair( @@ -91,7 +92,7 @@ func TestCreatePerpetualClobPair_FailsWithPerpetualAssociatedWithExistingClobPai // Set up mock indexer event manager that accepts anything. mockIndexerEventManager := &mocks.IndexerEventManager{} mockIndexerEventManager.On("AddTxnEvent", - mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, ).Return() ks := keepertest.NewClobKeepersTestContext( t, @@ -186,6 +187,7 @@ func TestCreatePerpetualClobPair_FailsWithDuplicateClobPairId(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( @@ -276,6 +278,7 @@ func TestCreatePerpetualClobPair(t *testing.T) { perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Return() } @@ -427,6 +430,7 @@ func TestCreateMultipleClobPairs(t *testing.T) { perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Return() } @@ -629,6 +633,7 @@ func TestUpdateClobPair(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( @@ -654,6 +659,7 @@ func TestUpdateClobPair(t *testing.T) { satypes.BaseQuantums(clobPair.GetStepBaseQuantums()), ), ), + indexerevents.UpdateClobPairEventVersion, ).Once().Return() }, status: types.ClobPair_STATUS_ACTIVE, @@ -684,6 +690,7 @@ func TestUpdateClobPair(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( @@ -720,6 +727,7 @@ func TestUpdateClobPair(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( @@ -809,6 +817,7 @@ func TestGetAllClobPairs_Sorted(t *testing.T) { ks.Ctx, indexerevents.SubtypePerpetualMarket, mock.Anything, + mock.Anything, ).Return().Times(len(clobPairs)) for _, clobPair := range clobPairs { diff --git a/protocol/x/clob/keeper/get_price_premium_test.go b/protocol/x/clob/keeper/get_price_premium_test.go index 16b3995a47..7fdc125851 100644 --- a/protocol/x/clob/keeper/get_price_premium_test.go +++ b/protocol/x/clob/keeper/get_price_premium_test.go @@ -183,6 +183,7 @@ func TestGetPricePremiumForPerpetual(t *testing.T) { perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, diff --git a/protocol/x/clob/keeper/liquidations_test.go b/protocol/x/clob/keeper/liquidations_test.go index 4e96064273..bcab8fc4d3 100644 --- a/protocol/x/clob/keeper/liquidations_test.go +++ b/protocol/x/clob/keeper/liquidations_test.go @@ -1069,6 +1069,7 @@ func TestPlacePerpetualLiquidation_PreexistingLiquidation(t *testing.T) { constants.BtcUsd_100PercentMarginRequirement.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -1097,6 +1098,7 @@ func TestPlacePerpetualLiquidation_PreexistingLiquidation(t *testing.T) { constants.EthUsd_100PercentMarginRequirement.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -1967,6 +1969,7 @@ func TestPlacePerpetualLiquidation_Deleveraging(t *testing.T) { perpetuals[i].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -2079,6 +2082,7 @@ func TestPlacePerpetualLiquidation_SendOffchainMessages(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -3598,6 +3602,7 @@ func TestGetLiquidationInsuranceFundDelta(t *testing.T) { tc.perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -4348,6 +4353,7 @@ func TestGetPerpetualPositionToLiquidate(t *testing.T) { tc.perpetuals[perpetualId].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -4965,6 +4971,7 @@ func TestGetMaxAndMinPositionNotionalLiquidatable(t *testing.T) { constants.BtcUsd_100PercentMarginRequirement.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -5117,6 +5124,7 @@ func TestSortLiquidationOrders(t *testing.T) { constants.BtcUsd_100PercentMarginRequirement.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, diff --git a/protocol/x/clob/keeper/msg_server_cancel_orders.go b/protocol/x/clob/keeper/msg_server_cancel_orders.go index 2d268697a2..7fac2b5748 100644 --- a/protocol/x/clob/keeper/msg_server_cancel_orders.go +++ b/protocol/x/clob/keeper/msg_server_cancel_orders.go @@ -49,6 +49,7 @@ func (m msgServer) CancelOrder( indexershared.OrderRemovalReason_ORDER_REMOVAL_REASON_USER_CANCELED, ), ), + indexerevents.StatefulOrderEventVersion, ) telemetry.IncrCounterWithLabels( diff --git a/protocol/x/clob/keeper/msg_server_cancel_orders_test.go b/protocol/x/clob/keeper/msg_server_cancel_orders_test.go index aebe5fbb25..b51267b6dc 100644 --- a/protocol/x/clob/keeper/msg_server_cancel_orders_test.go +++ b/protocol/x/clob/keeper/msg_server_cancel_orders_test.go @@ -73,7 +73,13 @@ func TestCancelOrder_Error(t *testing.T) { memClob := &mocks.MemClob{} memClob.On("SetClobKeeper", mock.Anything).Return() indexerEventManager := &mocks.IndexerEventManager{} - indexerEventManager.On("AddTxnEvent", mock.Anything, mock.Anything, mock.Anything).Return().Once() + indexerEventManager.On( + "AddTxnEvent", + mock.Anything, + mock.Anything, + mock.Anything, + mock.Anything, + ).Return().Once() ks := keepertest.NewClobKeepersTestContext( t, memClob, &mocks.BankKeeper{}, indexerEventManager) @@ -138,6 +144,7 @@ func TestCancelOrder_Success(t *testing.T) { indexershared.OrderRemovalReason_ORDER_REMOVAL_REASON_USER_CANCELED, ), ), + indexerevents.StatefulOrderEventVersion, ).Return().Once() // Add stateful order placement to state diff --git a/protocol/x/clob/keeper/msg_server_create_clob_pair_test.go b/protocol/x/clob/keeper/msg_server_create_clob_pair_test.go index 2b9c82a192..cfc5af073b 100644 --- a/protocol/x/clob/keeper/msg_server_create_clob_pair_test.go +++ b/protocol/x/clob/keeper/msg_server_create_clob_pair_test.go @@ -65,6 +65,7 @@ func TestCreateClobPair(t *testing.T) { testPerp1.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Return() }, msg: &types.MsgCreateClobPair{ @@ -88,6 +89,7 @@ func TestCreateClobPair(t *testing.T) { ks.Ctx, mock.Anything, mock.Anything, + mock.Anything, ).Return() keepertest.CreateTestClobPairs(t, ks.Ctx, ks.ClobKeeper, []types.ClobPair{testClobPair1}) }, @@ -113,6 +115,7 @@ func TestCreateClobPair(t *testing.T) { ks.Ctx, mock.Anything, mock.Anything, + mock.Anything, ).Return() keepertest.CreateTestClobPairs(t, ks.Ctx, ks.ClobKeeper, []types.ClobPair{testClobPair1}) }, diff --git a/protocol/x/clob/keeper/msg_server_place_order.go b/protocol/x/clob/keeper/msg_server_place_order.go index 22054ea482..7ca5ee7cda 100644 --- a/protocol/x/clob/keeper/msg_server_place_order.go +++ b/protocol/x/clob/keeper/msg_server_place_order.go @@ -60,6 +60,7 @@ func (k msgServer) PlaceOrder(goCtx context.Context, msg *types.MsgPlaceOrder) ( order, ), ), + indexerevents.StatefulOrderEventVersion, ) processProposerMatchesEvents.PlacedConditionalOrderIds = append( processProposerMatchesEvents.PlacedConditionalOrderIds, @@ -74,6 +75,7 @@ func (k msgServer) PlaceOrder(goCtx context.Context, msg *types.MsgPlaceOrder) ( order, ), ), + indexerevents.StatefulOrderEventVersion, ) processProposerMatchesEvents.PlacedLongTermOrderIds = append( processProposerMatchesEvents.PlacedLongTermOrderIds, diff --git a/protocol/x/clob/keeper/msg_server_place_order_test.go b/protocol/x/clob/keeper/msg_server_place_order_test.go index 111f210414..53669c73d9 100644 --- a/protocol/x/clob/keeper/msg_server_place_order_test.go +++ b/protocol/x/clob/keeper/msg_server_place_order_test.go @@ -128,6 +128,7 @@ func TestPlaceOrder_Error(t *testing.T) { perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -268,6 +269,7 @@ func TestPlaceOrder_Success(t *testing.T) { perpetual.Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err = ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -291,6 +293,7 @@ func TestPlaceOrder_Success(t *testing.T) { tc.StatefulOrderPlacement, ), ), + indexerevents.StatefulOrderEventVersion, ).Return().Once() } else { indexerEventManager.On( @@ -302,6 +305,7 @@ func TestPlaceOrder_Success(t *testing.T) { tc.StatefulOrderPlacement, ), ), + indexerevents.StatefulOrderEventVersion, ).Return().Once() } diff --git a/protocol/x/clob/keeper/msg_server_update_clob_pair_test.go b/protocol/x/clob/keeper/msg_server_update_clob_pair_test.go index 1ba01c6c32..a6d6d52f56 100644 --- a/protocol/x/clob/keeper/msg_server_update_clob_pair_test.go +++ b/protocol/x/clob/keeper/msg_server_update_clob_pair_test.go @@ -71,6 +71,7 @@ func TestMsgServerUpdateClobPair(t *testing.T) { satypes.BaseQuantums(clobPair.GetStepBaseQuantums()), ), ), + indexerevents.UpdateClobPairEventVersion, ).Once().Return() }, expectedResp: &types.MsgUpdateClobPairResponse{}, diff --git a/protocol/x/clob/keeper/orders_test.go b/protocol/x/clob/keeper/orders_test.go index 17835d8418..6a6432fc7b 100644 --- a/protocol/x/clob/keeper/orders_test.go +++ b/protocol/x/clob/keeper/orders_test.go @@ -1035,6 +1035,7 @@ func TestPlaceOrder_SendOffchainMessages(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ctx, @@ -1088,6 +1089,7 @@ func TestPerformStatefulOrderValidation_PreExistingStatefulOrder(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -1817,6 +1819,7 @@ func TestGetStatePosition_Success(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[i].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -2029,6 +2032,7 @@ func TestInitStatefulOrdersInMemClob(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, @@ -2157,6 +2161,7 @@ func TestHydrateUntriggeredConditionalOrdersInMemClob(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() _, err := ks.ClobKeeper.CreatePerpetualClobPair( ks.Ctx, diff --git a/protocol/x/clob/keeper/process_operations.go b/protocol/x/clob/keeper/process_operations.go index 02512b2b64..6fed8e49d1 100644 --- a/protocol/x/clob/keeper/process_operations.go +++ b/protocol/x/clob/keeper/process_operations.go @@ -416,6 +416,7 @@ func (k Keeper) PersistOrderRemovalToState( ), ), ), + indexerevents.StatefulOrderEventVersion, ) telemetry.IncrCounterWithLabels( @@ -505,6 +506,7 @@ func (k Keeper) PersistMatchOrdersToState( totalFilledTaker, ), ), + indexerevents.OrderFillEventVersion, ) } @@ -577,6 +579,7 @@ func (k Keeper) PersistMatchLiquidationToState( totalFilledMaker, ), ), + indexerevents.OrderFillEventVersion, ) } diff --git a/protocol/x/clob/keeper/process_operations_test.go b/protocol/x/clob/keeper/process_operations_test.go index fa234ff25f..e40c80cd6c 100644 --- a/protocol/x/clob/keeper/process_operations_test.go +++ b/protocol/x/clob/keeper/process_operations_test.go @@ -1617,6 +1617,7 @@ func setupProcessProposerOperationsTestCase( mock.Anything, mock.Anything, mock.Anything, + mock.Anything, ).Return().Maybe() } @@ -1674,6 +1675,7 @@ func setupProcessProposerOperationsTestCase( tc.perpetuals[perpetualId].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() } @@ -1840,6 +1842,7 @@ func setupNewMockEventManager( match.TotalFilledTaker, ), ), + indexerevents.OrderFillEventVersion, ).Return() matchOrderCallMap[match.MakerOrder.MustGetOrder().OrderId] = call @@ -1858,6 +1861,7 @@ func setupNewMockEventManager( match.TotalFilledTaker, ), ), + indexerevents.OrderFillEventVersion, ).Return() matchOrderCallMap[match.MakerOrder.MustGetOrder().OrderId] = call matchOrderCallMap[match.TakerOrder.MustGetOrder().OrderId] = call @@ -1877,6 +1881,7 @@ func setupNewMockEventManager( ), ), ), + indexerevents.StatefulOrderEventVersion, ).Once().Return() } } diff --git a/protocol/x/clob/keeper/untriggered_conditional_orders.go b/protocol/x/clob/keeper/untriggered_conditional_orders.go index cdf5782830..67e49d196a 100644 --- a/protocol/x/clob/keeper/untriggered_conditional_orders.go +++ b/protocol/x/clob/keeper/untriggered_conditional_orders.go @@ -312,6 +312,7 @@ func (k Keeper) MaybeTriggerConditionalOrders(ctx sdk.Context) (triggeredConditi triggeredConditionalOrderId, ), ), + indexerevents.StatefulOrderEventVersion, ) } return triggeredConditionalOrderIds diff --git a/protocol/x/clob/module_test.go b/protocol/x/clob/module_test.go index c29017ea49..04d893a772 100644 --- a/protocol/x/clob/module_test.go +++ b/protocol/x/clob/module_test.go @@ -317,6 +317,7 @@ func TestAppModule_InitExportGenesis(t *testing.T) { constants.Perpetuals_DefaultGenesisState.Perpetuals[0].Params.LiquidityTier, ), ), + indexerevents.PerpetualMarketEventVersion, ).Once().Return() prices.InitGenesis(ctx, *pricesKeeper, constants.Prices_DefaultGenesisState) diff --git a/protocol/x/perpetuals/keeper/perpetual.go b/protocol/x/perpetuals/keeper/perpetual.go index 5e6800cf82..4d6ba12282 100644 --- a/protocol/x/perpetuals/keeper/perpetual.go +++ b/protocol/x/perpetuals/keeper/perpetual.go @@ -326,6 +326,7 @@ func (k Keeper) processPremiumVotesIntoSamples( indexerevents.NewPremiumSamplesEvent(newSamplesForEvent), ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, + indexerevents.FundingValuesEventVersion, ) k.SetEmptyPremiumVotes(ctx) @@ -703,6 +704,7 @@ func (k Keeper) MaybeProcessNewFundingTickEpoch(ctx sdk.Context) { indexerevents.NewFundingRatesAndIndicesEvent(newFundingRatesAndIndicesForEvent), ), indexer_manager.IndexerTendermintEvent_BLOCK_EVENT_END_BLOCK, + indexerevents.FundingValuesEventVersion, ) // Clear premium samples. @@ -1312,6 +1314,7 @@ func (k Keeper) CreateLiquidityTier( basePositionNotional, ), ), + indexerevents.LiquidityTierEventVersion, ) return liquidityTier, nil @@ -1364,6 +1367,7 @@ func (k Keeper) ModifyLiquidityTier( basePositionNotional, ), ), + indexerevents.LiquidityTierEventVersion, ) return liquidityTier, nil diff --git a/protocol/x/prices/genesis.go b/protocol/x/prices/genesis.go index 3b492c650a..5d3195d1a1 100644 --- a/protocol/x/prices/genesis.go +++ b/protocol/x/prices/genesis.go @@ -32,6 +32,7 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) indexer_manager.GetB64EncodedEventMessage( update, ), + indexerevents.MarketEventVersion, ) } } diff --git a/protocol/x/prices/keeper/market.go b/protocol/x/prices/keeper/market.go index 4e992fcad7..898b3e2726 100644 --- a/protocol/x/prices/keeper/market.go +++ b/protocol/x/prices/keeper/market.go @@ -56,6 +56,7 @@ func (k Keeper) CreateMarket( marketParam.Exponent, ), ), + indexerevents.MarketEventVersion, ) k.marketToCreatedAt[marketParam.Id] = k.timeProvider.Now() diff --git a/protocol/x/prices/keeper/market_param.go b/protocol/x/prices/keeper/market_param.go index fc08ac786e..d6525431cc 100644 --- a/protocol/x/prices/keeper/market_param.go +++ b/protocol/x/prices/keeper/market_param.go @@ -59,6 +59,7 @@ func (k Keeper) ModifyMarketParam( marketParam.MinPriceChangePpm, ), ), + indexerevents.MarketEventVersion, ) // Update the in-memory market pair map for labelling metrics. diff --git a/protocol/x/prices/keeper/market_price.go b/protocol/x/prices/keeper/market_price.go index 3c79a18b55..bf98fe5845 100644 --- a/protocol/x/prices/keeper/market_price.go +++ b/protocol/x/prices/keeper/market_price.go @@ -102,6 +102,7 @@ func (k Keeper) UpdateMarketPrices( indexer_manager.GetB64EncodedEventMessage( update, ), + indexerevents.MarketEventVersion, ) } diff --git a/protocol/x/sending/app_test.go b/protocol/x/sending/app_test.go index 8bf051af80..8a3a97c9f4 100644 --- a/protocol/x/sending/app_test.go +++ b/protocol/x/sending/app_test.go @@ -176,6 +176,7 @@ func TestMsgDepositToSubaccount(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 0, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeTransfer, @@ -189,6 +190,7 @@ func TestMsgDepositToSubaccount(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 1, + Version: indexerevents.TransferEventVersion, }, }, TxHashes: []string{string(lib.GetTxHash(CheckTx_MsgDepositToSubaccount.GetTx()))}, @@ -363,6 +365,7 @@ func TestMsgWithdrawFromSubaccount(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 0, + Version: indexerevents.SubaccountUpdateEventVersion, }, { Subtype: indexerevents.SubtypeTransfer, @@ -376,6 +379,7 @@ func TestMsgWithdrawFromSubaccount(t *testing.T) { ), OrderingWithinBlock: &indexer_manager.IndexerTendermintEvent_TransactionIndex{}, EventIndex: 1, + Version: indexerevents.TransferEventVersion, }, }, TxHashes: []string{string(lib.GetTxHash(CheckTx_MsgWithdrawFromSubaccount.GetTx()))}, diff --git a/protocol/x/sending/keeper/transfer.go b/protocol/x/sending/keeper/transfer.go index 45173dbd1a..63b1e3b45a 100644 --- a/protocol/x/sending/keeper/transfer.go +++ b/protocol/x/sending/keeper/transfer.go @@ -56,6 +56,7 @@ func (k Keeper) ProcessTransfer( indexer_manager.GetB64EncodedEventMessage( k.GenerateTransferEvent(pendingTransfer), ), + indexerevents.TransferEventVersion, ) return nil @@ -124,6 +125,7 @@ func (k Keeper) ProcessDepositToSubaccount( indexer_manager.GetB64EncodedEventMessage( k.GenerateDepositEvent(msgDepositToSubaccount), ), + indexerevents.TransferEventVersion, ) } @@ -190,6 +192,7 @@ func (k Keeper) ProcessWithdrawFromSubaccount( indexer_manager.GetB64EncodedEventMessage( k.GenerateWithdrawEvent(msgWithdrawFromSubaccount), ), + indexerevents.TransferEventVersion, ) } diff --git a/protocol/x/subaccounts/genesis.go b/protocol/x/subaccounts/genesis.go index 0f21decdc3..1cd343a2b1 100644 --- a/protocol/x/subaccounts/genesis.go +++ b/protocol/x/subaccounts/genesis.go @@ -27,6 +27,7 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) nil, ), ), + indexerevents.SubaccountUpdateEventVersion, ) } } diff --git a/protocol/x/subaccounts/keeper/subaccount.go b/protocol/x/subaccounts/keeper/subaccount.go index cb0a4a58df..e564cec4ea 100644 --- a/protocol/x/subaccounts/keeper/subaccount.go +++ b/protocol/x/subaccounts/keeper/subaccount.go @@ -303,6 +303,7 @@ func (k Keeper) UpdateSubaccounts( fundingPayments, ), ), + indexerevents.SubaccountUpdateEventVersion, ) // Emit an event indicating a funding payment was paid / received for each settled funding