Skip to content

Commit

Permalink
[TRA-108] Update indexer to ingest and return market type for perpetu…
Browse files Browse the repository at this point in the history
…als (#1266)


Signed-off-by: Shrenuj Bansal <[email protected]>
  • Loading branch information
shrenujb authored Mar 28, 2024
1 parent 56761ac commit 56b7cce
Show file tree
Hide file tree
Showing 16 changed files with 130 additions and 9 deletions.
6 changes: 6 additions & 0 deletions indexer/packages/postgres/__tests__/helpers/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import {
OrderType,
PerpetualMarketCreateObject,
PerpetualMarketStatus,
PerpetualMarketType,
PerpetualPositionCreateObject,
PerpetualPositionStatus,
PnlTicksCreateObject,
Expand Down Expand Up @@ -208,6 +209,7 @@ export const defaultPerpetualMarket: PerpetualMarketCreateObject = {
subticksPerTick: 100,
stepBaseQuantums: 10,
liquidityTierId: 0,
marketType: PerpetualMarketType.CROSS,
};
export const defaultPerpetualMarket2: PerpetualMarketCreateObject = {
id: '1',
Expand All @@ -225,6 +227,7 @@ export const defaultPerpetualMarket2: PerpetualMarketCreateObject = {
subticksPerTick: 10,
stepBaseQuantums: 1,
liquidityTierId: 0,
marketType: PerpetualMarketType.CROSS,
};
export const defaultPerpetualMarket3: PerpetualMarketCreateObject = {
id: '2',
Expand All @@ -242,6 +245,7 @@ export const defaultPerpetualMarket3: PerpetualMarketCreateObject = {
subticksPerTick: 10,
stepBaseQuantums: 1,
liquidityTierId: 0,
marketType: PerpetualMarketType.CROSS,
};

export const isolatedPerpetualMarket: PerpetualMarketCreateObject = {
Expand All @@ -260,6 +264,7 @@ export const isolatedPerpetualMarket: PerpetualMarketCreateObject = {
subticksPerTick: 10,
stepBaseQuantums: 1,
liquidityTierId: 0,
marketType: PerpetualMarketType.ISOLATED,
};

export const isolatedPerpetualMarket2: PerpetualMarketCreateObject = {
Expand All @@ -278,6 +283,7 @@ export const isolatedPerpetualMarket2: PerpetualMarketCreateObject = {
subticksPerTick: 10,
stepBaseQuantums: 1,
liquidityTierId: 0,
marketType: PerpetualMarketType.ISOLATED,
};

// ============== Orders ==============
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import * as Knex from 'knex';

export async function up(knex: Knex): Promise<void> {
return knex.schema.table('perpetual_markets', (table) => {
table.enum('marketType', ['CROSS', 'ISOLATED']).notNullable().defaultTo('CROSS');
});
}

export async function down(knex: Knex): Promise<void> {
return knex.schema.table('perpetual_markets', (table) => {
table.dropColumn('marketType');
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
NumericPattern,
} from '../lib/validators';
import {
PerpetualMarketStatus,
PerpetualMarketStatus, PerpetualMarketType,
} from '../types';

export default class PerpetualMarketModel extends Model {
Expand Down Expand Up @@ -66,6 +66,7 @@ export default class PerpetualMarketModel extends Model {
'subticksPerTick',
'stepBaseQuantums',
'liquidityTierId',
'marketType',
],
properties: {
id: { type: 'string', pattern: IntegerPattern },
Expand All @@ -83,6 +84,7 @@ export default class PerpetualMarketModel extends Model {
subticksPerTick: { type: 'integer' },
stepBaseQuantums: { type: 'integer' },
liquidityTierId: { type: 'integer' },
marketType: { type: 'string' },
},
};
}
Expand Down Expand Up @@ -110,6 +112,7 @@ export default class PerpetualMarketModel extends Model {
subticksPerTick: 'integer',
stepBaseQuantums: 'integer',
liquidityTierId: 'integer',
marketType: 'string',
};
}

Expand Down Expand Up @@ -142,4 +145,6 @@ export default class PerpetualMarketModel extends Model {
stepBaseQuantums!: number;

liquidityTierId!: number;

marketType!: PerpetualMarketType;
}
3 changes: 2 additions & 1 deletion indexer/packages/postgres/src/types/db-model-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { FillType, Liquidity } from './fill-types';
import {
OrderSide, OrderStatus, OrderType, TimeInForce,
} from './order-types';
import { PerpetualMarketStatus } from './perpetual-market-types';
import { PerpetualMarketStatus, PerpetualMarketType } from './perpetual-market-types';
import { PerpetualPositionStatus } from './perpetual-position-types';
import { PositionSide } from './position-types';
import { TradingRewardAggregationPeriod } from './trading-reward-aggregation-types';
Expand Down Expand Up @@ -91,6 +91,7 @@ export interface PerpetualMarketFromDatabase {
subticksPerTick: number;
stepBaseQuantums: number;
liquidityTierId: number;
marketType: PerpetualMarketType;
}

export interface FillFromDatabase {
Expand Down
6 changes: 6 additions & 0 deletions indexer/packages/postgres/src/types/perpetual-market-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export interface PerpetualMarketCreateObject {
subticksPerTick: number;
stepBaseQuantums: number;
liquidityTierId: number;
marketType: PerpetualMarketType;
}

export interface PerpetualMarketUpdateObject {
Expand Down Expand Up @@ -62,3 +63,8 @@ export enum PerpetualMarketStatus {
INITIALIZING = 'INITIALIZING',
FINAL_SETTLEMENT = 'FINAL_SETTLEMENT',
}

export enum PerpetualMarketType {
CROSS = 'CROSS',
ISOLATED = 'ISOLATED',
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
OrderStatus,
OrderType,
} from './order-types';
import { PerpetualMarketStatus } from './perpetual-market-types';
import { PerpetualMarketStatus, PerpetualMarketType } from './perpetual-market-types';
import { PerpetualPositionStatus } from './perpetual-position-types';
import { PositionSide } from './position-types';
import { TradeType } from './trade-types';
Expand Down Expand Up @@ -212,6 +212,7 @@ export interface TradingPerpetualMarketMessage {
atomicResolution?: number;
subticksPerTick?: number;
stepBaseQuantums?: number;
marketType?: PerpetualMarketType;

// Fields that are likely to change
priceChange24H?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ describe('request-transformer', () => {
stepSize: Big(10).pow(-9).toFixed(), // 10 * 1e-10 = 1e-9
stepBaseQuantums: perpetualMarket.stepBaseQuantums,
subticksPerTick: perpetualMarket.subticksPerTick,
marketType: perpetualMarket.marketType,
},
);
});
Expand Down
41 changes: 36 additions & 5 deletions indexer/services/comlink/public/api-documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -1720,7 +1720,8 @@ fetch('https://dydx-testnet.imperator.co/v4/perpetualMarkets',
"tickSize": "string",
"stepSize": "string",
"stepBaseQuantums": 0,
"subticksPerTick": 0
"subticksPerTick": 0,
"marketType": "CROSS"
},
"property2": {
"clobPairId": "string",
Expand All @@ -1739,7 +1740,8 @@ fetch('https://dydx-testnet.imperator.co/v4/perpetualMarkets',
"tickSize": "string",
"stepSize": "string",
"stepBaseQuantums": 0,
"subticksPerTick": 0
"subticksPerTick": 0,
"marketType": "CROSS"
}
}
}
Expand Down Expand Up @@ -3719,6 +3721,31 @@ or
|*anonymous*|INITIALIZING|
|*anonymous*|FINAL_SETTLEMENT|

## PerpetualMarketType

<a id="schemaperpetualmarkettype"></a>
<a id="schema_PerpetualMarketType"></a>
<a id="tocSperpetualmarkettype"></a>
<a id="tocsperpetualmarkettype"></a>

```json
"CROSS"

```

### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|*anonymous*|string|false|none|none|

#### Enumerated Values

|Property|Value|
|---|---|
|*anonymous*|CROSS|
|*anonymous*|ISOLATED|

## PerpetualMarketResponseObject

<a id="schemaperpetualmarketresponseobject"></a>
Expand All @@ -3744,7 +3771,8 @@ or
"tickSize": "string",
"stepSize": "string",
"stepBaseQuantums": 0,
"subticksPerTick": 0
"subticksPerTick": 0,
"marketType": "CROSS"
}

```
Expand All @@ -3770,6 +3798,7 @@ or
|stepSize|string|true|none|none|
|stepBaseQuantums|number(double)|true|none|none|
|subticksPerTick|number(double)|true|none|none|
|marketType|[PerpetualMarketType](#schemaperpetualmarkettype)|true|none|none|

## PerpetualMarketResponse

Expand Down Expand Up @@ -3798,7 +3827,8 @@ or
"tickSize": "string",
"stepSize": "string",
"stepBaseQuantums": 0,
"subticksPerTick": 0
"subticksPerTick": 0,
"marketType": "CROSS"
},
"property2": {
"clobPairId": "string",
Expand All @@ -3817,7 +3847,8 @@ or
"tickSize": "string",
"stepSize": "string",
"stepBaseQuantums": 0,
"subticksPerTick": 0
"subticksPerTick": 0,
"marketType": "CROSS"
}
}
}
Expand Down
13 changes: 12 additions & 1 deletion indexer/services/comlink/public/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -874,6 +874,13 @@
],
"type": "string"
},
"PerpetualMarketType": {
"enum": [
"CROSS",
"ISOLATED"
],
"type": "string"
},
"PerpetualMarketResponseObject": {
"properties": {
"clobPairId": {
Expand Down Expand Up @@ -931,6 +938,9 @@
"subticksPerTick": {
"type": "number",
"format": "double"
},
"marketType": {
"$ref": "#/components/schemas/PerpetualMarketType"
}
},
"required": [
Expand All @@ -950,7 +960,8 @@
"tickSize",
"stepSize",
"stepBaseQuantums",
"subticksPerTick"
"subticksPerTick",
"marketType"
],
"type": "object",
"additionalProperties": false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ export function perpetualMarketToResponseObject(
stepSize: protocolTranslations.getStepSize(perpetualMarket),
stepBaseQuantums: perpetualMarket.stepBaseQuantums,
subticksPerTick: perpetualMarket.subticksPerTick,
marketType: perpetualMarket.marketType,
};
}

Expand Down
2 changes: 2 additions & 0 deletions indexer/services/comlink/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
OrderStatus,
OrderType,
PerpetualMarketStatus,
PerpetualMarketType,
PerpetualPositionFromDatabase,
PerpetualPositionStatus,
PositionSide,
Expand Down Expand Up @@ -267,6 +268,7 @@ export interface PerpetualMarketResponseObject {
stepSize: string;
stepBaseQuantums: number;
subticksPerTick: number;
marketType: PerpetualMarketType;
}

/* ------- ORDERBOOK TYPES ------- */
Expand Down
19 changes: 19 additions & 0 deletions indexer/services/ender/__tests__/helpers/indexer-proto-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ import {
PerpetualMarketCreateEventV1,
DeleveragingEventV1,
} from '@dydxprotocol-indexer/v4-protos';
import {
PerpetualMarketType,
} from '@dydxprotocol-indexer/v4-protos/build/codegen/dydxprotocol/indexer/protocol/v1/perpetual';
import { IHeaders, Message, ProducerRecord } from 'kafkajs';
import _ from 'lodash';

Expand Down Expand Up @@ -902,5 +905,21 @@ export function expectPerpetualMarket(
subticksPerTick: perpetual.subticksPerTick,
stepBaseQuantums: Number(perpetual.stepBaseQuantums),
liquidityTierId: perpetual.liquidityTier,
marketType: eventPerpetualMarketTypeToIndexerPerpetualMarketType(
perpetual.marketType,
),
}));
}

function eventPerpetualMarketTypeToIndexerPerpetualMarketType(
perpetualMarketType: PerpetualMarketType,
): string {
switch (perpetualMarketType) {
case PerpetualMarketType.PERPETUAL_MARKET_TYPE_CROSS:
return 'CROSS';
case PerpetualMarketType.PERPETUAL_MARKET_TYPE_ISOLATED:
return 'ISOLATED';
default:
throw new Error(`Unknown perpetual market type: ${perpetualMarketType}`);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,14 @@ import {
} from '../helpers/indexer-proto-helpers';
import { expectDidntLogError } from '../helpers/validator-helpers';
import { AssetValidator } from '../../src/validators/asset-validator';
import { createPostgresFunctions } from '../../src/helpers/postgres/postgres-functions';

describe('asset-validator', () => {
beforeAll(async () => {
await dbHelpers.migrate();
await createPostgresFunctions();
});

beforeEach(async () => {
await testMocks.seedData();
jest.spyOn(logger, 'error');
Expand All @@ -23,6 +29,11 @@ describe('asset-validator', () => {
jest.clearAllMocks();
});

afterAll(async () => {
await dbHelpers.teardown();
jest.resetAllMocks();
});

describe('validate', () => {
it('does not throw error on valid asset create event', () => {
const validator: AssetValidator = new AssetValidator(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ const HELPER_SCRIPTS: string[] = [
'dydx_uuid_from_trading_rewards_parts.sql',
'dydx_uuid_from_transaction_parts.sql',
'dydx_uuid_from_transfer_parts.sql',
'dydx_protocol_market_type_to_perpetual_market_type.sql',
];

const MAIN_SCRIPTS: string[] = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ BEGIN
perpetual_market_record."subticksPerTick" = (event_data->'subticksPerTick')::integer;
perpetual_market_record."stepBaseQuantums" = dydx_from_jsonlib_long(event_data->'stepBaseQuantums');
perpetual_market_record."liquidityTierId" = (event_data->'liquidityTier')::integer;
perpetual_market_record."marketType" = dydx_protocol_market_type_to_perpetual_market_type(event_data->'marketType');

INSERT INTO perpetual_markets VALUES (perpetual_market_record.*) RETURNING * INTO perpetual_market_record;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CREATE OR REPLACE FUNCTION dydx_protocol_market_type_to_perpetual_market_type(marketType jsonb)
RETURNS text AS $$

BEGIN
CASE marketType
WHEN '1'::jsonb THEN RETURN 'CROSS'; /** MARKET_TYPE_CROSS */
WHEN '2'::jsonb THEN RETURN 'ISOLATED'; /** MARKET_TYPE_ISOLATED */
ELSE RAISE EXCEPTION 'Invalid market type: %', marketType;
END CASE;
END;
$$ LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE;

0 comments on commit 56b7cce

Please sign in to comment.