@velocity-exchange/sdk 0.4.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/adminClient.d.ts +52 -0
  3. package/lib/browser/adminClient.js +97 -0
  4. package/lib/browser/config.js +6 -7
  5. package/lib/browser/constants/numericConstants.d.ts +1 -1
  6. package/lib/browser/constants/numericConstants.js +1 -1
  7. package/lib/browser/decode/user.js +5 -1
  8. package/lib/browser/idl/velocity.d.ts +191 -15
  9. package/lib/browser/idl/velocity.json +192 -16
  10. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -0
  11. package/lib/browser/orderSubscriber/OrderSubscriber.js +10 -4
  12. package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
  13. package/lib/browser/types.d.ts +6 -0
  14. package/lib/browser/user.d.ts +20 -3
  15. package/lib/browser/user.js +52 -4
  16. package/lib/browser/velocityClient.d.ts +46 -10
  17. package/lib/browser/velocityClient.js +107 -35
  18. package/lib/node/adminClient.d.ts +52 -0
  19. package/lib/node/adminClient.d.ts.map +1 -1
  20. package/lib/node/adminClient.js +97 -0
  21. package/lib/node/config.d.ts.map +1 -1
  22. package/lib/node/config.js +6 -7
  23. package/lib/node/constants/numericConstants.d.ts +1 -1
  24. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  25. package/lib/node/constants/numericConstants.js +1 -1
  26. package/lib/node/decode/user.d.ts.map +1 -1
  27. package/lib/node/decode/user.js +5 -1
  28. package/lib/node/idl/velocity.d.ts +191 -15
  29. package/lib/node/idl/velocity.d.ts.map +1 -1
  30. package/lib/node/idl/velocity.json +192 -16
  31. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -0
  32. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  33. package/lib/node/orderSubscriber/OrderSubscriber.js +10 -4
  34. package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
  35. package/lib/node/pyth/pythLazerSubscriber.js +37 -27
  36. package/lib/node/types.d.ts +6 -0
  37. package/lib/node/types.d.ts.map +1 -1
  38. package/lib/node/user.d.ts +20 -3
  39. package/lib/node/user.d.ts.map +1 -1
  40. package/lib/node/user.js +52 -4
  41. package/lib/node/velocityClient.d.ts +46 -10
  42. package/lib/node/velocityClient.d.ts.map +1 -1
  43. package/lib/node/velocityClient.js +107 -35
  44. package/package.json +7 -3
  45. package/.prettierignore +0 -1
  46. package/CHANGELOG.md +0 -132
  47. package/build-browser.js +0 -58
  48. package/bunfig.toml +0 -3
  49. package/esbuild-shims.js +0 -12
  50. package/scripts/deposit-isolated-positions.ts +0 -110
  51. package/scripts/find-flagged-users.ts +0 -213
  52. package/scripts/grpc-client-test-comparison.ts +0 -372
  53. package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
  54. package/scripts/postbuild.js +0 -95
  55. package/scripts/single-grpc-client-test.ts +0 -284
  56. package/scripts/withdraw-isolated-positions.ts +0 -174
  57. package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
  58. package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
  59. package/src/accounts/basicUserAccountSubscriber.ts +0 -79
  60. package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
  61. package/src/accounts/bulkAccountLoader.ts +0 -358
  62. package/src/accounts/bulkUserStatsSubscription.ts +0 -40
  63. package/src/accounts/bulkUserSubscription.ts +0 -39
  64. package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
  65. package/src/accounts/fetch.ts +0 -200
  66. package/src/accounts/grpcAccountSubscriber.ts +0 -225
  67. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
  68. package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
  69. package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
  70. package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
  71. package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
  72. package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
  73. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
  74. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
  75. package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
  76. package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
  77. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
  78. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
  79. package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
  80. package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
  81. package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
  82. package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
  83. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
  84. package/src/accounts/testBulkAccountLoader.ts +0 -59
  85. package/src/accounts/types.ts +0 -428
  86. package/src/accounts/utils.ts +0 -90
  87. package/src/accounts/webSocketAccountSubscriber.ts +0 -304
  88. package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
  89. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
  90. package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
  91. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
  92. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
  93. package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
  94. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
  95. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
  96. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
  97. package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
  98. package/src/addresses/marketAddresses.ts +0 -28
  99. package/src/addresses/pda.ts +0 -620
  100. package/src/adminClient.ts +0 -8136
  101. package/src/assert/assert.ts +0 -5
  102. package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
  103. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
  104. package/src/auctionSubscriber/index.ts +0 -9
  105. package/src/auctionSubscriber/types.ts +0 -30
  106. package/src/bankrun/bankrunConnection.ts +0 -630
  107. package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
  108. package/src/blockhashSubscriber/index.ts +0 -6
  109. package/src/blockhashSubscriber/types.ts +0 -13
  110. package/src/clock/clockSubscriber.ts +0 -146
  111. package/src/config.ts +0 -312
  112. package/src/constants/index.ts +0 -9
  113. package/src/constants/numericConstants.ts +0 -194
  114. package/src/constants/perpMarkets.ts +0 -127
  115. package/src/constants/spotMarkets.ts +0 -104
  116. package/src/constants/txConstants.ts +0 -2
  117. package/src/constituentMap/constituentMap.ts +0 -305
  118. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
  119. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
  120. package/src/core/VelocityCore.ts +0 -606
  121. package/src/core/index.ts +0 -12
  122. package/src/core/instructions/deposit.ts +0 -64
  123. package/src/core/instructions/fill.ts +0 -51
  124. package/src/core/instructions/funding.ts +0 -33
  125. package/src/core/instructions/liquidation.ts +0 -55
  126. package/src/core/instructions/orders.ts +0 -84
  127. package/src/core/instructions/perpOrders.ts +0 -312
  128. package/src/core/instructions/settlement.ts +0 -40
  129. package/src/core/instructions/trigger.ts +0 -41
  130. package/src/core/instructions/withdraw.ts +0 -65
  131. package/src/core/remainingAccounts.ts +0 -320
  132. package/src/core/signedMsg.ts +0 -109
  133. package/src/decode/customCoder.ts +0 -148
  134. package/src/decode/user.ts +0 -401
  135. package/src/dlob/DLOB.ts +0 -2793
  136. package/src/dlob/DLOBNode.ts +0 -305
  137. package/src/dlob/DLOBSubscriber.ts +0 -269
  138. package/src/dlob/NodeList.ts +0 -244
  139. package/src/dlob/orderBookLevels.ts +0 -695
  140. package/src/dlob/types.ts +0 -37
  141. package/src/events/eventList.ts +0 -114
  142. package/src/events/eventSubscriber.ts +0 -521
  143. package/src/events/eventsServerLogProvider.ts +0 -189
  144. package/src/events/fetchLogs.ts +0 -219
  145. package/src/events/parse.ts +0 -271
  146. package/src/events/pollingLogProvider.ts +0 -113
  147. package/src/events/sort.ts +0 -51
  148. package/src/events/txEventCache.ts +0 -92
  149. package/src/events/types.ts +0 -337
  150. package/src/events/webSocketLogProvider.ts +0 -152
  151. package/src/factory/bigNum.ts +0 -709
  152. package/src/factory/oracleClient.ts +0 -73
  153. package/src/idl/pyth.json +0 -142
  154. package/src/idl/pyth.ts +0 -97
  155. package/src/idl/pyth_solana_receiver.json +0 -628
  156. package/src/idl/token_faucet.json +0 -229
  157. package/src/idl/token_faucet.ts +0 -197
  158. package/src/idl/velocity.json +0 -23974
  159. package/src/idl/velocity.ts +0 -23980
  160. package/src/index.ts +0 -150
  161. package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
  162. package/src/isomorphic/README.md +0 -19
  163. package/src/isomorphic/anchor.browser.ts +0 -44
  164. package/src/isomorphic/anchor.node.ts +0 -1
  165. package/src/isomorphic/anchor.ts +0 -1
  166. package/src/isomorphic/anchor29.browser.ts +0 -24
  167. package/src/isomorphic/anchor29.node.ts +0 -1
  168. package/src/isomorphic/anchor29.ts +0 -1
  169. package/src/isomorphic/grpc.browser.ts +0 -4
  170. package/src/isomorphic/grpc.node.ts +0 -130
  171. package/src/isomorphic/grpc.ts +0 -1
  172. package/src/jupiter/jupiterClient.ts +0 -502
  173. package/src/keypair.ts +0 -32
  174. package/src/margin/README.md +0 -138
  175. package/src/marginCalculation.ts +0 -407
  176. package/src/marinade/idl/idl.json +0 -1962
  177. package/src/marinade/index.ts +0 -73
  178. package/src/marinade/types.ts +0 -3925
  179. package/src/math/amm.ts +0 -1758
  180. package/src/math/auction.ts +0 -480
  181. package/src/math/bankruptcy.ts +0 -138
  182. package/src/math/builder.ts +0 -130
  183. package/src/math/conversion.ts +0 -45
  184. package/src/math/exchangeStatus.ts +0 -261
  185. package/src/math/funding.ts +0 -498
  186. package/src/math/insurance.ts +0 -171
  187. package/src/math/liquidation.ts +0 -433
  188. package/src/math/margin.ts +0 -327
  189. package/src/math/market.ts +0 -487
  190. package/src/math/oracles.ts +0 -477
  191. package/src/math/orders.ts +0 -500
  192. package/src/math/position.ts +0 -381
  193. package/src/math/repeg.ts +0 -223
  194. package/src/math/spotBalance.ts +0 -996
  195. package/src/math/spotMarket.ts +0 -115
  196. package/src/math/spotPosition.ts +0 -263
  197. package/src/math/state.ts +0 -71
  198. package/src/math/superStake.ts +0 -602
  199. package/src/math/tiers.ts +0 -73
  200. package/src/math/trade.ts +0 -879
  201. package/src/math/utils.ts +0 -183
  202. package/src/memcmp.ts +0 -279
  203. package/src/oracles/oracleClientCache.ts +0 -41
  204. package/src/oracles/oracleId.ts +0 -99
  205. package/src/oracles/prelaunchOracleClient.ts +0 -63
  206. package/src/oracles/pythClient.ts +0 -125
  207. package/src/oracles/pythLazerClient.ts +0 -141
  208. package/src/oracles/quoteAssetOracleClient.ts +0 -43
  209. package/src/oracles/strictOraclePrice.ts +0 -40
  210. package/src/oracles/types.ts +0 -82
  211. package/src/oracles/utils.ts +0 -45
  212. package/src/orderParams.ts +0 -117
  213. package/src/orderSubscriber/OrderSubscriber.ts +0 -378
  214. package/src/orderSubscriber/PollingSubscription.ts +0 -50
  215. package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
  216. package/src/orderSubscriber/grpcSubscription.ts +0 -155
  217. package/src/orderSubscriber/index.ts +0 -7
  218. package/src/orderSubscriber/types.ts +0 -64
  219. package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
  220. package/src/priorityFee/averageStrategy.ts +0 -13
  221. package/src/priorityFee/ewmaStrategy.ts +0 -51
  222. package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
  223. package/src/priorityFee/index.ts +0 -16
  224. package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
  225. package/src/priorityFee/maxStrategy.ts +0 -8
  226. package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
  227. package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
  228. package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
  229. package/src/priorityFee/types.ts +0 -82
  230. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
  231. package/src/pyth/constants.ts +0 -9
  232. package/src/pyth/index.ts +0 -15
  233. package/src/pyth/pythLazerSubscriber.ts +0 -365
  234. package/src/pyth/types.ts +0 -4451
  235. package/src/pyth/utils.ts +0 -13
  236. package/src/slot/SlotSubscriber.ts +0 -126
  237. package/src/slot/SlothashSubscriber.ts +0 -163
  238. package/src/swap/UnifiedSwapClient.ts +0 -315
  239. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
  240. package/src/swift/index.ts +0 -10
  241. package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
  242. package/src/swift/swiftOrderSubscriber.ts +0 -351
  243. package/src/testClient.ts +0 -42
  244. package/src/titan/titanClient.ts +0 -438
  245. package/src/token/index.ts +0 -13
  246. package/src/tokenFaucet.ts +0 -296
  247. package/src/tx/baseTxSender.ts +0 -651
  248. package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
  249. package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
  250. package/src/tx/blockhashFetcher/types.ts +0 -9
  251. package/src/tx/fastSingleTxSender.ts +0 -200
  252. package/src/tx/forwardOnlyTxSender.ts +0 -193
  253. package/src/tx/priorityFeeCalculator.ts +0 -117
  254. package/src/tx/reportTransactionError.ts +0 -176
  255. package/src/tx/retryTxSender.ts +0 -177
  256. package/src/tx/txHandler.ts +0 -1009
  257. package/src/tx/txParamProcessor.ts +0 -225
  258. package/src/tx/types.ts +0 -117
  259. package/src/tx/utils.ts +0 -133
  260. package/src/tx/whileValidTxSender.ts +0 -377
  261. package/src/types.ts +0 -2575
  262. package/src/user.ts +0 -5316
  263. package/src/userConfig.ts +0 -38
  264. package/src/userMap/PollingSubscription.ts +0 -61
  265. package/src/userMap/WebsocketSubscription.ts +0 -93
  266. package/src/userMap/grpcSubscription.ts +0 -93
  267. package/src/userMap/referrerMap.ts +0 -360
  268. package/src/userMap/revenueShareEscrowMap.ts +0 -342
  269. package/src/userMap/userMap.ts +0 -784
  270. package/src/userMap/userMapConfig.ts +0 -82
  271. package/src/userMap/userStatsMap.ts +0 -393
  272. package/src/userName.ts +0 -37
  273. package/src/userStats.ts +0 -159
  274. package/src/userStatsConfig.ts +0 -35
  275. package/src/util/TransactionConfirmationManager.ts +0 -333
  276. package/src/util/chainClock.ts +0 -65
  277. package/src/util/computeUnits.ts +0 -101
  278. package/src/util/digest.ts +0 -33
  279. package/src/util/ed25519Utils.ts +0 -95
  280. package/src/util/promiseTimeout.ts +0 -23
  281. package/src/velocityClient.ts +0 -14802
  282. package/src/velocityClientConfig.ts +0 -119
  283. package/src/wallet.ts +0 -91
  284. package/tests/VelocityCore/builder_escrow.test.ts +0 -121
  285. package/tests/VelocityCore/decode.test.ts +0 -16
  286. package/tests/VelocityCore/fill_trigger.test.ts +0 -73
  287. package/tests/VelocityCore/instructions.test.ts +0 -46
  288. package/tests/VelocityCore/pdas.test.ts +0 -30
  289. package/tests/VelocityCore/perp_orders.test.ts +0 -205
  290. package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
  291. package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
  292. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
  293. package/tests/amm/test.ts +0 -2402
  294. package/tests/auctions/test.ts +0 -81
  295. package/tests/bn/test.ts +0 -355
  296. package/tests/builder/builderFee.test.ts +0 -42
  297. package/tests/ci/verifyConstants.ts +0 -393
  298. package/tests/decode/test.ts +0 -262
  299. package/tests/decode/userAccountBufferStrings.ts +0 -102
  300. package/tests/dlob/helpers.ts +0 -748
  301. package/tests/dlob/test.ts +0 -6969
  302. package/tests/dlob/tickSizeStandardization.ts +0 -545
  303. package/tests/events/parseLogsForCuUsage.ts +0 -139
  304. package/tests/exchangeStatus/test.ts +0 -45
  305. package/tests/insurance/test.ts +0 -40
  306. package/tests/liquidation/test.ts +0 -125
  307. package/tests/oracles/mmOracleGate.test.ts +0 -379
  308. package/tests/oracles/pythPegSnap.test.ts +0 -76
  309. package/tests/sdkParity/enumParity.test.ts +0 -84
  310. package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
  311. package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
  312. package/tests/spot/test.ts +0 -281
  313. package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
  314. package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
  315. package/tests/tx/priorityFeeCalculator.ts +0 -77
  316. package/tests/tx/priorityFeeStrategy.ts +0 -95
  317. package/tests/user/bankruptcy.ts +0 -165
  318. package/tests/user/feeAndWithdrawLimits.ts +0 -284
  319. package/tests/user/getMarginCalculation.ts +0 -586
  320. package/tests/user/helpers.ts +0 -184
  321. package/tests/user/liquidations.ts +0 -129
  322. package/tests/user/marginCalculations.test.ts +0 -321
  323. package/tests/user/test.ts +0 -833
  324. package/tsconfig.browser.json +0 -18
  325. package/tsconfig.json +0 -36
