From 3a1788fc7b3dda1c4e5ccd485c83f575fd1ec231 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Wed, 17 Jan 2024 10:29:57 -0800 Subject: [PATCH 01/11] bufferedAmount threshold uptick --- src/wsConnectionManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wsConnectionManager.ts b/src/wsConnectionManager.ts index 836f6dd..a189a82 100644 --- a/src/wsConnectionManager.ts +++ b/src/wsConnectionManager.ts @@ -103,7 +103,7 @@ async function main() { const subscribers = channelSubscribers.get(subscribedChannel); if (subscribers) { subscribers.forEach((ws) => { - if (ws.readyState === WebSocket.OPEN && ws.bufferedAmount < 100) + if (ws.readyState === WebSocket.OPEN && ws.bufferedAmount < 300000) ws.send( JSON.stringify({ channel: subscribedChannel, data: message }) ); From 65a6f38e312b2d9cf35f3f64a2559d9a1527a897 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Tue, 23 Jan 2024 13:36:30 -0800 Subject: [PATCH 02/11] logging change --- src/dlob-subscriber/DLOBSubscriberIO.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 6fad2a0..87aa4a9 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -149,9 +149,10 @@ export class DLOBSubscriberIO extends DLOBSubscriber { Math.abs(slot - l2Formatted['marketSlot']) > this.killSwitchSlotDiffThreshold ) { - console.log(`Killing process due to slot diffs: + console.log(`Killing process due to slot diffs for market ${marketName}: dlobProvider slot: ${slot} oracle slot: ${l2Formatted['oracleData']['slot']} + market slot: ${l2Formatted['marketSlot']} `); process.exit(1); } From 18ae1b7c9b2ff9b8db220a8547735c5a6cb28087 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Tue, 23 Jan 2024 14:05:42 -0800 Subject: [PATCH 03/11] disable market slot kill switch --- src/dlob-subscriber/DLOBSubscriberIO.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 87aa4a9..97b063f 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -145,9 +145,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber { if ( Math.abs(slot - parseInt(l2Formatted['oracleData']['slot'])) > - this.killSwitchSlotDiffThreshold || - Math.abs(slot - l2Formatted['marketSlot']) > - this.killSwitchSlotDiffThreshold + this.killSwitchSlotDiffThreshold ) { console.log(`Killing process due to slot diffs for market ${marketName}: dlobProvider slot: ${slot} From 54e815ebf25d60d1318dd573fdc090fdbbd3d527 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Thu, 1 Feb 2024 09:42:19 -0800 Subject: [PATCH 04/11] update always --- src/dlob-subscriber/DLOBSubscriberIO.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index a7cb9fe..bc3ce64 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -79,7 +79,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber { depth: -1, numVammOrders: 100, includeVamm, - updateOnChange: includeVamm, + updateOnChange: false, fallbackL2Generators: [], }); } @@ -90,7 +90,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber { marketName: market.marketName, depth: -1, includeVamm: false, - updateOnChange: true, + updateOnChange: false, fallbackL2Generators: [ config.spotMarketSubscribers[market.marketIndex].phoenix, config.spotMarketSubscribers[market.marketIndex].serum, From 1d4389345209d8f3dc2fd4f6e4a764785afeb79e Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Mon, 26 Feb 2024 12:28:53 -0800 Subject: [PATCH 05/11] more robust promise.all --- src/index.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index e05e454..764b6e2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1000,6 +1000,8 @@ const main = async (): Promise => { return; } + let hasError = false; + let errorMessage = ''; const l2s = await Promise.all( normedParams.map(async (normedParam) => { const { normedMarketType, normedMarketIndex, error } = @@ -1011,7 +1013,8 @@ const main = async (): Promise => { normedParam['marketName'] as string ); if (error) { - res.status(400).send(`Bad Request: ${error}`); + hasError = true; + errorMessage = `Bad Request: ${error}`; return; } @@ -1136,6 +1139,11 @@ const main = async (): Promise => { }) ); + if (hasError) { + res.status(400).send(errorMessage); + return; + } + res.writeHead(200); res.end(JSON.stringify({ l2s })); } catch (err) { From b96ee46eee6994a659fdcafed1152f42a2babfdb Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 22:03:30 +0000 Subject: [PATCH 06/11] Bumping sdk dependency to 2.71.0-beta.4 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 21a1f53..d07e0a6 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.71.0-beta.3", + "@drift-labs/sdk": "2.71.0-beta.4", "@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 909b69a..1ed2331 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.71.0-beta.3": - version "2.71.0-beta.3" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.71.0-beta.3.tgz#bddb4c5a2c3661dd12e533b4450f97d03d698a9a" - integrity sha512-/MDv4678WGrgTKOMZlemvmCnT9Xs7gbQmY2wGQQN2umzXIa/ifCovD5kSNZcARlQuZltnLv8b8Hr98euzMt5aA== +"@drift-labs/sdk@2.71.0-beta.4": + version "2.71.0-beta.4" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.71.0-beta.4.tgz#e05b1ea2e9b3ea057dacdf1404aad4c6c4d2d440" + integrity sha512-l6W9N+CAHdhP5v8kS0IAPvF83liVeR9iD5dhWEbKukab0OAUGGyeKc2Dfe3UOvr7EIDlxln45Y+D1XiHX/om1w== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From a6483a8a627ecacd1c2664cf007d66e2168f33a8 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 19:37:57 +0000 Subject: [PATCH 07/11] Bumping sdk dependency to 2.71.0-beta.5 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d07e0a6..ae2207a 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.71.0-beta.4", + "@drift-labs/sdk": "2.71.0-beta.5", "@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 1ed2331..e146306 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.71.0-beta.4": - version "2.71.0-beta.4" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.71.0-beta.4.tgz#e05b1ea2e9b3ea057dacdf1404aad4c6c4d2d440" - integrity sha512-l6W9N+CAHdhP5v8kS0IAPvF83liVeR9iD5dhWEbKukab0OAUGGyeKc2Dfe3UOvr7EIDlxln45Y+D1XiHX/om1w== +"@drift-labs/sdk@2.71.0-beta.5": + version "2.71.0-beta.5" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.71.0-beta.5.tgz#28c01f80c46c2a532d77a2b44c1e3dd8f56fddcf" + integrity sha512-mqx22zulCbEnPRKXk56KCx8MDsLLCtBuOqD1We965H39EFlU2YzNMRdApFOWxEW91Fel+494FtLaS0GRzFS9hA== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From b0f652bdf58a787b5791c4e0121f35949855663e Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 20:49:12 +0000 Subject: [PATCH 08/11] Bumping sdk dependency to 2.72.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 ae2207a..99ec14a 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.71.0-beta.5", + "@drift-labs/sdk": "2.72.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 e146306..a67094b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.71.0-beta.5": - version "2.71.0-beta.5" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.71.0-beta.5.tgz#28c01f80c46c2a532d77a2b44c1e3dd8f56fddcf" - integrity sha512-mqx22zulCbEnPRKXk56KCx8MDsLLCtBuOqD1We965H39EFlU2YzNMRdApFOWxEW91Fel+494FtLaS0GRzFS9hA== +"@drift-labs/sdk@2.72.0-beta.0": + version "2.72.0-beta.0" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.72.0-beta.0.tgz#749f3267959896a8528dfb2b41acba76eec02c97" + integrity sha512-3bJzuX9h0u/NqLt82sGG4jZHBgM3NuHBgCwfH0+Ac6u3rEibmJRmZM3qAqlNE8w/JU2tKgr3hAT7qXLkHp0xrA== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From b717c9f9ecbbfd15233a1a6ae3f86662193708e9 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Tue, 12 Mar 2024 16:01:57 -0400 Subject: [PATCH 09/11] ignore prelaunch for killing process --- src/dlob-subscriber/DLOBSubscriberIO.ts | 57 ++++++------------------- src/index.ts | 2 +- 2 files changed, 14 insertions(+), 45 deletions(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 5cff973..bcedda3 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -46,6 +46,8 @@ export class DLOBSubscriberIO extends DLOBSubscriber { Map >; + public skipSlotStalenessCheckMarkets = new Set(); + constructor( config: DLOBSubscriptionConfig & { redisClient: RedisClient; @@ -73,6 +75,10 @@ export class DLOBSubscriberIO extends DLOBSubscriber { market.marketIndex ); const includeVamm = !isVariant(perpMarket.status, 'ammPaused'); + const oracleSource = perpMarket.amm.oracleSource; + if (isVariant(oracleSource, 'prelaunch')) { + this.skipSlotStalenessCheckMarkets.add(market.marketIndex); + } this.marketArgs.push({ marketIndex: market.marketIndex, @@ -175,9 +181,13 @@ export class DLOBSubscriberIO extends DLOBSubscriber { ); // Check if slot diffs are too large for oracle + const skipSlotCheck = + marketType === 'perp' && + this.skipSlotStalenessCheckMarkets.has(marketArgs.marketIndex); if ( Math.abs(slot - parseInt(l2Formatted['oracleData']['slot'])) > - this.killSwitchSlotDiffThreshold + this.killSwitchSlotDiffThreshold && + !skipSlotCheck ) { console.log(`Killing process due to slot diffs for market ${marketName}: dlobProvider slot: ${slot} @@ -194,7 +204,8 @@ export class DLOBSubscriberIO extends DLOBSubscriber { if ( lastMarketSlotAndTime && l2Formatted['marketSlot'] === lastMarketSlotAndTime.slot && - Date.now() - lastMarketSlotAndTime.ts > MAKRET_STALENESS_THRESHOLD + Date.now() - lastMarketSlotAndTime.ts > MAKRET_STALENESS_THRESHOLD && + !skipSlotCheck ) { console.log(`Killing process due to same slot for market ${marketName} after > ${MAKRET_STALENESS_THRESHOLD}ms: dlobProvider slot: ${slot} @@ -329,48 +340,6 @@ export class DLOBSubscriberIO extends DLOBSubscriber { marketArgs.marketIndex ); - // Check if slot diffs are too large for oracle - if ( - Math.abs(slot - parseInt(l3['oracleData']['slot'])) > - this.killSwitchSlotDiffThreshold - ) { - console.log(`Killing process due to slot diffs for market ${marketName}: - dlobProvider slot: ${slot} - oracle slot: ${l3['oracleData']['slot']} - `); - process.exit(1); - } - - // Check if times and slots are too different for market - const MAKRET_STALENESS_THRESHOLD = - marketType === 'perp' - ? PERP_MAKRET_STALENESS_THRESHOLD - : SPOT_MAKRET_STALENESS_THRESHOLD; - if ( - lastMarketSlotAndTime && - l3['marketSlot'] === lastMarketSlotAndTime.slot && - Date.now() - lastMarketSlotAndTime.ts > MAKRET_STALENESS_THRESHOLD - ) { - console.log(`Killing process due to same slot for market ${marketName} after > ${MAKRET_STALENESS_THRESHOLD}ms: - dlobProvider slot: ${slot} - market slot: ${l3['marketSlot']} - `); - process.exit(1); - } else if ( - lastMarketSlotAndTime && - l3['marketSlot'] !== lastMarketSlotAndTime.slot - ) { - console.log( - `Updating market slot for ${marketArgs.marketName} with slot ${l3['marketSlot']}` - ); - this.lastMarketSlotMap - .get(marketArgs.marketType) - .set(marketArgs.marketIndex, { - slot: l3['marketSlot'], - ts: Date.now(), - }); - } - this.redisClient.client.set( `last_update_orderbook_l3_${marketType}_${marketArgs.marketIndex}`, JSON.stringify(l3) diff --git a/src/index.ts b/src/index.ts index 8e3768e..634a10c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -276,7 +276,7 @@ const main = async (): Promise => { commitment: stateCommitment, }; slotSubscriber = new SlotSubscriber(connection, { - resubTimeoutMs: 5000 + resubTimeoutMs: 5000, }); await slotSubscriber.subscribe(); } From 99883410a0e306b26982b6abf0934a7da3357601 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 20:52:23 +0000 Subject: [PATCH 10/11] Bumping sdk dependency to 2.72.0-beta.1 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 99ec14a..a7dec89 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.72.0-beta.0", + "@drift-labs/sdk": "2.72.0-beta.1", "@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 a67094b..080757e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.72.0-beta.0": - version "2.72.0-beta.0" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.72.0-beta.0.tgz#749f3267959896a8528dfb2b41acba76eec02c97" - integrity sha512-3bJzuX9h0u/NqLt82sGG4jZHBgM3NuHBgCwfH0+Ac6u3rEibmJRmZM3qAqlNE8w/JU2tKgr3hAT7qXLkHp0xrA== +"@drift-labs/sdk@2.72.0-beta.1": + version "2.72.0-beta.1" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.72.0-beta.1.tgz#bee1269f877970f10e53f651d19aced79e75a0bc" + integrity sha512-Fgz2WFoTxFetBNBEdzPSKi6IbGnUD6zo5EqUZqW3rICJcpjvjJazKNe9NnYy6q753wnMiYcCwhn29IxcIhAl0g== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 691c23f3e620ad1502bb55b7b7f98ee2391c135c Mon Sep 17 00:00:00 2001 From: wphan Date: Wed, 13 Mar 2024 09:53:54 -0400 Subject: [PATCH 11/11] add path to cacheHitCounter metric --- src/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/index.ts b/src/index.ts index 634a10c..c54604d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -785,6 +785,7 @@ const main = async (): Promise => { if (topMakers) { cacheHitCounter.add(1, { miss: false, + path: req.baseUrl + req.path, }); res.writeHead(200); res.end(JSON.stringify(topMakers)); @@ -838,6 +839,7 @@ const main = async (): Promise => { topMakers = [...topMakersSet]; cacheHitCounter.add(1, { miss: true, + path: req.baseUrl + req.path, }); res.writeHead(200); res.end(JSON.stringify(topMakers)); @@ -950,6 +952,7 @@ const main = async (): Promise => { if (l2Formatted) { cacheHitCounter.add(1, { miss: false, + path: req.baseUrl + req.path, }); res.writeHead(200); res.end(l2Formatted); @@ -986,6 +989,7 @@ const main = async (): Promise => { cacheHitCounter.add(1, { miss: true, + path: req.baseUrl + req.path, }); res.writeHead(200); res.end(JSON.stringify(l2Formatted)); @@ -1127,6 +1131,7 @@ const main = async (): Promise => { if (l2Formatted) { cacheHitCounter.add(1, { miss: false, + path: req.baseUrl + req.path, }); return l2Formatted; } @@ -1161,6 +1166,7 @@ const main = async (): Promise => { } cacheHitCounter.add(1, { miss: true, + path: req.baseUrl + req.path, }); return l2Formatted; }) @@ -1209,6 +1215,7 @@ const main = async (): Promise => { ) { cacheHitCounter.add(1, { miss: false, + path: req.baseUrl + req.path, }); res.writeHead(200); res.end(redisL3); @@ -1216,6 +1223,7 @@ const main = async (): Promise => { } else { cacheHitCounter.add(1, { miss: true, + path: req.baseUrl + req.path, }); } }