diff --git a/package.json b/package.json index f2eee8d..104a10b 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "rxjs": "^7.8.1", "socket.io-redis": "^6.1.1", "typescript": "4.5.4", + "undici": "^6.16.1", "winston": "^3.8.1", "ws": "^8.14.2" }, diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index e09fcf1..4da5c52 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -40,7 +40,7 @@ const PERP_MARKETS_TO_SKIP_SLOT_CHECK = { }; const SPOT_MARKETS_TO_SKIP_SLOT_CHECK = { - 'mainnet-beta': [6, 8, 10], + 'mainnet-beta': [6, 8, 10, 15], devnet: [], }; diff --git a/src/index.ts b/src/index.ts index 60ed13c..b3857af 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,6 +18,8 @@ import { isVariant, OrderSubscriber, MarketType, + PhoenixSubscriber, + BulkAccountLoader, } from '@drift-labs/sdk'; import { RedisClient, RedisClientPrefix } from '@drift/common'; @@ -37,7 +39,6 @@ import { SubscriberLookup, addOracletoResponse, errorHandler, - getPhoenixSubscriber, getSerumSubscriber, l2WithBNToStrings, normalizeBatchQueryParams, @@ -47,6 +48,13 @@ import { } from './utils/utils'; import FEATURE_FLAGS from './utils/featureFlags'; import { getDLOBProviderFromOrderSubscriber } from './dlobProvider'; +import { setGlobalDispatcher, Agent } from 'undici'; + +setGlobalDispatcher( + new Agent({ + connections: 200, + }) +); require('dotenv').config(); @@ -143,11 +151,20 @@ const initializeAllMarketSubscribers = async (driftClient: DriftClient) => { const phoenixConfigAccount = await driftClient.getPhoenixV1FulfillmentConfig(market.phoenixMarket); if (isVariant(phoenixConfigAccount.status, 'enabled')) { - const phoenixSubscriber = getPhoenixSubscriber( - driftClient, - market, - sdkConfig + const bulkAccountLoader = new BulkAccountLoader( + driftClient.connection, + stateCommitment, + 5_000 ); + const phoenixSubscriber = new PhoenixSubscriber({ + connection: driftClient.connection, + programId: new PublicKey(sdkConfig.PHOENIX), + marketAddress: phoenixConfigAccount.phoenixMarket, + accountSubscription: { + type: 'polling', + accountLoader: bulkAccountLoader, + }, + }); await phoenixSubscriber.subscribe(); // Test get L2 to know if we should add try { diff --git a/src/publishers/dlobPublisher.ts b/src/publishers/dlobPublisher.ts index 04159b4..546779c 100644 --- a/src/publishers/dlobPublisher.ts +++ b/src/publishers/dlobPublisher.ts @@ -17,13 +17,13 @@ import { OracleInfo, PerpMarketConfig, SpotMarketConfig, + PhoenixSubscriber, } from '@drift-labs/sdk'; import { RedisClient, RedisClientPrefix } from '@drift/common'; import { logger, setLogLevel } from '../utils/logger'; import { SubscriberLookup, - getPhoenixSubscriber, getSerumSubscriber, parsePositiveIntArray, sleep, @@ -42,6 +42,13 @@ import FEATURE_FLAGS from '../utils/featureFlags'; import { GeyserOrderSubscriber } from '../grpc/OrderSubscriberGRPC'; import express from 'express'; import { handleHealthCheck } from '../core/metrics'; +import { setGlobalDispatcher, Agent } from 'undici'; + +setGlobalDispatcher( + new Agent({ + connections: 200, + }) +); require('dotenv').config(); const stateCommitment: Commitment = 'confirmed'; @@ -205,11 +212,20 @@ const initializeAllMarketSubscribers = async (driftClient: DriftClient) => { logger.info( `Loading phoenix subscriber for spot market ${market.marketIndex}` ); - const phoenixSubscriber = getPhoenixSubscriber( - driftClient, - marketConfig, - sdkConfig + const bulkAccountLoader = new BulkAccountLoader( + driftClient.connection, + stateCommitment, + 2_000 ); + const phoenixSubscriber = new PhoenixSubscriber({ + connection: driftClient.connection, + programId: new PublicKey(sdkConfig.PHOENIX), + marketAddress: phoenixConfigAccount.phoenixMarket, + accountSubscription: { + type: 'polling', + accountLoader: bulkAccountLoader, + }, + }); await phoenixSubscriber.subscribe(); // Test get L2 to know if we should add try { diff --git a/src/publishers/priorityFeesPublisher.ts b/src/publishers/priorityFeesPublisher.ts index 241210d..e5ac810 100644 --- a/src/publishers/priorityFeesPublisher.ts +++ b/src/publishers/priorityFeesPublisher.ts @@ -16,6 +16,13 @@ import { logger, setLogLevel } from '../utils/logger'; import { sleep } from '../utils/utils'; import express from 'express'; // import { handleHealthCheck } from '../core/metrics'; +import { setGlobalDispatcher, Agent } from 'undici'; + +setGlobalDispatcher( + new Agent({ + connections: 200, + }) +); require('dotenv').config(); const stateCommitment: Commitment = 'confirmed'; diff --git a/src/publishers/tradesPublisher.ts b/src/publishers/tradesPublisher.ts index 186f8bb..a7a9982 100644 --- a/src/publishers/tradesPublisher.ts +++ b/src/publishers/tradesPublisher.ts @@ -25,6 +25,13 @@ import { RedisClient, RedisClientPrefix } from '@drift/common'; import { logger, setLogLevel } from '../utils/logger'; import { sleep } from '../utils/utils'; import { fromEvent, filter, map } from 'rxjs'; +import { setGlobalDispatcher, Agent } from 'undici'; + +setGlobalDispatcher( + new Agent({ + connections: 200, + }) +); require('dotenv').config(); const driftEnv = (process.env.ENV || 'devnet') as DriftEnv; diff --git a/yarn.lock b/yarn.lock index ace12c1..ef465e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5769,6 +5769,11 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici@^6.16.1: + version "6.16.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.16.1.tgz#ff8f49c56e5a8629f92ad2ce00d4841b9619b19e" + integrity sha512-NeNiTT7ixpeiL1qOIU/xTVpHpVP0svmI6PwoCKaMGaI5AsHOaRdwqU/f7Fi9eyU4u03nd5U/BC8wmRMnS9nqoA== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"