From 24adb6cb976d4c72105289218c18560609ec90a5 Mon Sep 17 00:00:00 2001 From: dydxwill <119354122+dydxwill@users.noreply.github.com> Date: Thu, 21 Dec 2023 14:33:24 -0800 Subject: [PATCH] remove adjusted IMF calculation (#903) --- .../comlink/__tests__/lib/helpers.test.ts | 67 ++++--------------- indexer/services/comlink/src/lib/helpers.ts | 66 ++++++------------ 2 files changed, 32 insertions(+), 101 deletions(-) diff --git a/indexer/services/comlink/__tests__/lib/helpers.test.ts b/indexer/services/comlink/__tests__/lib/helpers.test.ts index 8d3badf90d..9d32f43c45 100644 --- a/indexer/services/comlink/__tests__/lib/helpers.test.ts +++ b/indexer/services/comlink/__tests__/lib/helpers.test.ts @@ -35,7 +35,7 @@ import { filterAssetPositions, filterPositionsByLatestEventIdPerPerpetual, getFundingIndexMaps, - getAdjustedMarginFraction, + getMarginFraction, getSignedNotionalAndRisk, getTotalUnsettledFunding, getPerpetualPositionsWithUpdatedFunding, @@ -224,63 +224,22 @@ describe('helpers', () => { ); }); - it.each([ - ['less than base', 20, 0.05], - ['base', 1_000_000, 0.05], - ['greater than base', 4_000_000, 0.1], - ['max', 400_000_000, 1], - ['greater than max', 4_000_000_000, 1], - ])('getAdjustedInitialMarginFraction: %s', async ( - _name: string, - notionalValue: number, - expectedResult: number, - ) => { + it('maintenance fraction', async () => { const liquidityTierFromDatabase: LiquidityTiersFromDatabase = await LiquidityTiersTable.create(defaultLiquidityTier); - const positionNotional: Big = Big(notionalValue); expect( - getAdjustedMarginFraction( - { liquidityTier: liquidityTierFromDatabase, positionNotional, initial: true }, + getMarginFraction( + { liquidityTier: liquidityTierFromDatabase, initial: true }, ), - ).toEqual(Big(expectedResult)); - }); - - it.each([ - ['less than base', 20, 0.03], - ['base', 1_000_000, 0.03], - ['greater than base', 4_000_000, 0.06], - ['greater than max', 4_000_000_000, 1], - ])('getAdjustedMaintenanceMarginFraction: %s', async ( - _name: string, - notionalValue: number, - expectedResult: number, - ) => { - const liquidityTierFromDatabase: LiquidityTiersFromDatabase = await - LiquidityTiersTable.create(defaultLiquidityTier); - const positionNotional: Big = Big(notionalValue); + ).toEqual(Big('0.05')); expect( - getAdjustedMarginFraction( - { liquidityTier: liquidityTierFromDatabase, positionNotional, initial: false }, + getMarginFraction( + { liquidityTier: liquidityTierFromDatabase, initial: false }, ), - ).toEqual(Big(expectedResult)); + ).toEqual(Big('0.03')); }); - it.each([ - ['less than base', 20, 200_000, 10_000, 6_000], - ['base', 100, 1_000_000, 50_000, 30_000], - ['greater than base', 400, 4_000_000, 400_000, 240_000], - ['max', 400_000, 4_000_000_000, 4_000_000_000, 4_000_000_000], - ['less than base SHORT', -20, -200_000, 10_000, 6_000], - ['base SHORT', -100, -1_000_000, 50_000, 30_000], - ['greater than base SHORT', -400, -4_000_000, 400_000, 240_000], - ['max SHORT', -400_000, -4_000_000_000, 4_000_000_000, 4_000_000_000], - ])('getSignedNotionalAndRisk: %s', async ( - _name: string, - size: number, - signedNotional: number, - initial: number, - maintenance: number, - ) => { + it('getSignedNotionalAndRisk', async () => { await LiquidityTiersTable.create(defaultLiquidityTier); await liquidityTierRefresher.updateLiquidityTiers(); const perpetualMarketFromDatabase: PerpetualMarketFromDatabase = { @@ -291,17 +250,17 @@ describe('helpers', () => { ...defaultMarket, oraclePrice: '10000', }; - const bigSize: Big = Big(size); + const bigSize: Big = Big('20'); expect( getSignedNotionalAndRisk( { perpetualMarket: perpetualMarketFromDatabase, market, size: bigSize }, ), ).toEqual( { - signedNotional: Big(signedNotional), + signedNotional: Big('200000'), individualRisk: { - initial: Big(initial), - maintenance: Big(maintenance), + initial: Big('10000'), + maintenance: Big('6000'), }, }, ); diff --git a/indexer/services/comlink/src/lib/helpers.ts b/indexer/services/comlink/src/lib/helpers.ts index 3be9ade854..cf260aaf97 100644 --- a/indexer/services/comlink/src/lib/helpers.ts +++ b/indexer/services/comlink/src/lib/helpers.ts @@ -32,7 +32,7 @@ import { PerpetualPositionWithFunding, Risk, } from '../types'; -import { ONE, ZERO, ZERO_USDC_POSITION } from './constants'; +import { ZERO, ZERO_USDC_POSITION } from './constants'; import { NotFoundError } from './errors'; /* ------- GENERIC HELPERS ------- */ @@ -237,71 +237,53 @@ export function getSignedNotionalAndRisk({ // Used to calculate risk / margin fracitons, as risk of a position should always be positive const positionNotional: Big = signedNotional.abs(); const { - adjustedInitialMarginFraction, - adjustedMaintenanceMarginFraction, + initialMarginFraction, + maintenanceMarginFraction, }: { - adjustedInitialMarginFraction: Big, - adjustedMaintenanceMarginFraction: Big, - } = getAdjustedMarginFractions({ - liquidityTier, - positionNotional, - }); + initialMarginFraction: Big, + maintenanceMarginFraction: Big, + } = getMarginFractions(liquidityTier); return { signedNotional, individualRisk: { - initial: positionNotional.times(adjustedInitialMarginFraction), - maintenance: positionNotional.times(adjustedMaintenanceMarginFraction), + initial: positionNotional.times(initialMarginFraction), + maintenance: positionNotional.times(maintenanceMarginFraction), }, }; } -export function getAdjustedMarginFractions( - { - liquidityTier, - positionNotional, - }: { - liquidityTier: LiquidityTiersFromDatabase, - positionNotional: Big, - }, -): { - adjustedInitialMarginFraction: Big, - adjustedMaintenanceMarginFraction: Big, +export function getMarginFractions(liquidityTier: LiquidityTiersFromDatabase): { + initialMarginFraction: Big, + maintenanceMarginFraction: Big, } { - const adjustedInitialMarginFraction: Big = getAdjustedMarginFraction({ + const initialMarginFraction: Big = getMarginFraction({ liquidityTier, - positionNotional, initial: true, }); - const adjustedMaintenanceMarginFraction: Big = getAdjustedMarginFraction({ + const maintenanceMarginFraction: Big = getMarginFraction({ liquidityTier, - positionNotional, initial: false, }); return { - adjustedInitialMarginFraction, - adjustedMaintenanceMarginFraction, + initialMarginFraction, + maintenanceMarginFraction, }; } /** - * Get the adjusted margin fraction for a position in a given perpetual market. - * Uses the `positionNotional`, `initialMarginFraction`, and `basePositionNotional` - * of the associated liquidity tier to calculate the adjusted initial margin fraction. + * Get the margin fraction for a position in a given perpetual market. * * @param liquidityTier The liquidity tier of the position. - * @param positionNotional The notional value of the position. * @param initial Whether to compute the initial margin fraction or the maintenance margin fraction. * - * @returns The adjusted margin fraction for the position in human-readable form. + * @returns The margin fraction for the position in human-readable form. */ -export function getAdjustedMarginFraction( +export function getMarginFraction( { liquidityTier, - positionNotional, initial, }: { liquidityTier: LiquidityTiersFromDatabase, - positionNotional: Big, initial: boolean, }, ): Big { @@ -313,17 +295,7 @@ export function getAdjustedMarginFraction( Number(liquidityTier.maintenanceFractionPpm), ), ); - - if (positionNotional.lte(liquidityTier.basePositionNotional)) { - return Big(margin); - } - const adjustedImf: Big = Big( - positionNotional.div(liquidityTier.basePositionNotional), - ).sqrt().times(margin); - if (adjustedImf.gte(ONE)) { - return ONE; - } - return adjustedImf; + return Big(margin); } /**