diff --git a/src/dlobProvider.ts b/src/dlobProvider.ts index bfa58f2..1470543 100644 --- a/src/dlobProvider.ts +++ b/src/dlobProvider.ts @@ -1,16 +1,19 @@ -import {DLOB, OrderSubscriber, UserAccount, UserMap} from "@drift-labs/sdk"; -import {PublicKey} from "@solana/web3.js"; +import { DLOB, OrderSubscriber, UserAccount, UserMap } from '@drift-labs/sdk'; +import { PublicKey } from '@solana/web3.js'; export type DLOBProvider = { - subscribe() : Promise; + subscribe(): Promise; getDLOB(slot: number): Promise; getUniqueAuthorities(): PublicKey[]; - getUserAccounts(): Generator<{userAccount: UserAccount, publicKey: PublicKey}>; + getUserAccounts(): Generator<{ + userAccount: UserAccount; + publicKey: PublicKey; + }>; getUserAccount(publicKey: PublicKey): UserAccount | undefined; size(): number; -} +}; -export function getDLOBProviderFromUserMap(userMap:UserMap) : DLOBProvider { +export function getDLOBProviderFromUserMap(userMap: UserMap): DLOBProvider { return { subscribe: async () => { await userMap.subscribe(); @@ -21,9 +24,12 @@ export function getDLOBProviderFromUserMap(userMap:UserMap) : DLOBProvider { getUniqueAuthorities: () => { return userMap.getUniqueAuthorities(); }, - getUserAccounts: function*() { + getUserAccounts: function* () { for (const user of userMap.values()) { - yield {userAccount: user.getUserAccount(), publicKey: user.getUserAccountPublicKey()}; + yield { + userAccount: user.getUserAccount(), + publicKey: user.getUserAccountPublicKey(), + }; } }, getUserAccount: (publicKey) => { @@ -31,11 +37,13 @@ export function getDLOBProviderFromUserMap(userMap:UserMap) : DLOBProvider { }, size: () => { return userMap.size(); - } + }, }; } -export function getDLOBProviderFromOrderSubscriber(orderSubscriber: OrderSubscriber) : DLOBProvider { +export function getDLOBProviderFromOrderSubscriber( + orderSubscriber: OrderSubscriber +): DLOBProvider { return { subscribe: async () => { await orderSubscriber.subscribe(); @@ -50,16 +58,20 @@ export function getDLOBProviderFromOrderSubscriber(orderSubscriber: OrderSubscri } return Array.from(authorities.values()); }, - getUserAccounts: function*() { - for (const [key, {userAccount}] of orderSubscriber.usersAccounts.entries()) { - yield {userAccount: userAccount, publicKey: new PublicKey(key)}; + getUserAccounts: function* () { + for (const [ + key, + { userAccount }, + ] of orderSubscriber.usersAccounts.entries()) { + yield { userAccount: userAccount, publicKey: new PublicKey(key) }; } }, getUserAccount: (publicKey) => { - return orderSubscriber.usersAccounts.get(publicKey.toString())?.userAccount; + return orderSubscriber.usersAccounts.get(publicKey.toString()) + ?.userAccount; }, size(): number { return orderSubscriber.usersAccounts.size; - } + }, }; } diff --git a/src/index.ts b/src/index.ts index ad00bb5..c960e32 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,7 +47,11 @@ import { sleep, validateDlobQuery, } from './utils/utils'; -import {DLOBProvider, getDLOBProviderFromOrderSubscriber, getDLOBProviderFromUserMap} from "./dlobProvider"; +import { + DLOBProvider, + getDLOBProviderFromOrderSubscriber, + getDLOBProviderFromUserMap, +} from './dlobProvider'; require('dotenv').config(); const driftEnv = (process.env.ENV || 'devnet') as DriftEnv; @@ -59,7 +63,8 @@ const stateCommitment: Commitment = 'processed'; const serverPort = process.env.PORT || 6969; export const ORDERBOOK_UPDATE_INTERVAL = 1000; const useWebsocket = process.env.USE_WEBSOCKET?.toLowerCase() === 'true'; -const useOrderSubscriber = process.env.USE_ORDER_SUBSCRIBER?.toLowerCase() === 'true'; +const useOrderSubscriber = + process.env.USE_ORDER_SUBSCRIBER?.toLowerCase() === 'true'; const rateLimitCallsPerSecond = process.env.RATE_LIMIT_CALLS_PER_SECOND ? parseInt(process.env.RATE_LIMIT_CALLS_PER_SECOND) @@ -224,17 +229,17 @@ const main = async () => { env: driftEnv, }); - let dlobProvider : DLOBProvider; + let dlobProvider: DLOBProvider; if (useOrderSubscriber) { let subscriptionConfig; if (useWebsocket) { subscriptionConfig = { - type: "websocket", + type: 'websocket', }; } else { subscriptionConfig = { - type: "polling", - frequency: ORDERBOOK_UPDATE_INTERVAL + type: 'polling', + frequency: ORDERBOOK_UPDATE_INTERVAL, }; } @@ -275,7 +280,9 @@ const main = async () => { logger.info(`Initializing DLOB Provider...`); const initUserMapStart = Date.now(); await dlobProvider.subscribe(); - logger.info(`dlob provider initialized in ${Date.now() - initUserMapStart} ms`); + logger.info( + `dlob provider initialized in ${Date.now() - initUserMapStart} ms` + ); logger.info(`dlob provider size ${dlobProvider.size()}`); const initUserStatsMapStarts = Date.now(); @@ -334,7 +341,7 @@ const main = async () => { }); } - for (const {userAccount, publicKey} of dlobProvider.getUserAccounts()) { + for (const { userAccount, publicKey } of dlobProvider.getUserAccounts()) { for (const order of userAccount.orders) { if (isVariant(order.status, 'init')) { continue; @@ -387,7 +394,7 @@ const main = async () => { } oracles.push(oracleHuman); } - for (const {userAccount, publicKey} of dlobProvider.getUserAccounts()) { + for (const { userAccount, publicKey } of dlobProvider.getUserAccounts()) { for (const order of userAccount.orders) { if (isVariant(order.status, 'init')) { continue; @@ -449,7 +456,7 @@ const main = async () => { try { const dlobOrders: DLOBOrders = []; - for (const {userAccount, publicKey} of dlobProvider.getUserAccounts()) { + for (const { userAccount, publicKey } of dlobProvider.getUserAccounts()) { for (const order of userAccount.orders) { if (isVariant(order.status, 'init')) { continue; @@ -497,7 +504,7 @@ const main = async () => { const dlobOrders: DLOBOrders = []; - for (const {userAccount, publicKey} of dlobProvider.getUserAccounts()) { + for (const { userAccount, publicKey } of dlobProvider.getUserAccounts()) { for (const order of userAccount.orders) { if (isVariant(order.status, 'init')) { continue; @@ -584,7 +591,9 @@ const main = async () => { continue; } else { if (`${includeUserStats}`.toLowerCase() === 'true') { - const userAccount = dlobProvider.getUserAccount(side.userAccount); + const userAccount = dlobProvider.getUserAccount( + side.userAccount + ); const userStats = await userStatsMap.mustGet( userAccount.authority.toBase58() ); diff --git a/src/publishers/dlobPublisher.ts b/src/publishers/dlobPublisher.ts index a9d2a3e..3ba8e6c 100644 --- a/src/publishers/dlobPublisher.ts +++ b/src/publishers/dlobPublisher.ts @@ -9,14 +9,20 @@ import { SlotSubscriber, UserMap, Wallet, - BulkAccountLoader, OrderSubscriber, SlotSource, + BulkAccountLoader, + OrderSubscriber, + SlotSource, } from '@drift-labs/sdk'; import { logger, setLogLevel } from '../utils/logger'; import { sleep } from '../utils/utils'; import { DLOBSubscriberIO } from '../dlob-subscriber/DLOBSubscriberIO'; import { RedisClient } from '../utils/redisClient'; -import {DLOBProvider, getDLOBProviderFromOrderSubscriber, getDLOBProviderFromUserMap} from "../dlobProvider"; +import { + DLOBProvider, + getDLOBProviderFromOrderSubscriber, + getDLOBProviderFromUserMap, +} from '../dlobProvider'; require('dotenv').config(); const driftEnv = (process.env.ENV || 'devnet') as DriftEnv; @@ -38,7 +44,8 @@ setLogLevel(opts.debug ? 'debug' : 'info'); const endpoint = process.env.ENDPOINT; const wsEndpoint = process.env.WS_ENDPOINT; -const useOrderSubscriber = process.env.USE_ORDER_SUBSCRIBER?.toLowerCase() === 'true'; +const useOrderSubscriber = + process.env.USE_ORDER_SUBSCRIBER?.toLowerCase() === 'true'; logger.info(`RPC endpoint: ${endpoint}`); logger.info(`WS endpoint: ${wsEndpoint}`); @@ -85,13 +92,13 @@ const main = async () => { }); let slotSource: SlotSource; - let dlobProvider : DLOBProvider; + let dlobProvider: DLOBProvider; if (useOrderSubscriber) { const orderSubscriber = new OrderSubscriber({ driftClient, subscriptionConfig: { - type: "polling", - frequency: ORDERBOOK_UPDATE_INTERVAL + type: 'polling', + frequency: ORDERBOOK_UPDATE_INTERVAL, }, });