diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index a61d2d7..9d2e200 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -115,5 +115,9 @@ export class DLOBSubscriberIO extends DLOBSubscriber { `orderbook_${marketType}_${l2Args.marketIndex}`, JSON.stringify(l2Formatted) ); + this.redisClient.client.set( + `last_update_orderbook_${marketType}_${l2Args.marketIndex}`, + JSON.stringify(l2Formatted) + ); } } diff --git a/src/index.ts b/src/index.ts index 6b16267..8ff170f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -184,7 +184,6 @@ const main = async () => { }); const dlobCoder = DLOBOrdersCoder.create(); - const slotSubscriber = new SlotSubscriber(connection, {}); const lamportsBalance = await connection.getBalance(wallet.publicKey); logger.info( @@ -199,12 +198,11 @@ const main = async () => { logger.error(e); }); - await slotSubscriber.subscribe(); - slotSubscriber.eventEmitter.on('newSlot', async (slot: number) => { + setInterval(async () => { await lastSlotReceivedMutex.runExclusive(async () => { - lastSlotReceived = slot; + lastSlotReceived = bulkAccountLoader.getSlot(); }); - }); + }, ORDERBOOK_UPDATE_INTERVAL); const userMap = new UserMap( driftClient, @@ -217,7 +215,7 @@ const main = async () => { accountLoader: new BulkAccountLoader( connection, stateCommitment, - ORDERBOOK_UPDATE_INTERVAL * 10 + 0 ), }); await userStatsMap.subscribe(); @@ -225,7 +223,7 @@ const main = async () => { const dlobSubscriber = new DLOBSubscriber({ driftClient, dlobSource: userMap, - slotSource: slotSubscriber, + slotSource: bulkAccountLoader, updateFrequency: ORDERBOOK_UPDATE_INTERVAL, }); await dlobSubscriber.subscribe(); @@ -255,7 +253,7 @@ const main = async () => { // object with userAccount key and orders object serialized const orders: Array = []; const oracles: Array = []; - const slot = slotSubscriber.currentSlot; + const slot = bulkAccountLoader.getSlot(); for (const market of driftClient.getPerpMarketAccounts()) { const oracle = driftClient.getOracleDataForPerpMarket( @@ -299,7 +297,7 @@ const main = async () => { app.get('/orders/json', async (_req, res, next) => { try { // object with userAccount key and orders object serialized - const slot = slotSubscriber.currentSlot; + const slot = bulkAccountLoader.getSlot(); const orders: Array = []; const oracles: Array = []; for (const market of driftClient.getPerpMarketAccounts()) { @@ -462,7 +460,7 @@ const main = async () => { res.end( JSON.stringify({ - slot: slotSubscriber.currentSlot, + slot: bulkAccountLoader.getSlot(), data: dlobCoder.encode(dlobOrders).toString('base64'), }) ); @@ -551,7 +549,7 @@ const main = async () => { .getDLOB() .getRestingLimitBids( normedMarketIndex, - slotSubscriber.getSlot(), + bulkAccountLoader.getSlot(), normedMarketType, oracle ) @@ -562,7 +560,7 @@ const main = async () => { .getDLOB() .getRestingLimitAsks( normedMarketIndex, - slotSubscriber.getSlot(), + bulkAccountLoader.getSlot(), normedMarketType, oracle ) diff --git a/src/publishers/tradesPublisher.ts b/src/publishers/tradesPublisher.ts index 513de34..5feaaf1 100644 --- a/src/publishers/tradesPublisher.ts +++ b/src/publishers/tradesPublisher.ts @@ -17,6 +17,7 @@ import { QUOTE_PRECISION, PRICE_PRECISION, getVariant, + ZERO, } from '@drift-labs/sdk'; import { logger, setLogLevel } from '../utils/logger'; @@ -181,7 +182,10 @@ const main = async () => { slot: fill.slot, action: 'fill', actionExplanation: getVariant(fill.actionExplanation), - referrerReward: convertToNumber(fill.referrerReward, QUOTE_PRECISION), + referrerReward: convertToNumber( + fill.referrerReward ?? ZERO, + QUOTE_PRECISION + ), }; }) ) diff --git a/src/wsConnectionManager.ts b/src/wsConnectionManager.ts index 4263e20..8b7283f 100644 --- a/src/wsConnectionManager.ts +++ b/src/wsConnectionManager.ts @@ -93,12 +93,6 @@ async function main() { subscribers.forEach((ws) => { ws.send(JSON.stringify({ channel: subscribedChannel, data: message })); }); - - // Save and persist last message - lastMessageRetriever.client.set( - `last_update_${subscribedChannel}`, - message - ); }); redisClient.client.on('error', (error) => {