From 8b3e19bdf20d1c1158a35d63dbc126670ad434d7 Mon Sep 17 00:00:00 2001 From: wphan Date: Fri, 5 Jan 2024 15:34:32 -0800 Subject: [PATCH 01/14] stricter types in tradesPublisher --- src/publishers/tradesPublisher.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/publishers/tradesPublisher.ts b/src/publishers/tradesPublisher.ts index 6d82116..e25e3d4 100644 --- a/src/publishers/tradesPublisher.ts +++ b/src/publishers/tradesPublisher.ts @@ -19,6 +19,8 @@ import { getVariant, ZERO, BN, + OrderActionRecord, + Event, } from '@drift-labs/sdk'; import { logger, setLogLevel } from '../utils/logger'; @@ -130,7 +132,7 @@ const main = async () => { event.eventType === 'OrderActionRecord' && JSON.stringify(event.action) === JSON.stringify(OrderAction.FILL) ), - map((fill) => { + map((fill: Event) => { return { ts: fill.ts.toNumber(), marketIndex: fill.marketIndex, From 67319748703333500b775630330cad5ba45893f4 Mon Sep 17 00:00:00 2001 From: wphan Date: Mon, 8 Jan 2024 11:19:07 -0800 Subject: [PATCH 02/14] disable rate limiter feature flag --- src/index.ts | 30 ++++++++++++++++-------------- src/utils/featureFlags.ts | 4 ++++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/index.ts b/src/index.ts index f17a8f1..1bc9028 100644 --- a/src/index.ts +++ b/src/index.ts @@ -116,21 +116,23 @@ app.use(compression()); app.set('trust proxy', 1); app.use(logHttp); app.use(handleResponseTime); -app.use( - rateLimit({ - windowMs: 1000, // 1 second - max: rateLimitCallsPerSecond, - standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers - legacyHeaders: false, // Disable the `X-RateLimit-*` headers - skip: (req, _res) => { - if (!loadTestAllowed) { - return false; - } +if (!FEATURE_FLAGS.DISABLE_RATE_LIMIT) { + app.use( + rateLimit({ + windowMs: 1000, // 1 second + max: rateLimitCallsPerSecond, + standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers + legacyHeaders: false, // Disable the `X-RateLimit-*` headers + skip: (req, _res) => { + if (!loadTestAllowed) { + return false; + } - return req.headers['user-agent'].includes('k6'); - }, - }) -); + return req.headers['user-agent'].includes('k6'); + }, + }) + ); +} // strip off /dlob, if the request comes from exchange history server LB app.use((req, _res, next) => { diff --git a/src/utils/featureFlags.ts b/src/utils/featureFlags.ts index f815837..7c6d724 100644 --- a/src/utils/featureFlags.ts +++ b/src/utils/featureFlags.ts @@ -12,6 +12,10 @@ export const FEATURE_FLAGS = { DISABLE_GPA_REFRESH: process.env.DISABLE_GPA_REFRESH ? process.env.DISABLE_GPA_REFRESH.toLowerCase() === 'true' : false, + + DISABLE_RATE_LIMIT: process.env.DISABLE_RATE_LIMIT + ? process.env.DISABLE_RATE_LIMIT.toLowerCase() === 'true' + : false, }; export default FEATURE_FLAGS; From c6db744e56acadbb5edcecbb29c51d73adc28b80 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Mon, 8 Jan 2024 12:10:42 -0800 Subject: [PATCH 03/14] perMessageDeflate --- src/wsConnectionManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wsConnectionManager.ts b/src/wsConnectionManager.ts index db6d8a2..836f6dd 100644 --- a/src/wsConnectionManager.ts +++ b/src/wsConnectionManager.ts @@ -26,7 +26,7 @@ const server = http.createServer(app); const wss = new WebSocketServer({ server, path: '/ws', - perMessageDeflate: false, + perMessageDeflate: true, }); const REDIS_HOST = process.env.REDIS_HOST || 'localhost'; From 4f9710520a5592dea207a91a54c74c1e34837cc1 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:05:14 +0000 Subject: [PATCH 04/14] Bumping sdk dependency to 2.58.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 63f678f..aaa5817 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.58.0-beta.0", + "@drift-labs/sdk": "2.58.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 60db081..314de9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.58.0-beta.0": - version "2.58.0-beta.0" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.58.0-beta.0.tgz#853ec219045018b102d5c6d6c33c4caf197d1924" - integrity sha512-+NS4/cKLrrNtMVRhfpJJK1d1KlbX5xYmvZPYDKXmKCQ5GAaPyBgwF+0S+ZMmGb2j1MsHPXhjJKsbI8QTQhUAGg== +"@drift-labs/sdk@2.58.0-beta.1": + version "2.58.0-beta.1" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.58.0-beta.1.tgz#fabf157248481944299945723a5bdcf85a7f1189" + integrity sha512-6DkeR2nSIneS3c/tYn5GvvWrha7Tv7/P4j11hu41//pi8htBveW/kkMeXnRpx1vfBRhhy0GcREy/PO5KrTOE1Q== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From dd9d654b382033eee68506925d0c5e3fc7bc3e4f Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 Jan 2024 19:27:15 +0000 Subject: [PATCH 05/14] Bumping sdk dependency to 2.59.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 aaa5817..011635a 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.58.0-beta.1", + "@drift-labs/sdk": "2.59.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 314de9e..b924639 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.58.0-beta.1": - version "2.58.0-beta.1" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.58.0-beta.1.tgz#fabf157248481944299945723a5bdcf85a7f1189" - integrity sha512-6DkeR2nSIneS3c/tYn5GvvWrha7Tv7/P4j11hu41//pi8htBveW/kkMeXnRpx1vfBRhhy0GcREy/PO5KrTOE1Q== +"@drift-labs/sdk@2.59.0-beta.0": + version "2.59.0-beta.0" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.0.tgz#e71a862ba67851522e24e9c89512aef6406eef29" + integrity sha512-KmOXLbp+x2Q3HO7LppCkFO/suTevDxFVVcyfGLNonuHQLGoUUIKQTF+j87fg5IVem8a8dhqo/DyzM6mQxO6iGg== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 4b6b66eaada8c3e5517d3711f921a589c4940ded Mon Sep 17 00:00:00 2001 From: wphan Date: Sat, 27 Jan 2024 12:08:35 -0800 Subject: [PATCH 06/14] disable includeVamm for rlb --- src/dlob-subscriber/DLOBSubscriberIO.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 97b063f..1d33880 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -58,13 +58,17 @@ export class DLOBSubscriberIO extends DLOBSubscriber { this.lastSeenL2Formatted.set(MarketType.PERP, new Map()); for (const market of config.perpMarketInfos) { + let includeVamm = true; + if (market.marketIndex === 17) { + includeVamm = false; + } this.marketL2Args.push({ marketIndex: market.marketIndex, marketType: MarketType.PERP, marketName: market.marketName, depth: -1, numVammOrders: 100, - includeVamm: true, + includeVamm, updateOnChange: true, fallbackL2Generators: [], }); From cf677ae66f28e4bb7e41488e53f414c721781178 Mon Sep 17 00:00:00 2001 From: wphan Date: Sat, 27 Jan 2024 12:12:23 -0800 Subject: [PATCH 07/14] ws: set includeVamm based on market status --- src/dlob-subscriber/DLOBSubscriberIO.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 1d33880..13246d2 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -58,10 +58,11 @@ export class DLOBSubscriberIO extends DLOBSubscriber { this.lastSeenL2Formatted.set(MarketType.PERP, new Map()); for (const market of config.perpMarketInfos) { - let includeVamm = true; - if (market.marketIndex === 17) { - includeVamm = false; - } + const perpMarket = this.driftClient.getPerpMarketAccount( + market.marketIndex + ); + const includeVamm = !isVariant(perpMarket.status, 'ammPaused'); + this.marketL2Args.push({ marketIndex: market.marketIndex, marketType: MarketType.PERP, From b530e426c8460d12e72bcd0f183bde81802d72a9 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 Jan 2024 23:53:39 +0000 Subject: [PATCH 08/14] Bumping sdk dependency to 2.59.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 011635a..c08a1a0 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.59.0-beta.0", + "@drift-labs/sdk": "2.59.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 b924639..ef1b5d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.59.0-beta.0": - version "2.59.0-beta.0" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.0.tgz#e71a862ba67851522e24e9c89512aef6406eef29" - integrity sha512-KmOXLbp+x2Q3HO7LppCkFO/suTevDxFVVcyfGLNonuHQLGoUUIKQTF+j87fg5IVem8a8dhqo/DyzM6mQxO6iGg== +"@drift-labs/sdk@2.59.0-beta.1": + version "2.59.0-beta.1" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.1.tgz#12ba091616d3e1befc822822ab64cacad5e6c339" + integrity sha512-OuKLgiDQx7YEEkbo19f4/rVhcmXO9CbZr+1JvkKaq2fgrTNA4V2d9qMh6+E7PgpShgzmWPrZHgok3yD1I8moIQ== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From af4642e0c40595c7bf494b0729710cc7cf4839ea Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 Jan 2024 00:43:07 +0000 Subject: [PATCH 09/14] Bumping sdk dependency to 2.59.0-beta.2 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c08a1a0..f9c7cf9 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.59.0-beta.1", + "@drift-labs/sdk": "2.59.0-beta.2", "@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 ef1b5d3..56c7c88 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.59.0-beta.1": - version "2.59.0-beta.1" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.1.tgz#12ba091616d3e1befc822822ab64cacad5e6c339" - integrity sha512-OuKLgiDQx7YEEkbo19f4/rVhcmXO9CbZr+1JvkKaq2fgrTNA4V2d9qMh6+E7PgpShgzmWPrZHgok3yD1I8moIQ== +"@drift-labs/sdk@2.59.0-beta.2": + version "2.59.0-beta.2" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.2.tgz#c7710b1d56d931fa3b75590acd8b55cee4a291c1" + integrity sha512-4ZvU94sUAuzsujk6bUv65PmcAdPAGyCTWTzwCeNRBCMWkC/i7fdTSsFwoaCnKYrfuhWxl5Ebqr7v1Z5dY2+pLA== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 8d805656bb2b5b58e70ba9db8b39341dafd52b69 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Sat, 27 Jan 2024 17:28:06 -0800 Subject: [PATCH 10/14] patch updateOnChange=includeVamm --- src/dlob-subscriber/DLOBSubscriberIO.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 13246d2..9d6b98c 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -70,7 +70,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber { depth: -1, numVammOrders: 100, includeVamm, - updateOnChange: true, + updateOnChange: includeVamm, fallbackL2Generators: [], }); } From a59151244b2aabb65f9fd5a7a054d7b025baaf4c Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 Jan 2024 08:01:26 +0000 Subject: [PATCH 11/14] Bumping sdk dependency to 2.59.0-beta.3 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f9c7cf9..c186154 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.59.0-beta.2", + "@drift-labs/sdk": "2.59.0-beta.3", "@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 56c7c88..23c6175 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.59.0-beta.2": - version "2.59.0-beta.2" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.2.tgz#c7710b1d56d931fa3b75590acd8b55cee4a291c1" - integrity sha512-4ZvU94sUAuzsujk6bUv65PmcAdPAGyCTWTzwCeNRBCMWkC/i7fdTSsFwoaCnKYrfuhWxl5Ebqr7v1Z5dY2+pLA== +"@drift-labs/sdk@2.59.0-beta.3": + version "2.59.0-beta.3" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.3.tgz#637c371bc86bdf8ca23cab81879513b23ec00679" + integrity sha512-kRuQ8dNxU33hwq+auSr655Lt3FR9ODt+J0BXQeABj8xnq5SgwMjzB2YdVmsC0EiLwUkdBJtg0FAaad+ZOY/V0A== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 1ded2a63d8af8a09afbbdd35c79f1de399fe0e79 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 Jan 2024 08:23:15 +0000 Subject: [PATCH 12/14] Bumping sdk dependency to 2.59.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 c186154..c0d2faa 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.59.0-beta.3", + "@drift-labs/sdk": "2.59.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 23c6175..5c18050 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.59.0-beta.3": - version "2.59.0-beta.3" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.3.tgz#637c371bc86bdf8ca23cab81879513b23ec00679" - integrity sha512-kRuQ8dNxU33hwq+auSr655Lt3FR9ODt+J0BXQeABj8xnq5SgwMjzB2YdVmsC0EiLwUkdBJtg0FAaad+ZOY/V0A== +"@drift-labs/sdk@2.59.0-beta.4": + version "2.59.0-beta.4" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.4.tgz#d034d071528e2010516c2c1545619a3374fa3853" + integrity sha512-tJQUU6kjOkxkoaOOcgxKXS9JhBrnFCZ3B24m8XEZlDBNCh2hkRaucGuMI2DIHNttaxwXtoQnNYc+IEXCXgySfA== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From 7c9ce14a8dddf646d2ff4b547e497e220c05047d Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 20:25:55 +0000 Subject: [PATCH 13/14] Bumping sdk dependency to 2.59.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 c0d2faa..f3cde6f 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.59.0-beta.4", + "@drift-labs/sdk": "2.59.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 5c18050..bb19570 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,10 +115,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@drift-labs/sdk@2.59.0-beta.4": - version "2.59.0-beta.4" - resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.4.tgz#d034d071528e2010516c2c1545619a3374fa3853" - integrity sha512-tJQUU6kjOkxkoaOOcgxKXS9JhBrnFCZ3B24m8XEZlDBNCh2hkRaucGuMI2DIHNttaxwXtoQnNYc+IEXCXgySfA== +"@drift-labs/sdk@2.59.0-beta.5": + version "2.59.0-beta.5" + resolved "https://registry.yarnpkg.com/@drift-labs/sdk/-/sdk-2.59.0-beta.5.tgz#50c8bd135c0bcdff224a0277841555433ced218a" + integrity sha512-RgVwGUbuQaZgw4LLe2yxBXiWDnzleYU7lr+Vjq0EFi7hNeyJ35V+IiOfDxA9G9/D3vv1BfXD3adx0gR2rLTUBg== dependencies: "@coral-xyz/anchor" "0.28.1-beta.2" "@ellipsis-labs/phoenix-sdk" "^1.4.2" From ac3267d446fcb29607aed7bf9dd7b004de87bb25 Mon Sep 17 00:00:00 2001 From: Nour Alharithi Date: Mon, 29 Jan 2024 13:08:13 -0800 Subject: [PATCH 14/14] 10min stale slot killswitch --- src/dlob-subscriber/DLOBSubscriberIO.ts | 45 +++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 9d6b98c..a7cb9fe 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -27,6 +27,8 @@ type wsMarketL2Args = { updateOnChange?: boolean; }; +const MAKRET_STALENESS_THRESHOLD = 10 * 60 * 1000; + export type wsMarketInfo = { marketIndex: number; marketName: string; @@ -37,6 +39,10 @@ export class DLOBSubscriberIO extends DLOBSubscriber { public lastSeenL2Formatted: Map>; redisClient: RedisClient; public killSwitchSlotDiffThreshold: number; + public lastMarketSlotMap: Map< + MarketType, + Map + >; constructor( config: DLOBSubscriptionConfig & { @@ -56,6 +62,9 @@ export class DLOBSubscriberIO extends DLOBSubscriber { this.lastSeenL2Formatted = new Map(); this.lastSeenL2Formatted.set(MarketType.SPOT, new Map()); this.lastSeenL2Formatted.set(MarketType.PERP, new Map()); + this.lastMarketSlotMap = new Map(); + this.lastMarketSlotMap.set(MarketType.SPOT, new Map()); + this.lastMarketSlotMap.set(MarketType.PERP, new Map()); for (const market of config.perpMarketInfos) { const perpMarket = this.driftClient.getPerpMarketAccount( @@ -107,6 +116,15 @@ export class DLOBSubscriberIO extends DLOBSubscriber { const { marketName, ...l2FuncArgs } = l2Args; const l2 = this.getL2(l2FuncArgs); const slot = l2.slot; + const lastMarketSlotAndTime = this.lastMarketSlotMap + .get(l2Args.marketType) + .get(l2Args.marketIndex); + if (!lastMarketSlotAndTime) { + this.lastMarketSlotMap + .get(l2Args.marketType) + .set(l2Args.marketIndex, { slot, ts: Date.now() }); + } + if (slot) { delete l2.slot; } @@ -127,6 +145,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber { ) return; } + this.lastSeenL2Formatted .get(l2Args.marketType) ?.set(l2Args.marketIndex, JSON.stringify(l2Formatted)); @@ -148,6 +167,7 @@ export class DLOBSubscriberIO extends DLOBSubscriber { l2Args.marketIndex ); + // Check if slot diffs are too large for oracle if ( Math.abs(slot - parseInt(l2Formatted['oracleData']['slot'])) > this.killSwitchSlotDiffThreshold @@ -155,9 +175,34 @@ export class DLOBSubscriberIO extends DLOBSubscriber { console.log(`Killing process due to slot diffs for market ${marketName}: dlobProvider slot: ${slot} oracle slot: ${l2Formatted['oracleData']['slot']} + `); + process.exit(1); + } + + // Check if times and slots are too different for market + if ( + lastMarketSlotAndTime && + l2Formatted['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: ${l2Formatted['marketSlot']} `); process.exit(1); + } else if ( + lastMarketSlotAndTime && + l2Formatted['marketSlot'] !== lastMarketSlotAndTime.slot + ) { + console.log( + `Updating market slot for ${l2Args.marketName} with slot ${l2Formatted['marketSlot']}` + ); + this.lastMarketSlotMap + .get(l2Args.marketType) + .set(l2Args.marketIndex, { + slot: l2Formatted['marketSlot'], + ts: Date.now(), + }); } const l2Formatted_depth100 = Object.assign({}, l2Formatted, {