@@ -1,342 +0,0 @@
1
- import { PublicKey, RpcResponseAndContext } from '@solana/web3.js';
2
- import { VelocityClient } from '../velocityClient';
3
- import { RevenueShareEscrowAccount } from '../types';
4
- import { getRevenueShareEscrowAccountPublicKey } from '../addresses/pda';
5
- import { getRevenueShareEscrowFilter } from '../memcmp';
6
-
7
- /** In-memory cache mapping each authority to their `RevenueShareEscrow` account (builder/referral fee accrual escrow). */
8
- export class RevenueShareEscrowMap {
9
- /**
10
- * map from authority pubkey to RevenueShareEscrow account data.
11
- */
12
- private authorityEscrowMap = new Map<string, RevenueShareEscrowAccount>();
13
- private velocityClient: VelocityClient;
14
- private parallelSync: boolean;
15
-
16
- private fetchPromise?: Promise<void>;
17
- private fetchPromiseResolver: () => void = () => {};
18
-
19
- /**
20
- * Creates a new RevenueShareEscrowMap instance.
21
- *
22
- * @param {VelocityClient} velocityClient - The VelocityClient instance.
23
- * @param {boolean} parallelSync - Whether to sync accounts in parallel.
24
- */
25
- constructor(velocityClient: VelocityClient, parallelSync?: boolean) {
26
- this.velocityClient = velocityClient;
27
- this.parallelSync = parallelSync !== undefined ? parallelSync : true;
28
- }
29
-
30
- /**
31
- * Populates the map via a one-time `sync()` (no-op if already populated).
32
- * There is no live/push subscription here — call `sync()`/`slowSync()`
33
- * again later to pick up new or updated escrow accounts.
34
- */
35
- public async subscribe() {
36
- if (this.size() > 0) {
37
- return;
38
- }
39
-
40
- await this.velocityClient.subscribe();
41
- await this.sync();
42
- }
43
-
44
- /** Returns true if `authorityPublicKey` has a `RevenueShareEscrow` account cached in the map. */
45
- public has(authorityPublicKey: string): boolean {
46
- return this.authorityEscrowMap.has(authorityPublicKey);
47
- }
48
-
49
- /** Returns the cached `RevenueShareEscrowAccount` for `authorityPublicKey`, or `undefined` if not (yet) in the map. */
50
- public get(
51
- authorityPublicKey: string
52
- ): RevenueShareEscrowAccount | undefined {
53
- return this.authorityEscrowMap.get(authorityPublicKey);
54
- }
55
-
56
- /**
57
- * Enforce that a RevenueShareEscrow will exist for the given authorityPublicKey,
58
- * reading one from the blockchain if necessary.
59
- * @param authorityPublicKey
60
- * @returns
61
- */
62
- public async mustGet(
63
- authorityPublicKey: string
64
- ): Promise<RevenueShareEscrowAccount | undefined> {
65
- if (!this.has(authorityPublicKey)) {
66
- await this.addRevenueShareEscrow(authorityPublicKey);
67
- }
68
- return this.get(authorityPublicKey);
69
- }
70
-
71
- /**
72
- * Fetches and decodes `authority`'s `RevenueShareEscrow` account directly
73
- * via RPC and caches it. If the account does not exist (a normal condition
74
- * — not every authority has an escrow), logs a debug message and leaves the
75
- * map entry absent rather than throwing.
76
- */
77
- public async addRevenueShareEscrow(authority: string) {
78
- const escrowAccountPublicKey = getRevenueShareEscrowAccountPublicKey(
79
- this.velocityClient.program.programId,
80
- new PublicKey(authority)
81
- );
82
-
83
- try {
84
- const accountInfo = await this.velocityClient.connection.getAccountInfo(
85
- escrowAccountPublicKey,
86
- 'processed'
87
- );
88
-
89
- if (accountInfo && accountInfo.data) {
90
- const escrow = (
91
- this.velocityClient.program.account as any
92
- ).revenueShareEscrow.coder.accounts.decode(
93
- 'revenueShareEscrow',
94
- accountInfo.data
95
- ) as RevenueShareEscrowAccount;
96
-
97
- this.authorityEscrowMap.set(authority, escrow);
98
- }
99
- } catch (error) {
100
- // RevenueShareEscrow account doesn't exist for this authority, which is normal
101
- console.debug(
102
- `No RevenueShareEscrow account found for authority: ${authority}`
103
- );
104
- }
105
- }
106
-
107
- /** Number of `RevenueShareEscrow` accounts currently cached in the map. */
108
- public size(): number {
109
- return this.authorityEscrowMap.size;
110
- }
111
-
112
- /** Fully (re)populates the map via `syncAll` (a `getProgramAccounts` scan). Concurrent calls share the same in-flight promise. */
113
- public async sync(): Promise<void> {
114
- if (this.fetchPromise) {
115
- return this.fetchPromise;
116
- }
117
-
118
- this.fetchPromise = new Promise((resolver) => {
119
- this.fetchPromiseResolver = resolver;
120
- });
121
-
122
- try {
123
- await this.syncAll();
124
- } finally {
125
- this.fetchPromiseResolver();
126
- this.fetchPromise = undefined;
127
- }
128
- }
129
-
130
- /**
131
- * A slow, bankrun test friendly version of sync(), uses getAccountInfo on every cached account to refresh data
132
- * @returns
133
- */
134
- public async slowSync(): Promise<void> {
135
- if (this.fetchPromise) {
136
- return this.fetchPromise;
137
- }
138
- for (const authority of this.authorityEscrowMap.keys()) {
139
- const accountInfo = await this.velocityClient.connection.getAccountInfo(
140
- getRevenueShareEscrowAccountPublicKey(
141
- this.velocityClient.program.programId,
142
- new PublicKey(authority)
143
- ),
144
- 'confirmed'
145
- );
146
- if (accountInfo === null) {
147
- throw new Error(
148
- `RevenueShareEscrow account not found for authority ${authority} during slowSync`
149
- );
150
- }
151
- const escrowNew = (
152
- this.velocityClient.program.account as any
153
- ).revenueShareEscrow.coder.accounts.decode(
154
- 'revenueShareEscrow',
155
- accountInfo.data
156
- ) as RevenueShareEscrowAccount;
157
- this.authorityEscrowMap.set(authority, escrowNew);
158
- }
159
- }
160
-
161
- /**
162
- * Fetches and decodes every `RevenueShareEscrow` program account (via
163
- * `getRevenueShareEscrowFilter`), in batches of 100 with a 10ms delay
164
- * between batches to avoid overwhelming the RPC, and caches them keyed by
165
- * `escrow.authority`. Batch decoding runs in parallel unless constructed
166
- * with `parallelSync: false`. A decode failure for one account is logged
167
- * and skipped rather than aborting the whole sync.
168
- */
169
- public async syncAll(): Promise<void> {
170
- const rpcRequestArgs = [
171
- this.velocityClient.program.programId.toBase58(),
172
- {
173
- commitment: this.velocityClient.opts.commitment,
174
- filters: [getRevenueShareEscrowFilter()],
175
- encoding: 'base64',
176
- withContext: true,
177
- },
178
- ];
179
-
180
- const rpcJSONResponse: any =
181
- // @ts-ignore
182
- await this.velocityClient.connection._rpcRequest(
183
- 'getProgramAccounts',
184
- rpcRequestArgs
185
- );
186
-
187
- const rpcResponseAndContext: RpcResponseAndContext<
188
- Array<{
189
- pubkey: string;
190
- account: {
191
- data: [string, string];
192
- };
193
- }>
194
- > = rpcJSONResponse.result;
195
-
196
- const batchSize = 100;
197
- for (let i = 0; i < rpcResponseAndContext.value.length; i += batchSize) {
198
- const batch = rpcResponseAndContext.value.slice(i, i + batchSize);
199
-
200
- if (this.parallelSync) {
201
- await Promise.all(
202
- batch.map(async (programAccount) => {
203
- try {
204
- // @ts-ignore
205
- const buffer = Buffer.from(
206
- programAccount.account.data[0],
207
- programAccount.account.data[1] as BufferEncoding
208
- );
209
-
210
- const escrow = (
211
- this.velocityClient.program.account as any
212
- ).revenueShareEscrow.coder.accounts.decode(
213
- 'revenueShareEscrow',
214
- buffer
215
- ) as RevenueShareEscrowAccount;
216
-
217
- // Extract authority from the account data
218
- const authorityKey = escrow.authority.toBase58();
219
- this.authorityEscrowMap.set(authorityKey, escrow);
220
- } catch (error) {
221
- console.warn(
222
- `Failed to decode RevenueShareEscrow account ${programAccount.pubkey}:`,
223
- error
224
- );
225
- }
226
- })
227
- );
228
- } else {
229
- for (const programAccount of batch) {
230
- try {
231
- // @ts-ignore
232
- const buffer = Buffer.from(
233
- programAccount.account.data[0],
234
- programAccount.account.data[1] as BufferEncoding
235
- );
236
-
237
- const escrow = (
238
- this.velocityClient.program.account as any
239
- ).revenueShareEscrow.coder.accounts.decode(
240
- 'revenueShareEscrow',
241
- buffer
242
- ) as RevenueShareEscrowAccount;
243
-
244
- // Extract authority from the account data
245
- const authorityKey = escrow.authority.toBase58();
246
- this.authorityEscrowMap.set(authorityKey, escrow);
247
- } catch (error) {
248
- console.warn(
249
- `Failed to decode RevenueShareEscrow account ${programAccount.pubkey}:`,
250
- error
251
- );
252
- }
253
- }
254
- }
255
-
256
- // Add a small delay between batches to avoid overwhelming the RPC
257
- await new Promise((resolve) => setTimeout(resolve, 10));
258
- }
259
- }
260
-
261
- /** Returns a shallow copy of the full authority-to-escrow map (mutating the returned map does not affect the cache). */
262
- public getAll(): Map<string, RevenueShareEscrowAccount> {
263
- return new Map(this.authorityEscrowMap);
264
- }
265
-
266
- /** Returns the base58 authority pubkeys of every `RevenueShareEscrow` account currently cached. */
267
- public getAuthorities(): string[] {
268
- return Array.from(this.authorityEscrowMap.keys());
269
- }
270
-
271
- /**
272
- * Get `RevenueShareEscrow` accounts that have at least one entry in
273
- * `approvedBuilders` — builders this user has approved to charge an order
274
- * fee (not "referrers": `referrer` is a separate field on the account).
275
- */
276
- public getEscrowsWithApprovedReferrers(): Map<
277
- string,
278
- RevenueShareEscrowAccount
279
- > {
280
- const result = new Map<string, RevenueShareEscrowAccount>();
281
- for (const [authority, escrow] of this.authorityEscrowMap) {
282
- if (escrow.approvedBuilders && escrow.approvedBuilders.length > 0) {
283
- result.set(authority, escrow);
284
- }
285
- }
286
- return result;
287
- }
288
-
289
- /**
290
- * Get `RevenueShareEscrow` accounts with at least one entry in `orders` —
291
- * the ring buffer of in-flight builder/referral fee accruals not yet
292
- * settled via settle-PnL.
293
- */
294
- public getEscrowsWithOrders(): Map<string, RevenueShareEscrowAccount> {
295
- const result = new Map<string, RevenueShareEscrowAccount>();
296
- for (const [authority, escrow] of this.authorityEscrowMap) {
297
- if (escrow.orders && escrow.orders.length > 0) {
298
- result.set(authority, escrow);
299
- }
300
- }
301
- return result;
302
- }
303
-
304
- /**
305
- * Returns the first cached `RevenueShareEscrow` account whose `referrer`
306
- * field equals `referrerPublicKey`. There is no reverse index, so this is
307
- * an O(n) scan over every cached escrow; prefer `getAllByReferrer` if more
308
- * than one escrow may share the same referrer.
309
- */
310
- public getByReferrer(
311
- referrerPublicKey: string
312
- ): RevenueShareEscrowAccount | undefined {
313
- for (const escrow of this.authorityEscrowMap.values()) {
314
- if (escrow.referrer.toBase58() === referrerPublicKey) {
315
- return escrow;
316
- }
317
- }
318
- return undefined;
319
- }
320
-
321
- /**
322
- * Returns every cached `RevenueShareEscrow` account whose `referrer` field
323
- * equals `referrerPublicKey`. O(n) scan over every cached escrow (no
324
- * reverse index).
325
- */
326
- public getAllByReferrer(
327
- referrerPublicKey: string
328
- ): RevenueShareEscrowAccount[] {
329
- const result: RevenueShareEscrowAccount[] = [];
330
- for (const escrow of this.authorityEscrowMap.values()) {
331
- if (escrow.referrer.toBase58() === referrerPublicKey) {
332
- result.push(escrow);
333
- }
334
- }
335
- return result;
336
- }
337
-
338
- /** Clears the in-memory map. Does not tear down any RPC subscriptions (this class has none — `subscribe` only triggers a one-time sync). */
339
- public async unsubscribe() {
340
- this.authorityEscrowMap.clear();
341
- }
342
- }