From e4d1477b08f8887a562424428380d6cb37fd3f3b Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 13:28:13 +0000 Subject: [PATCH 1/6] Bumping sdk dependency to 2.67.0-beta.7 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f4d7094..e0818fd 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "Apache-2.0", "dependencies": { "@coral-xyz/anchor": "^0.29.0", - "@drift-labs/sdk": "2.67.0-beta.6", + "@drift-labs/sdk": "2.67.0-beta.7", "@opentelemetry/api": "^1.1.0", "@opentelemetry/auto-instrumentations-node": "^0.31.1", "@opentelemetry/exporter-prometheus": "^0.31.0", diff --git a/yarn.lock b/yarn.lock index def8378..64d2e87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.67.0-beta.6": - version "2.67.0-beta.6" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.67.0-beta.6.tgz#3c3109eb1b86b58023b6376dc50607d56af851f9" - integrity sha512-cBYk2J9wY8XYBy0m7MvPeq6yoWTWYxKwZPPSJApFeiLLt8pQkAFSyTMZUhPhDFtEXkHBiCHaqOdIjGyQww6qrg== +"@drift-labs/sdk@2.67.0-beta.7": + version "2.67.0-beta.7" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.67.0-beta.7.tgz#71c325753dc7fc37f22407be2cb93897fc459577" + integrity sha512-2rgqpMB8kc55u3T0RIykwFDMSmqEMTvka3yqaqQvEUB8I7CsfTrJHzrGKO3qByzUwVgBBBvP2GrepMnpoTcTDg== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From e0e3a568c05637b1beb5b5172c64e16bfe1b30ce Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:35:50 +0000 Subject: [PATCH 2/6] Bumping sdk dependency to 2.68.0-beta.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e0818fd..5a230b5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "Apache-2.0", "dependencies": { "@coral-xyz/anchor": "^0.29.0", - "@drift-labs/sdk": "2.67.0-beta.7", + "@drift-labs/sdk": "2.68.0-beta.0", "@opentelemetry/api": "^1.1.0", "@opentelemetry/auto-instrumentations-node": "^0.31.1", "@opentelemetry/exporter-prometheus": "^0.31.0", diff --git a/yarn.lock b/yarn.lock index 64d2e87..f3b1de9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.67.0-beta.7": - version "2.67.0-beta.7" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.67.0-beta.7.tgz#71c325753dc7fc37f22407be2cb93897fc459577" - integrity sha512-2rgqpMB8kc55u3T0RIykwFDMSmqEMTvka3yqaqQvEUB8I7CsfTrJHzrGKO3qByzUwVgBBBvP2GrepMnpoTcTDg== +"@drift-labs/sdk@2.68.0-beta.0": + version "2.68.0-beta.0" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.68.0-beta.0.tgz#a0a1e5632804e6c826bd71f6899f470f0a87df86" + integrity sha512-q6HfkDk5P6+UCnEsFS/7hdoLxzi0uzvDzup71l6gXC7iP7GdRUmkciOTZxKn7JJqRBqnNkiclTicpc2bcyu7VQ== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 823581c58d1e4e2b5d36a3392627ef3f91c9ee6c Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:35:51 +0000 Subject: [PATCH 3/6] Bumping sdk dependency to 2.69.0-beta.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5a230b5..ca74e54 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "Apache-2.0", "dependencies": { "@coral-xyz/anchor": "^0.29.0", - "@drift-labs/sdk": "2.68.0-beta.0", + "@drift-labs/sdk": "2.69.0-beta.0", "@opentelemetry/api": "^1.1.0", "@opentelemetry/auto-instrumentations-node": "^0.31.1", "@opentelemetry/exporter-prometheus": "^0.31.0", diff --git a/yarn.lock b/yarn.lock index f3b1de9..3d519e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.68.0-beta.0": - version "2.68.0-beta.0" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.68.0-beta.0.tgz#a0a1e5632804e6c826bd71f6899f470f0a87df86" - integrity sha512-q6HfkDk5P6+UCnEsFS/7hdoLxzi0uzvDzup71l6gXC7iP7GdRUmkciOTZxKn7JJqRBqnNkiclTicpc2bcyu7VQ== +"@drift-labs/sdk@2.69.0-beta.0": + version "2.69.0-beta.0" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.69.0-beta.0.tgz#3e540e594a43f77120e6451749159ac3f0faa72b" + integrity sha512-9JQcw/BxHEh9TpCKg/ahyj3cb7k4ecudtJ6McGuzR2OQE8Nfvtp3wIA/Q1cl604V76FJTLsGVB+4nGcW7KVnsQ== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 9c63ffb4a9a2fbd4ac176ab8ef8c40acdc0d7287 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Wed, 6 Mar 2024 11:14:47 -0800 Subject: [PATCH 4/6] cache top makers --- src/dlob-subscriber/DLOBSubscriberIO.ts | 30 +++++++++++ src/index.ts | 67 +++++++++++++++++-------- 2 files changed, 76 insertions(+), 21 deletions(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 64d2a54..5cff973 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -4,6 +4,7 @@ import { DLOBSubscriptionConfig, L2OrderBookGenerator, MarketType, + PositionDirection, groupL2, isVariant, } from '@drift-labs/sdk'; @@ -248,6 +249,35 @@ export class DLOBSubscriberIO extends DLOBSubscriber { `last_update_orderbook_${marketType}_${marketArgs.marketIndex}_depth_5`, JSON.stringify(l2Formatted_depth5) ); + + const oraclePriceData = + marketType === 'spot' + ? this.driftClient.getOracleDataForSpotMarket(marketArgs.marketIndex) + : this.driftClient.getOracleDataForPerpMarket(marketArgs.marketIndex); + const bids = this.dlob + .getBestMakers({ + marketIndex: marketArgs.marketIndex, + marketType: marketArgs.marketType, + direction: PositionDirection.LONG, + slot: slot, + oraclePriceData, + numMakers: 4, + }) + .map((x) => x.toString()); + const asks = this.dlob + .getBestMakers({ + marketIndex: marketArgs.marketIndex, + marketType: marketArgs.marketType, + direction: PositionDirection.SHORT, + slot, + oraclePriceData, + numMakers: 4, + }) + .map((x) => x.toString()); + this.redisClient.client.set( + `last_update_orderbook_best_makers_${marketType}_${marketArgs.marketIndex}`, + JSON.stringify({ bids, asks, slot }) + ); } getL3AndSendMsg(marketArgs: wsMarketArgs): void { diff --git a/src/index.ts b/src/index.ts index 8824173..b5b488a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,6 @@ import { DriftEnv, SlotSubscriber, Wallet, - getUserStatsAccountPublicKey, getVariant, initialize, isVariant, @@ -720,8 +719,7 @@ const main = async (): Promise => { marketIndex, marketType, side, // bid or ask - limit, // number of unique makers to return, if undefined will return all - includeUserStats, + limit, } = req.query; const { normedMarketType, normedMarketIndex, error } = validateDlobQuery( @@ -752,9 +750,46 @@ const main = async (): Promise => { return; } normedLimit = parseInt(limit as string); + } else { + normedLimit = 4; } - const topMakers = new Set(); + let topMakers: string[]; + if (useRedis) { + const redisClient = isVariant(normedMarketType, 'perp') + ? perpMarketRedisMap.get(normedMarketIndex).client + : spotMarketRedisMap.get(normedMarketIndex).client; + const redisResponse = await redisClient.client.get( + `last_update_orderbook_best_makers_${getVariant( + normedMarketType + )}_${marketIndex}` + ); + if (redisResponse) { + const parsedResponse = JSON.parse(redisResponse); + if ( + parsedResponse.slot && + Math.abs(dlobProvider.getSlot() - parsedResponse.slot) < + SLOT_STALENESS_TOLERANCE + ) { + if (side === 'bid') { + topMakers = parsedResponse.bids; + } else { + topMakers = parsedResponse.asks; + } + } + } + } + + if (topMakers) { + cacheHitCounter.add(1, { + miss: false, + }); + res.writeHead(200); + res.end(JSON.stringify(topMakers)); + return; + } + + const topMakersSet = new Set(); let foundMakers = 0; const findMakers = async (sideGenerator: Generator) => { for (const side of sideGenerator) { @@ -763,23 +798,10 @@ const main = async (): Promise => { } if (side.userAccount) { const maker = side.userAccount; - if (topMakers.has(maker)) { + if (topMakersSet.has(maker)) { continue; } else { - if (`${includeUserStats}`.toLowerCase() === 'true') { - const userAccount = dlobProvider.getUserAccount( - new PublicKey(side.userAccount) - ); - topMakers.add([ - userAccount, - getUserStatsAccountPublicKey( - driftClient.program.programId, - userAccount.authority - ), - ]); - } else { - topMakers.add(side.userAccount); - } + topMakersSet.add(side.userAccount); foundMakers++; } } else { @@ -811,9 +833,12 @@ const main = async (): Promise => { ) ); } - + topMakers = [...topMakersSet]; + cacheHitCounter.add(1, { + miss: true, + }); res.writeHead(200); - res.end(JSON.stringify([...topMakers])); + res.end(JSON.stringify(topMakers)); } catch (err) { next(err); } From 4a97d2e56f2e089b79646fbbad4056517675d9a0 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Wed, 6 Mar 2024 11:34:49 -0800 Subject: [PATCH 5/6] correction to check for parsed response --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index b5b488a..3fa4e52 100644 --- a/src/index.ts +++ b/src/index.ts @@ -767,7 +767,7 @@ const main = async (): Promise => { if (redisResponse) { const parsedResponse = JSON.parse(redisResponse); if ( - parsedResponse.slot && + parsedResponse && Math.abs(dlobProvider.getSlot() - parsedResponse.slot) < SLOT_STALENESS_TOLERANCE ) { From e16951d9f1f3cf861f2ad1798e35147b5ae21ef4 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:59:13 +0000 Subject: [PATCH 6/6] Bumping sdk dependency to 2.70.0-beta.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ca74e54..cc0480a 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "Apache-2.0", "dependencies": { "@coral-xyz/anchor": "^0.29.0", - "@drift-labs/sdk": "2.69.0-beta.0", + "@drift-labs/sdk": "2.70.0-beta.0", "@opentelemetry/api": "^1.1.0", "@opentelemetry/auto-instrumentations-node": "^0.31.1", "@opentelemetry/exporter-prometheus": "^0.31.0", diff --git a/yarn.lock b/yarn.lock index 3d519e4..19c4daf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.69.0-beta.0": - version "2.69.0-beta.0" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.69.0-beta.0.tgz#3e540e594a43f77120e6451749159ac3f0faa72b" - integrity sha512-9JQcw/BxHEh9TpCKg/ahyj3cb7k4ecudtJ6McGuzR2OQE8Nfvtp3wIA/Q1cl604V76FJTLsGVB+4nGcW7KVnsQ== +"@drift-labs/sdk@2.70.0-beta.0": + version "2.70.0-beta.0" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.70.0-beta.0.tgz#fe142f269995572b6abddf5c559717a97ba3264c" + integrity sha512-OhAPdW66RokHH8VsMUMUFPS1BYqU98uCoNi3eBRX76h4vb4u/4luispAn+ln+8MSncAK4QuloBJYYGy/YIGT9Q== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2"