chore: reduce number of levels sent to UI

This commit is contained in:
Jack Waller
2025-06-10 17:08:27 +10:00
parent fb69314ab3
commit 6522990333
5 changed files with 879 additions and 5 deletions

View File

@@ -1,14 +1,17 @@
import {
BN,
BigNum,
DLOBSubscriber,
DLOBSubscriptionConfig,
DriftEnv,
L2OrderBookGenerator,
MarketType,
ONE,
Order,
OrderStatus,
OrderTriggerCondition,
OrderType,
PRICE_PRECISION,
PerpOperation,
PositionDirection,
ZERO,
@@ -21,6 +24,7 @@ import {
SubscriberLookup,
addMarketSlotToResponse,
addOracletoResponse,
aggregatePrices,
l2WithBNToStrings,
parsePositiveIntArray,
} from '../utils/utils';
@@ -35,10 +39,12 @@ type wsMarketArgs = {
numVammOrders?: number;
fallbackL2Generators?: L2OrderBookGenerator[];
updateOnChange?: boolean;
tickSize?: BN
};
require('dotenv').config();
export const GROUPING_OPTIONS = [1, 10, 100, 500, 1000];
const PERP_MAKRET_STALENESS_THRESHOLD = 30 * 60 * 1000;
const SPOT_MAKRET_STALENESS_THRESHOLD = 60 * 60 * 1000;
const STALE_ORACLE_REMOVE_VAMM_THRESHOLD = 160;
@@ -114,6 +120,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber {
includeVamm,
updateOnChange: false,
fallbackL2Generators: [],
tickSize: perpMarket?.amm?.orderTickSize ?? ONE
});
}
for (const market of config.spotMarketInfos) {
@@ -128,6 +135,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber {
config.spotMarketSubscribers[market.marketIndex].phoenix,
config.spotMarketSubscribers[market.marketIndex].openbook,
].filter((a) => !!a),
tickSize: config.spotMarketSubscribers[market.marketIndex].tickSize ?? ONE
});
}
}
@@ -391,6 +399,30 @@ export class DLOBSubscriberIO extends DLOBSubscriber {
}`,
l2Formatted_depth100
);
GROUPING_OPTIONS.forEach(group => {
const pricePrecision = BigNum.from(group).mul(marketArgs.tickSize).toNum()
const aggregatedBids = aggregatePrices(l2Formatted.bids, 'bid', pricePrecision)
.sort((a, b) => b[0] - a[0])
.slice(0, 20)
const aggregatedAsks = aggregatePrices(l2Formatted.asks, 'ask', pricePrecision)
.sort((a, b) => a[0] - b[0])
.slice(0, 20)
const l2Formatted_grouped20 = Object.assign({}, l2Formatted, {
bids: aggregatedBids,
asks: aggregatedAsks,
});
this.redisClient.publish(
`${clientPrefix}orderbook_${marketType}_${marketArgs.marketIndex}_grouped_${group}${
this.indicativeQuotesRedisClient ? '_indicative' : ''
}`,
l2Formatted_grouped20
);
})
if (!this.indicativeQuotesRedisClient) {
const bids = this.dlob