From 1163180c476d4ef11d34f88963ecad74d7846448 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 20:24:54 +0000 Subject: [PATCH 01/11] Bumping drift-common to ecdf0d4ab24bb74ad40b37db0647daf3faba0a41 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index 434254f..ecdf0d4 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit 434254f39bfc39d89f248dbbc4807c22e4458821 +Subproject commit ecdf0d4ab24bb74ad40b37db0647daf3faba0a41 From 173debce7224fccb247b3621f3832f3ee7993606 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 20:42:42 +0000 Subject: [PATCH 02/11] Bumping drift-common to 1517dc3079dc893246e034fef926dc360c9f9530 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index ecdf0d4..1517dc3 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit ecdf0d4ab24bb74ad40b37db0647daf3faba0a41 +Subproject commit 1517dc3079dc893246e034fef926dc360c9f9530 From a5d8d81ec6e90fca528a9e45ae8951f3c48417b2 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 21:21:47 +0000 Subject: [PATCH 03/11] Bumping drift-common to 9304e557fea4c7ac7b87648f39d0d1c8030b5366 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index 1517dc3..9304e55 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit 1517dc3079dc893246e034fef926dc360c9f9530 +Subproject commit 9304e557fea4c7ac7b87648f39d0d1c8030b5366 From 3c7a934214caf4254b2f5fe32a1e88efa365448d Mon Sep 17 00:00:00 2001 From: wphan Date: Thu, 30 Jan 2025 14:43:12 -0800 Subject: [PATCH 04/11] pmm dlob server --- README.md | 2 +- build_all.sh | 15 +++ src/dlob-subscriber/DLOBSubscriberIO.ts | 12 ++- src/index.ts | 19 ++-- src/publishers/dlobPublisher.ts | 17 ++++ yarn.lock | 122 +++++++++++------------- 6 files changed, 109 insertions(+), 78 deletions(-) create mode 100644 build_all.sh diff --git a/README.md b/README.md index 6126065..aeb0aac 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ bash redisCluster.sh create In second terminal, run: ``` -yarn run dlob-publisher +yarn run dlob-publish ``` In a third terminal, run: diff --git a/build_all.sh b/build_all.sh new file mode 100644 index 0000000..b3ae320 --- /dev/null +++ b/build_all.sh @@ -0,0 +1,15 @@ +git submodule init +git submodule update --recursive + +echo "building sdk..." +cd drift-common/protocol/sdk +yarn clean && yarn && yarn build +cd ../../.. + +echo "building drift-common..." +cd drift-common/common-ts +yarn clean && yarn && yarn build +cd ../.. + +echo "building dlob server..." +yarn clean && yarn && yarn build diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 89fd433..2465908 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -263,11 +263,15 @@ export class DLOBSubscriberIO extends DLOBSubscriber { }); this.redisClient.publish( - `${clientPrefix}orderbook_${marketType}_${marketArgs.marketIndex}`, + `${clientPrefix}orderbook_${marketType}_${marketArgs.marketIndex}${ + this.protectedMakerView ? '_pmm' : '' + }`, l2Formatted ); this.redisClient.set( - `last_update_orderbook_${marketType}_${marketArgs.marketIndex}`, + `last_update_orderbook_${marketType}_${marketArgs.marketIndex}${ + this.protectedMakerView ? '_pmm' : '' + }`, l2Formatted_depth100 ); const oraclePriceData = @@ -350,7 +354,9 @@ export class DLOBSubscriberIO extends DLOBSubscriber { ); this.redisClient.set( - `last_update_orderbook_l3_${marketType}_${marketArgs.marketIndex}`, + `last_update_orderbook_l3_${marketType}_${marketArgs.marketIndex}${ + this.protectedMakerView ? '_pmm' : '' + }`, l3 ); } diff --git a/src/index.ts b/src/index.ts index ff9d212..9b8a137 100644 --- a/src/index.ts +++ b/src/index.ts @@ -520,7 +520,8 @@ const main = async (): Promise => { app.get('/l2', async (req, res, next) => { try { - const { marketName, marketIndex, marketType, depth } = req.query; + const { marketName, marketIndex, marketType, depth, includePmm } = + req.query; const { normedMarketType, normedMarketIndex, error } = validateDlobQuery( driftClient, @@ -535,14 +536,14 @@ const main = async (): Promise => { } const isSpot = isVariant(normedMarketType, 'spot'); - + const includePmmStr = (includePmm as string)?.toLowerCase() === 'true'; const adjustedDepth = depth ?? '100'; let l2Formatted: any; const redisL2 = await fetchFromRedis( `last_update_orderbook_${ isSpot ? 'spot' : 'perp' - }_${normedMarketIndex}`, + }_${normedMarketIndex}${includePmmStr ? '_pmm' : ''}`, selectMostRecentBySlot ); const depthToUse = Math.min(parseInt(adjustedDepth as string) ?? 1, 100); @@ -604,6 +605,7 @@ const main = async (): Promise => { includePhoenix, includeOpenbook, includeOracle, + includePmm, } = req.query; const normedParams = normalizeBatchQueryParams({ @@ -615,6 +617,7 @@ const main = async (): Promise => { includePhoenix: includePhoenix as string | undefined, includeOpenbook: includeOpenbook as string | undefined, includeOracle: includeOracle as string | undefined, + includePmm: includePmm as string | undefined, }); if (normedParams === undefined) { @@ -645,13 +648,14 @@ const main = async (): Promise => { } const isSpot = isVariant(normedMarketType, 'spot'); + const normedIncludePmm = normedParam['includePmm'] == 'true'; const adjustedDepth = normedParam['depth'] ?? '100'; let l2Formatted: any; const redisL2 = await fetchFromRedis( `last_update_orderbook_${ isSpot ? 'spot' : 'perp' - }_${normedMarketIndex}`, + }_${normedMarketIndex}${normedIncludePmm ? '_pmm' : ''}`, selectMostRecentBySlot ); const depth = Math.min(parseInt(adjustedDepth as string) ?? 1, 100); @@ -721,7 +725,7 @@ const main = async (): Promise => { app.get('/l3', async (req, res, next) => { try { - const { marketName, marketIndex, marketType } = req.query; + const { marketName, marketIndex, marketType, includePmm } = req.query; const { normedMarketType, normedMarketIndex, error } = validateDlobQuery( driftClient, @@ -736,9 +740,12 @@ const main = async (): Promise => { } const marketTypeStr = getVariant(normedMarketType); + const normedIncludePmm = (includePmm as string)?.toLowerCase() === 'true'; const redisL3 = await fetchFromRedis( - `last_update_orderbook_l3_${marketTypeStr}_${normedMarketIndex}`, + `last_update_orderbook_l3_${marketTypeStr}_${normedMarketIndex}${ + normedIncludePmm ? '_pmm' : '' + }`, selectMostRecentBySlot ); if (redisL3) { diff --git a/src/publishers/dlobPublisher.ts b/src/publishers/dlobPublisher.ts index 7eb8468..8581a36 100644 --- a/src/publishers/dlobPublisher.ts +++ b/src/publishers/dlobPublisher.ts @@ -497,8 +497,25 @@ const main = async () => { perpMarketInfos, spotMarketInfos, killSwitchSlotDiffThreshold: KILLSWITCH_SLOT_DIFF_THRESHOLD, + protectedMakerView: false, }); await dlobSubscriber.subscribe(); + + const dlobSubscriberPmm = new DLOBSubscriberIO({ + driftClient, + env: driftEnv, + dlobSource: dlobProvider, + slotSource, + updateFrequency: ORDERBOOK_UPDATE_INTERVAL, + redisClient, + spotMarketSubscribers: MARKET_SUBSCRIBERS, + perpMarketInfos, + spotMarketInfos, + killSwitchSlotDiffThreshold: KILLSWITCH_SLOT_DIFF_THRESHOLD, + protectedMakerView: true, + }); + await dlobSubscriberPmm.subscribe(); + if (useWebsocket && !FEATURE_FLAGS.DISABLE_GPA_REFRESH) { const recursiveFetch = (delay = WS_FALLBACK_FETCH_INTERVAL) => { setTimeout(() => { diff --git a/yarn.lock b/yarn.lock index f4353ad..21731fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -371,28 +371,7 @@ resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz#bdfd3a353131345244546876eb4afc0e125bec30" integrity sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ== -"@coral-xyz/anchor@0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.28.0.tgz#8345c3c9186a91f095f704d7b90cd256f7e8b2dc" - integrity sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw== - dependencies: - "@coral-xyz/borsh" "^0.28.0" - "@solana/web3.js" "^1.68.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.2" - camelcase "^6.3.0" - cross-fetch "^3.1.5" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - superstruct "^0.15.4" - toml "^3.0.0" - -"@coral-xyz/anchor@^0.29.0": +"@coral-xyz/anchor@0.29.0", "@coral-xyz/anchor@^0.29.0": version "0.29.0" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.29.0.tgz#bd0be95bedfb30a381c3e676e5926124c310ff12" integrity sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA== @@ -412,14 +391,6 @@ superstruct "^0.15.4" toml "^3.0.0" -"@coral-xyz/borsh@^0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.28.0.tgz#fa368a2f2475bbf6f828f4657f40a52102e02b6d" - integrity sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ== - dependencies: - bn.js "^5.1.2" - buffer-layout "^1.2.0" - "@coral-xyz/borsh@^0.29.0": version "0.29.0" resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.29.0.tgz#79f7045df2ef66da8006d47f5399c7190363e71f" @@ -453,37 +424,40 @@ kuler "^2.0.0" "@drift-labs/sdk@file:./drift-common/protocol/sdk", "@drift-labs/sdk@file:drift-common/protocol/sdk": - version "2.104.0-beta.0" + version "2.108.0-beta.17" dependencies: - "@coral-xyz/anchor" "0.28.0" + "@coral-xyz/anchor" "0.29.0" "@coral-xyz/anchor-30" "npm:@coral-xyz/anchor@0.30.1" - "@ellipsis-labs/phoenix-sdk" "^1.4.2" + "@ellipsis-labs/phoenix-sdk" "1.4.5" "@grpc/grpc-js" "^1.8.0" "@openbook-dex/openbook-v2" "0.2.10" - "@project-serum/serum" "^0.13.38" + "@project-serum/serum" "0.13.65" "@pythnetwork/client" "2.5.3" - "@pythnetwork/price-service-sdk" "^1.7.1" - "@pythnetwork/pyth-solana-receiver" "^0.7.0" + "@pythnetwork/price-service-sdk" "1.7.1" + "@pythnetwork/pyth-solana-receiver" "0.7.0" "@solana/spl-token" "0.3.7" "@solana/web3.js" "1.92.3" "@switchboard-xyz/on-demand" "1.2.42" - "@triton-one/yellowstone-grpc" "0.6.0" - anchor-bankrun "^0.3.0" - node-cache "^5.1.2" + "@triton-one/yellowstone-grpc" "1.3.0" + anchor-bankrun "0.3.0" + nanoid "3.3.4" + node-cache "5.1.2" rpc-websockets "7.5.1" - solana-bankrun "^0.3.0" - strict-event-emitter-types "^2.0.0" + solana-bankrun "0.3.1" + strict-event-emitter-types "2.0.0" tweetnacl "1.0.3" - uuid "^8.3.2" - zstddec "^0.1.0" + tweetnacl-util "0.15.1" + uuid "8.3.2" + yargs "17.7.2" + zstddec "0.1.0" "@drift/common@file:./drift-common/common-ts": version "1.0.0" dependencies: - "@drift-labs/sdk" "file:../Library/Caches/Yarn/v6/npm-@drift-common-1.0.0-4e3c4626-2ccf-4799-8c43-1efe010514e5-1736307402016/node_modules/@drift/protocol/sdk" + "@drift-labs/sdk" "file:../../Library/Caches/Yarn/v6/npm-@drift-common-1.0.0-eab5722e-8e53-43d2-a6cc-a4aaa209fe54-1738273494293/node_modules/@drift/protocol/sdk" "@jest/globals" "^29.3.1" "@slack/web-api" "^6.4.0" - "@solana/spl-token" "^0.3.8" + "@solana/spl-token" "0.3.8" "@solana/web3.js" "1.66.2" bcryptjs-react "^2.4.6" cerializr "^3.1.4" @@ -498,7 +472,7 @@ winston "^3.13.0" winston-slack-webhook-transport "^2.3.5" -"@ellipsis-labs/phoenix-sdk@^1.4.2": +"@ellipsis-labs/phoenix-sdk@1.4.5": version "1.4.5" resolved "https://registry.yarnpkg.com/@ellipsis-labs/phoenix-sdk/-/phoenix-sdk-1.4.5.tgz#42cf8de8463b32c910ab8844eae71ca082a6773a" integrity sha512-vEYgMXuV5/mpnpEi+VK4HO8f6SheHtVLdHHlULBiDN1eECYmL67gq+/cRV7Ar6jAQ7rJZL7xBxhbUW5kugMl6A== @@ -1608,7 +1582,7 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" -"@project-serum/serum@^0.13.38", "@project-serum/serum@^0.13.65": +"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.65": version "0.13.65" resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0" integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA== @@ -1681,21 +1655,14 @@ assert "^2.0.0" buffer "^6.0.1" -"@pythnetwork/price-service-sdk@>=1.6.0": +"@pythnetwork/price-service-sdk@1.7.1", "@pythnetwork/price-service-sdk@>=1.6.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@pythnetwork/price-service-sdk/-/price-service-sdk-1.7.1.tgz#dbfc8a8c2189f526346c1f79ec3995e89b690700" integrity sha512-xr2boVXTyv1KUt/c6llUTfbv2jpud99pWlMJbFaHGUBoygQsByuy7WbjIJKZ+0Blg1itLZl0Lp/pJGGg8SdJoQ== dependencies: bn.js "^5.2.1" -"@pythnetwork/price-service-sdk@^1.7.1": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@pythnetwork/price-service-sdk/-/price-service-sdk-1.8.0.tgz#f5f01f654963eb9a0cf12127b4f1a89b60ef008a" - integrity sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA== - dependencies: - bn.js "^5.2.1" - -"@pythnetwork/pyth-solana-receiver@^0.7.0": +"@pythnetwork/pyth-solana-receiver@0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@pythnetwork/pyth-solana-receiver/-/pyth-solana-receiver-0.7.0.tgz#253a0d15a135d625ceca7ba1b47940dd03b9cab6" integrity sha512-OoEAHh92RPRdKkfjkcKGrjC+t0F3SEL754iKFmixN9zyS8pIfZSVfFntmkHa9pWmqEMxdx/i925a8B5ny8Tuvg== @@ -1987,6 +1954,15 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" +"@solana/spl-token@0.3.8": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.8.tgz#8e9515ea876e40a4cc1040af865f61fc51d27edf" + integrity sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + buffer "^6.0.3" + "@solana/spl-token@^0.1.6": version "0.1.8" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" @@ -1999,7 +1975,7 @@ buffer-layout "^1.2.0" dotenv "10.0.0" -"@solana/spl-token@^0.3.4", "@solana/spl-token@^0.3.8": +"@solana/spl-token@^0.3.4": version "0.3.11" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.11.tgz#cdc10f9472b29b39c8983c92592cadd06627fb9a" integrity sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ== @@ -2235,10 +2211,10 @@ js-yaml "^4.1.0" protobufjs "^7.2.6" -"@triton-one/yellowstone-grpc@0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@triton-one/yellowstone-grpc/-/yellowstone-grpc-0.6.0.tgz#9e6376cec8a42284c23dc195df2c3423c87c4f27" - integrity sha512-rgdZM2N3U9/d/QKOI5PP+9rSHUl2oSI5Uwzvuss8y/mtTaHFjbOMpXpQXviIeDkusOa+mef4wLYrbjEZCwTXiw== +"@triton-one/yellowstone-grpc@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@triton-one/yellowstone-grpc/-/yellowstone-grpc-1.3.0.tgz#7caa7006b525149b4780d1295c7d4c34bc6a6ff6" + integrity sha512-tuwHtoYzvqnahsMrecfNNkQceCYwgiY0qKS8RwqtaxvDEgjm0E+0bXwKz2eUD3ZFYifomJmRKDmSBx9yQzAeMQ== dependencies: "@grpc/grpc-js" "^1.8.0" @@ -2869,7 +2845,7 @@ ajv@^8.0.1, ajv@^8.1.0: require-from-string "^2.0.2" uri-js "^4.2.2" -anchor-bankrun@^0.3.0: +anchor-bankrun@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/anchor-bankrun/-/anchor-bankrun-0.3.0.tgz#3789fcecbc201a2334cff228b99cc0da8ef0167e" integrity sha512-PYBW5fWX+iGicIS5MIM/omhk1tQPUc0ELAnI/IkLKQJ6d75De/CQRh8MF2bU/TgGyFi6zEel80wUe3uRol9RrQ== @@ -5206,6 +5182,11 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +nanoid@3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5224,7 +5205,7 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-cache@^5.1.2: +node-cache@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" integrity sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg== @@ -6144,7 +6125,7 @@ solana-bankrun-linux-x64-musl@0.3.1: resolved "https://registry.yarnpkg.com/solana-bankrun-linux-x64-musl/-/solana-bankrun-linux-x64-musl-0.3.1.tgz#1a044a132138a0084e82406ec7bf4939f06bed68" integrity sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ== -solana-bankrun@^0.3.0: +solana-bankrun@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/solana-bankrun/-/solana-bankrun-0.3.1.tgz#13665ab7c1c15ec2b3354aae56980d0ded514998" integrity sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA== @@ -6218,7 +6199,7 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -strict-event-emitter-types@^2.0.0: +strict-event-emitter-types@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz#05e15549cb4da1694478a53543e4e2f4abcf277f" integrity sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA== @@ -6457,6 +6438,11 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tweetnacl-util@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + tweetnacl@1.0.3, tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -6565,7 +6551,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^8.3.2: +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -6799,7 +6785,7 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.7.2: +yargs@17.7.2, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -6822,7 +6808,7 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zstddec@^0.1.0: +zstddec@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.1.0.tgz#7050f3f0e0c3978562d0c566b3e5a427d2bad7ec" integrity sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg== From 5ca9309e527f99024d761eb8f60b7cad4254eb29 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 22:51:51 +0000 Subject: [PATCH 05/11] Bumping drift-common to 541261f82a6a245dbbdc82e8b49f7e7d3aa16715 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index 9304e55..541261f 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit 9304e557fea4c7ac7b87648f39d0d1c8030b5366 +Subproject commit 541261f82a6a245dbbdc82e8b49f7e7d3aa16715 From 8906595ca9360ef8a429dd378c0be8a991a5f0d6 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 23:14:52 +0000 Subject: [PATCH 06/11] Bumping drift-common to da771f0f730dde0ce021ddd5f7fecc055025449c --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index 541261f..da771f0 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit 541261f82a6a245dbbdc82e8b49f7e7d3aa16715 +Subproject commit da771f0f730dde0ce021ddd5f7fecc055025449c From 414c0ef423113ff6a58dde47c9c64ba121a378cd Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 05:22:19 +0000 Subject: [PATCH 07/11] Bumping drift-common to c3473ce0cb24437219a7ed90cb0d65b1704483c9 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index da771f0..c3473ce 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit da771f0f730dde0ce021ddd5f7fecc055025449c +Subproject commit c3473ce0cb24437219a7ed90cb0d65b1704483c9 From 49d3d6c08a156df4eb7d2cc6ea484af66d6590ad Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:09:39 +0000 Subject: [PATCH 08/11] Bumping drift-common to 18fdc6ca19e66ab9a21e391ddcf8639c1faf6b56 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index c3473ce..18fdc6c 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit c3473ce0cb24437219a7ed90cb0d65b1704483c9 +Subproject commit 18fdc6ca19e66ab9a21e391ddcf8639c1faf6b56 From b29a68fdfcbbfd23882952a927b3fa97eb953d01 Mon Sep 17 00:00:00 2001 From: wphan Date: Fri, 31 Jan 2025 09:52:29 -0800 Subject: [PATCH 09/11] properly apply pmm mode --- src/dlobProvider.ts | 10 +++++----- src/publishers/dlobPublisher.ts | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/dlobProvider.ts b/src/dlobProvider.ts index 4da8f79..1d82f56 100644 --- a/src/dlobProvider.ts +++ b/src/dlobProvider.ts @@ -3,7 +3,7 @@ import { PublicKey } from '@solana/web3.js'; export type DLOBProvider = { subscribe(): Promise; - getDLOB(slot: number): Promise; + getDLOB(slot: number, protectedMakerView: boolean): Promise; getUniqueAuthorities(): PublicKey[]; getUserAccounts(): Generator<{ userAccount: UserAccount; @@ -20,8 +20,8 @@ export function getDLOBProviderFromUserMap(userMap: UserMap): DLOBProvider { subscribe: async () => { await userMap.subscribe(); }, - getDLOB: async (slot: number) => { - return await userMap.getDLOB(slot); + getDLOB: async (slot: number, protectedMakerView: boolean) => { + return await userMap.getDLOB(slot, protectedMakerView); }, getUniqueAuthorities: () => { return userMap.getUniqueAuthorities(); @@ -56,8 +56,8 @@ export function getDLOBProviderFromOrderSubscriber( subscribe: async () => { await orderSubscriber.subscribe(); }, - getDLOB: async (slot: number) => { - return await orderSubscriber.getDLOB(slot); + getDLOB: async (slot: number, protectedMakerView: boolean) => { + return await orderSubscriber.getDLOB(slot, protectedMakerView); }, getUniqueAuthorities: () => { const authorities = new Set(); diff --git a/src/publishers/dlobPublisher.ts b/src/publishers/dlobPublisher.ts index 8581a36..1b6e9e1 100644 --- a/src/publishers/dlobPublisher.ts +++ b/src/publishers/dlobPublisher.ts @@ -590,6 +590,7 @@ const main = async () => { const handleDebug = async (req: Request, res: Response) => { const marketIndex = +req.query.marketIndex; + const protectedMakerView = req.query.includePmm === 'true'; let marketType: MarketType = MarketType.PERP; let oraclePriceData: OraclePriceData; if (req.query.marketType === 'spot') { @@ -600,7 +601,7 @@ const main = async () => { } try { const slot = slotSource.getSlot(); - const dlob = await dlobProvider.getDLOB(slot); + const dlob = await dlobProvider.getDLOB(slot, protectedMakerView); const l2 = dlob.getL2({ marketIndex, marketType, @@ -623,6 +624,7 @@ const main = async () => { }, l2: l2WithBNToStrings(l2), l3, + includePmm: protectedMakerView, }; res.json(state); From b6c11a15fe00e5a122ce84b379d08eb2e5b64de1 Mon Sep 17 00:00:00 2001 From: wphan Date: Fri, 31 Jan 2025 11:22:53 -0800 Subject: [PATCH 10/11] separate grpc endpoint --- src/publishers/dlobPublisher.ts | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/publishers/dlobPublisher.ts b/src/publishers/dlobPublisher.ts index 1b6e9e1..48f8636 100644 --- a/src/publishers/dlobPublisher.ts +++ b/src/publishers/dlobPublisher.ts @@ -93,17 +93,19 @@ let driftClient: DriftClient; const opts = program.opts(); setLogLevel(opts.debug ? 'debug' : 'info'); +const useGrpc = process.env.USE_GRPC?.toLowerCase() === 'true'; +const useWebsocket = process.env.USE_WEBSOCKET?.toLowerCase() === 'true'; + const token = process.env.TOKEN; -const endpoint = token - ? process.env.ENDPOINT + `/${token}` - : process.env.ENDPOINT; +const endpoint = process.env.ENDPOINT; +const grpcEndpoint = useGrpc + ? process.env.GRPC_ENDPOINT ?? endpoint + `/${token}` + : ''; + const wsEndpoint = process.env.WS_ENDPOINT; const useOrderSubscriber = process.env.USE_ORDER_SUBSCRIBER?.toLowerCase() === 'true'; -const useGrpc = process.env.USE_GRPC?.toLowerCase() === 'true'; -const useWebsocket = process.env.USE_WEBSOCKET?.toLowerCase() === 'true'; - const ORDERBOOK_UPDATE_INTERVAL = parseInt(process.env.ORDERBOOK_UPDATE_INTERVAL) || 1000; const WS_FALLBACK_FETCH_INTERVAL = 60_000; @@ -123,9 +125,10 @@ const SPOT_MARKETS_TO_LOAD = ? parsePositiveIntArray(process.env.SPOT_MARKETS_TO_LOAD) : undefined; -logger.info(`RPC endpoint: ${endpoint}`); -logger.info(`WS endpoint: ${wsEndpoint}`); -logger.info(`Token: ${token}`); +logger.info(`RPC endpoint: ${endpoint}`); +logger.info(`WS endpoint: ${wsEndpoint}`); +logger.info(`GRPC endpoint: ${grpcEndpoint}`); +logger.info(`GRPC Token: ${token}`); logger.info( `useOrderSubscriber: ${useOrderSubscriber}, useWebsocket: ${useWebsocket}, useGrpc: ${useGrpc}` ); @@ -437,8 +440,10 @@ const main = async () => { if (!token) { throw new Error('TOKEN is required for grpc'); } - if (!endpoint) { - throw new Error('ENDPOINT is required for grpc'); + if (!grpcEndpoint) { + throw new Error( + 'GRPC_ENDPOINT is required for grpc (or ENDPOINT and TOKEN)' + ); } if (useWebsocket) { logger.warn('USE_GRPC overriding USE_WEBSOCKET'); @@ -446,7 +451,7 @@ const main = async () => { subscriptionConfig = { type: 'grpc', grpcConfigs: { - endpoint: endpoint, + endpoint: grpcEndpoint, token: token, commitmentLevel: stateCommitment, channelOptions: { From db65d76dc1137bbe403c9e4b0ecd408253d9838d Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 19:53:57 +0000 Subject: [PATCH 11/11] Bumping drift-common to de04fa584324e03d6e48402e28352b220c77c8d5 --- drift-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift-common b/drift-common index 18fdc6c..de04fa5 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit 18fdc6ca19e66ab9a21e391ddcf8639c1faf6b56 +Subproject commit de04fa584324e03d6e48402e28352b220c77c8d5