@velocity-exchange/sdk 0.4.0 → 0.6.0

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 (323) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/adminClient.d.ts +35 -0
  3. package/lib/browser/adminClient.js +65 -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 +146 -3
  9. package/lib/browser/idl/velocity.json +147 -4
  10. package/lib/browser/orderSubscriber/OrderSubscriber.js +3 -0
  11. package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
  12. package/lib/browser/types.d.ts +4 -0
  13. package/lib/browser/user.d.ts +15 -0
  14. package/lib/browser/user.js +37 -1
  15. package/lib/browser/velocityClient.d.ts +46 -10
  16. package/lib/browser/velocityClient.js +107 -35
  17. package/lib/node/adminClient.d.ts +35 -0
  18. package/lib/node/adminClient.d.ts.map +1 -1
  19. package/lib/node/adminClient.js +65 -0
  20. package/lib/node/config.d.ts.map +1 -1
  21. package/lib/node/config.js +6 -7
  22. package/lib/node/constants/numericConstants.d.ts +1 -1
  23. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  24. package/lib/node/constants/numericConstants.js +1 -1
  25. package/lib/node/decode/user.d.ts.map +1 -1
  26. package/lib/node/decode/user.js +5 -1
  27. package/lib/node/idl/velocity.d.ts +146 -3
  28. package/lib/node/idl/velocity.d.ts.map +1 -1
  29. package/lib/node/idl/velocity.json +147 -4
  30. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  31. package/lib/node/orderSubscriber/OrderSubscriber.js +3 -0
  32. package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
  33. package/lib/node/pyth/pythLazerSubscriber.js +37 -27
  34. package/lib/node/types.d.ts +4 -0
  35. package/lib/node/types.d.ts.map +1 -1
  36. package/lib/node/user.d.ts +15 -0
  37. package/lib/node/user.d.ts.map +1 -1
  38. package/lib/node/user.js +37 -1
  39. package/lib/node/velocityClient.d.ts +46 -10
  40. package/lib/node/velocityClient.d.ts.map +1 -1
  41. package/lib/node/velocityClient.js +107 -35
  42. package/package.json +7 -3
  43. package/.prettierignore +0 -1
  44. package/CHANGELOG.md +0 -132
  45. package/build-browser.js +0 -58
  46. package/bunfig.toml +0 -3
  47. package/esbuild-shims.js +0 -12
  48. package/scripts/deposit-isolated-positions.ts +0 -110
  49. package/scripts/find-flagged-users.ts +0 -213
  50. package/scripts/grpc-client-test-comparison.ts +0 -372
  51. package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
  52. package/scripts/postbuild.js +0 -95
  53. package/scripts/single-grpc-client-test.ts +0 -284
  54. package/scripts/withdraw-isolated-positions.ts +0 -174
  55. package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
  56. package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
  57. package/src/accounts/basicUserAccountSubscriber.ts +0 -79
  58. package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
  59. package/src/accounts/bulkAccountLoader.ts +0 -358
  60. package/src/accounts/bulkUserStatsSubscription.ts +0 -40
  61. package/src/accounts/bulkUserSubscription.ts +0 -39
  62. package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
  63. package/src/accounts/fetch.ts +0 -200
  64. package/src/accounts/grpcAccountSubscriber.ts +0 -225
  65. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
  66. package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
  67. package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
  68. package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
  69. package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
  70. package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
  71. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
  72. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
  73. package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
  74. package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
  75. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
  76. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
  77. package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
  78. package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
  79. package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
  80. package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
  81. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
  82. package/src/accounts/testBulkAccountLoader.ts +0 -59
  83. package/src/accounts/types.ts +0 -428
  84. package/src/accounts/utils.ts +0 -90
  85. package/src/accounts/webSocketAccountSubscriber.ts +0 -304
  86. package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
  87. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
  88. package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
  89. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
  90. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
  91. package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
  92. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
  93. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
  94. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
  95. package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
  96. package/src/addresses/marketAddresses.ts +0 -28
  97. package/src/addresses/pda.ts +0 -620
  98. package/src/adminClient.ts +0 -8136
  99. package/src/assert/assert.ts +0 -5
  100. package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
  101. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
  102. package/src/auctionSubscriber/index.ts +0 -9
  103. package/src/auctionSubscriber/types.ts +0 -30
  104. package/src/bankrun/bankrunConnection.ts +0 -630
  105. package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
  106. package/src/blockhashSubscriber/index.ts +0 -6
  107. package/src/blockhashSubscriber/types.ts +0 -13
  108. package/src/clock/clockSubscriber.ts +0 -146
  109. package/src/config.ts +0 -312
  110. package/src/constants/index.ts +0 -9
  111. package/src/constants/numericConstants.ts +0 -194
  112. package/src/constants/perpMarkets.ts +0 -127
  113. package/src/constants/spotMarkets.ts +0 -104
  114. package/src/constants/txConstants.ts +0 -2
  115. package/src/constituentMap/constituentMap.ts +0 -305
  116. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
  117. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
  118. package/src/core/VelocityCore.ts +0 -606
  119. package/src/core/index.ts +0 -12
  120. package/src/core/instructions/deposit.ts +0 -64
  121. package/src/core/instructions/fill.ts +0 -51
  122. package/src/core/instructions/funding.ts +0 -33
  123. package/src/core/instructions/liquidation.ts +0 -55
  124. package/src/core/instructions/orders.ts +0 -84
  125. package/src/core/instructions/perpOrders.ts +0 -312
  126. package/src/core/instructions/settlement.ts +0 -40
  127. package/src/core/instructions/trigger.ts +0 -41
  128. package/src/core/instructions/withdraw.ts +0 -65
  129. package/src/core/remainingAccounts.ts +0 -320
  130. package/src/core/signedMsg.ts +0 -109
  131. package/src/decode/customCoder.ts +0 -148
  132. package/src/decode/user.ts +0 -401
  133. package/src/dlob/DLOB.ts +0 -2793
  134. package/src/dlob/DLOBNode.ts +0 -305
  135. package/src/dlob/DLOBSubscriber.ts +0 -269
  136. package/src/dlob/NodeList.ts +0 -244
  137. package/src/dlob/orderBookLevels.ts +0 -695
  138. package/src/dlob/types.ts +0 -37
  139. package/src/events/eventList.ts +0 -114
  140. package/src/events/eventSubscriber.ts +0 -521
  141. package/src/events/eventsServerLogProvider.ts +0 -189
  142. package/src/events/fetchLogs.ts +0 -219
  143. package/src/events/parse.ts +0 -271
  144. package/src/events/pollingLogProvider.ts +0 -113
  145. package/src/events/sort.ts +0 -51
  146. package/src/events/txEventCache.ts +0 -92
  147. package/src/events/types.ts +0 -337
  148. package/src/events/webSocketLogProvider.ts +0 -152
  149. package/src/factory/bigNum.ts +0 -709
  150. package/src/factory/oracleClient.ts +0 -73
  151. package/src/idl/pyth.json +0 -142
  152. package/src/idl/pyth.ts +0 -97
  153. package/src/idl/pyth_solana_receiver.json +0 -628
  154. package/src/idl/token_faucet.json +0 -229
  155. package/src/idl/token_faucet.ts +0 -197
  156. package/src/idl/velocity.json +0 -23974
  157. package/src/idl/velocity.ts +0 -23980
  158. package/src/index.ts +0 -150
  159. package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
  160. package/src/isomorphic/README.md +0 -19
  161. package/src/isomorphic/anchor.browser.ts +0 -44
  162. package/src/isomorphic/anchor.node.ts +0 -1
  163. package/src/isomorphic/anchor.ts +0 -1
  164. package/src/isomorphic/anchor29.browser.ts +0 -24
  165. package/src/isomorphic/anchor29.node.ts +0 -1
  166. package/src/isomorphic/anchor29.ts +0 -1
  167. package/src/isomorphic/grpc.browser.ts +0 -4
  168. package/src/isomorphic/grpc.node.ts +0 -130
  169. package/src/isomorphic/grpc.ts +0 -1
  170. package/src/jupiter/jupiterClient.ts +0 -502
  171. package/src/keypair.ts +0 -32
  172. package/src/margin/README.md +0 -138
  173. package/src/marginCalculation.ts +0 -407
  174. package/src/marinade/idl/idl.json +0 -1962
  175. package/src/marinade/index.ts +0 -73
  176. package/src/marinade/types.ts +0 -3925
  177. package/src/math/amm.ts +0 -1758
  178. package/src/math/auction.ts +0 -480
  179. package/src/math/bankruptcy.ts +0 -138
  180. package/src/math/builder.ts +0 -130
  181. package/src/math/conversion.ts +0 -45
  182. package/src/math/exchangeStatus.ts +0 -261
  183. package/src/math/funding.ts +0 -498
  184. package/src/math/insurance.ts +0 -171
  185. package/src/math/liquidation.ts +0 -433
  186. package/src/math/margin.ts +0 -327
  187. package/src/math/market.ts +0 -487
  188. package/src/math/oracles.ts +0 -477
  189. package/src/math/orders.ts +0 -500
  190. package/src/math/position.ts +0 -381
  191. package/src/math/repeg.ts +0 -223
  192. package/src/math/spotBalance.ts +0 -996
  193. package/src/math/spotMarket.ts +0 -115
  194. package/src/math/spotPosition.ts +0 -263
  195. package/src/math/state.ts +0 -71
  196. package/src/math/superStake.ts +0 -602
  197. package/src/math/tiers.ts +0 -73
  198. package/src/math/trade.ts +0 -879
  199. package/src/math/utils.ts +0 -183
  200. package/src/memcmp.ts +0 -279
  201. package/src/oracles/oracleClientCache.ts +0 -41
  202. package/src/oracles/oracleId.ts +0 -99
  203. package/src/oracles/prelaunchOracleClient.ts +0 -63
  204. package/src/oracles/pythClient.ts +0 -125
  205. package/src/oracles/pythLazerClient.ts +0 -141
  206. package/src/oracles/quoteAssetOracleClient.ts +0 -43
  207. package/src/oracles/strictOraclePrice.ts +0 -40
  208. package/src/oracles/types.ts +0 -82
  209. package/src/oracles/utils.ts +0 -45
  210. package/src/orderParams.ts +0 -117
  211. package/src/orderSubscriber/OrderSubscriber.ts +0 -378
  212. package/src/orderSubscriber/PollingSubscription.ts +0 -50
  213. package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
  214. package/src/orderSubscriber/grpcSubscription.ts +0 -155
  215. package/src/orderSubscriber/index.ts +0 -7
  216. package/src/orderSubscriber/types.ts +0 -64
  217. package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
  218. package/src/priorityFee/averageStrategy.ts +0 -13
  219. package/src/priorityFee/ewmaStrategy.ts +0 -51
  220. package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
  221. package/src/priorityFee/index.ts +0 -16
  222. package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
  223. package/src/priorityFee/maxStrategy.ts +0 -8
  224. package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
  225. package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
  226. package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
  227. package/src/priorityFee/types.ts +0 -82
  228. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
  229. package/src/pyth/constants.ts +0 -9
  230. package/src/pyth/index.ts +0 -15
  231. package/src/pyth/pythLazerSubscriber.ts +0 -365
  232. package/src/pyth/types.ts +0 -4451
  233. package/src/pyth/utils.ts +0 -13
  234. package/src/slot/SlotSubscriber.ts +0 -126
  235. package/src/slot/SlothashSubscriber.ts +0 -163
  236. package/src/swap/UnifiedSwapClient.ts +0 -315
  237. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
  238. package/src/swift/index.ts +0 -10
  239. package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
  240. package/src/swift/swiftOrderSubscriber.ts +0 -351
  241. package/src/testClient.ts +0 -42
  242. package/src/titan/titanClient.ts +0 -438
  243. package/src/token/index.ts +0 -13
  244. package/src/tokenFaucet.ts +0 -296
  245. package/src/tx/baseTxSender.ts +0 -651
  246. package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
  247. package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
  248. package/src/tx/blockhashFetcher/types.ts +0 -9
  249. package/src/tx/fastSingleTxSender.ts +0 -200
  250. package/src/tx/forwardOnlyTxSender.ts +0 -193
  251. package/src/tx/priorityFeeCalculator.ts +0 -117
  252. package/src/tx/reportTransactionError.ts +0 -176
  253. package/src/tx/retryTxSender.ts +0 -177
  254. package/src/tx/txHandler.ts +0 -1009
  255. package/src/tx/txParamProcessor.ts +0 -225
  256. package/src/tx/types.ts +0 -117
  257. package/src/tx/utils.ts +0 -133
  258. package/src/tx/whileValidTxSender.ts +0 -377
  259. package/src/types.ts +0 -2575
  260. package/src/user.ts +0 -5316
  261. package/src/userConfig.ts +0 -38
  262. package/src/userMap/PollingSubscription.ts +0 -61
  263. package/src/userMap/WebsocketSubscription.ts +0 -93
  264. package/src/userMap/grpcSubscription.ts +0 -93
  265. package/src/userMap/referrerMap.ts +0 -360
  266. package/src/userMap/revenueShareEscrowMap.ts +0 -342
  267. package/src/userMap/userMap.ts +0 -784
  268. package/src/userMap/userMapConfig.ts +0 -82
  269. package/src/userMap/userStatsMap.ts +0 -393
  270. package/src/userName.ts +0 -37
  271. package/src/userStats.ts +0 -159
  272. package/src/userStatsConfig.ts +0 -35
  273. package/src/util/TransactionConfirmationManager.ts +0 -333
  274. package/src/util/chainClock.ts +0 -65
  275. package/src/util/computeUnits.ts +0 -101
  276. package/src/util/digest.ts +0 -33
  277. package/src/util/ed25519Utils.ts +0 -95
  278. package/src/util/promiseTimeout.ts +0 -23
  279. package/src/velocityClient.ts +0 -14802
  280. package/src/velocityClientConfig.ts +0 -119
  281. package/src/wallet.ts +0 -91
  282. package/tests/VelocityCore/builder_escrow.test.ts +0 -121
  283. package/tests/VelocityCore/decode.test.ts +0 -16
  284. package/tests/VelocityCore/fill_trigger.test.ts +0 -73
  285. package/tests/VelocityCore/instructions.test.ts +0 -46
  286. package/tests/VelocityCore/pdas.test.ts +0 -30
  287. package/tests/VelocityCore/perp_orders.test.ts +0 -205
  288. package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
  289. package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
  290. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
  291. package/tests/amm/test.ts +0 -2402
  292. package/tests/auctions/test.ts +0 -81
  293. package/tests/bn/test.ts +0 -355
  294. package/tests/builder/builderFee.test.ts +0 -42
  295. package/tests/ci/verifyConstants.ts +0 -393
  296. package/tests/decode/test.ts +0 -262
  297. package/tests/decode/userAccountBufferStrings.ts +0 -102
  298. package/tests/dlob/helpers.ts +0 -748
  299. package/tests/dlob/test.ts +0 -6969
  300. package/tests/dlob/tickSizeStandardization.ts +0 -545
  301. package/tests/events/parseLogsForCuUsage.ts +0 -139
  302. package/tests/exchangeStatus/test.ts +0 -45
  303. package/tests/insurance/test.ts +0 -40
  304. package/tests/liquidation/test.ts +0 -125
  305. package/tests/oracles/mmOracleGate.test.ts +0 -379
  306. package/tests/oracles/pythPegSnap.test.ts +0 -76
  307. package/tests/sdkParity/enumParity.test.ts +0 -84
  308. package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
  309. package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
  310. package/tests/spot/test.ts +0 -281
  311. package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
  312. package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
  313. package/tests/tx/priorityFeeCalculator.ts +0 -77
  314. package/tests/tx/priorityFeeStrategy.ts +0 -95
  315. package/tests/user/bankruptcy.ts +0 -165
  316. package/tests/user/feeAndWithdrawLimits.ts +0 -284
  317. package/tests/user/getMarginCalculation.ts +0 -586
  318. package/tests/user/helpers.ts +0 -184
  319. package/tests/user/liquidations.ts +0 -129
  320. package/tests/user/marginCalculations.test.ts +0 -321
  321. package/tests/user/test.ts +0 -833
  322. package/tsconfig.browser.json +0 -18
  323. package/tsconfig.json +0 -36
@@ -1,620 +0,0 @@
1
- /**
2
- * PDA derivation helpers for all Velocity protocol accounts.
3
- * Covers: User, UserStats, PerpMarket, SpotMarket, InsuranceFundStake, State,
4
- * LP pool (and its constituents/caches), revenue share, and vault PDAs.
5
- * All functions are pure (no RPC calls).
6
- */
7
- import { PublicKey } from '@solana/web3.js';
8
- import * as anchor from '../isomorphic/anchor';
9
- import {
10
- getAssociatedTokenAddress,
11
- TOKEN_2022_PROGRAM_ID,
12
- TOKEN_PROGRAM_ID,
13
- } from '@solana/spl-token';
14
- import { SpotMarketAccount, TokenProgramFlag } from '../types';
15
-
16
- /**
17
- * Derives the singleton `State` account PDA (seed `"velocity_state"`), plus its bump nonce. There
18
- * is exactly one `State` account per program deployment.
19
- * @param programId - Deployed velocity program id.
20
- * @returns Tuple of `[stateAccountPublicKey, bumpNonce]`.
21
- */
22
- export async function getVelocityStateAccountPublicKeyAndNonce(
23
- programId: PublicKey
24
- ): Promise<[PublicKey, number]> {
25
- return Promise.resolve(
26
- PublicKey.findProgramAddressSync(
27
- [Buffer.from(anchor.utils.bytes.utf8.encode('velocity_state'))],
28
- programId
29
- )
30
- );
31
- }
32
-
33
- /**
34
- * Derives the singleton `State` account PDA (seed `"velocity_state"`).
35
- * @param programId - Deployed velocity program id.
36
- * @returns The `State` account's public key.
37
- */
38
- export async function getVelocityStateAccountPublicKey(
39
- programId: PublicKey
40
- ): Promise<PublicKey> {
41
- return (await getVelocityStateAccountPublicKeyAndNonce(programId))[0];
42
- }
43
-
44
- /**
45
- * Derives a `User` (sub-account) PDA, plus its bump nonce, from seeds `["user", authority,
46
- * subAccountId as u16 LE]`.
47
- * @param programId - Deployed velocity program id.
48
- * @param authority - Wallet pubkey that owns the sub-account.
49
- * @param subAccountId - Sub-account index (u16); defaults to 0, the wallet's first/main sub-account.
50
- * @returns Tuple of `[userAccountPublicKey, bumpNonce]`.
51
- */
52
- export async function getUserAccountPublicKeyAndNonce(
53
- programId: PublicKey,
54
- authority: PublicKey,
55
- subAccountId = 0
56
- ): Promise<[PublicKey, number]> {
57
- return Promise.resolve(
58
- PublicKey.findProgramAddressSync(
59
- [
60
- Buffer.from(anchor.utils.bytes.utf8.encode('user')),
61
- authority.toBuffer(),
62
- new anchor.BN(subAccountId).toArrayLike(Buffer, 'le', 2),
63
- ],
64
- programId
65
- )
66
- );
67
- }
68
-
69
- /**
70
- * Derives a `User` (sub-account) PDA from seeds `["user", authority, subAccountId as u16 LE]`.
71
- * @param programId - Deployed velocity program id.
72
- * @param authority - Wallet pubkey that owns the sub-account.
73
- * @param subAccountId - Sub-account index (u16); defaults to 0, the wallet's first/main sub-account.
74
- * @returns The `User` account's public key.
75
- */
76
- export async function getUserAccountPublicKey(
77
- programId: PublicKey,
78
- authority: PublicKey,
79
- subAccountId = 0
80
- ): Promise<PublicKey> {
81
- return (
82
- await getUserAccountPublicKeyAndNonce(programId, authority, subAccountId)
83
- )[0];
84
- }
85
-
86
- /**
87
- * Synchronous variant of `getUserAccountPublicKey` (no RPC/async round-trip; pure PDA math).
88
- * @param programId - Deployed velocity program id.
89
- * @param authority - Wallet pubkey that owns the sub-account.
90
- * @param subAccountId - Sub-account index (u16); defaults to 0.
91
- * @returns The `User` account's public key.
92
- */
93
- export function getUserAccountPublicKeySync(
94
- programId: PublicKey,
95
- authority: PublicKey,
96
- subAccountId = 0
97
- ): PublicKey {
98
- return PublicKey.findProgramAddressSync(
99
- [
100
- Buffer.from(anchor.utils.bytes.utf8.encode('user')),
101
- authority.toBuffer(),
102
- new anchor.BN(subAccountId).toArrayLike(Buffer, 'le', 2),
103
- ],
104
- programId
105
- )[0];
106
- }
107
-
108
- /**
109
- * Derives the `UserStats` PDA (one per authority, shared across all of that authority's
110
- * sub-accounts) from seeds `["user_stats", authority]`.
111
- * @param programId - Deployed velocity program id.
112
- * @param authority - Wallet pubkey the stats account tracks.
113
- * @returns The `UserStats` account's public key.
114
- */
115
- export function getUserStatsAccountPublicKey(
116
- programId: PublicKey,
117
- authority: PublicKey
118
- ): PublicKey {
119
- return PublicKey.findProgramAddressSync(
120
- [
121
- Buffer.from(anchor.utils.bytes.utf8.encode('user_stats')),
122
- authority.toBuffer(),
123
- ],
124
- programId
125
- )[0];
126
- }
127
-
128
- /**
129
- * Derives the `SignedMsgUserOrders` PDA (holds a user's pending swift/signed-message orders) from
130
- * seeds `["SIGNED_MSG", authority]`.
131
- * @param programId - Deployed velocity program id.
132
- * @param authority - Wallet pubkey (the user's main authority, not the sub-account) that owns the account.
133
- * @returns The `SignedMsgUserOrders` account's public key.
134
- */
135
- export function getSignedMsgUserAccountPublicKey(
136
- programId: PublicKey,
137
- authority: PublicKey
138
- ): PublicKey {
139
- return PublicKey.findProgramAddressSync(
140
- [
141
- Buffer.from(anchor.utils.bytes.utf8.encode('SIGNED_MSG')),
142
- authority.toBuffer(),
143
- ],
144
- programId
145
- )[0];
146
- }
147
-
148
- /**
149
- * Derives the PDA that stores a user's approved signed-message (swift) websocket delegate keys,
150
- * from seeds `["SIGNED_MSG_WS", authority]`.
151
- * @param programId - Deployed velocity program id.
152
- * @param authority - Wallet pubkey (the user's main authority) that owns the delegates account.
153
- * @returns The delegates account's public key.
154
- */
155
- export function getSignedMsgWsDelegatesAccountPublicKey(
156
- programId: PublicKey,
157
- authority: PublicKey
158
- ): PublicKey {
159
- return PublicKey.findProgramAddressSync(
160
- [
161
- Buffer.from(anchor.utils.bytes.utf8.encode('SIGNED_MSG_WS')),
162
- authority.toBuffer(),
163
- ],
164
- programId
165
- )[0];
166
- }
167
-
168
- /**
169
- * Derives a `PerpMarket` PDA from seeds `["perp_market", marketIndex as u16 LE]`.
170
- * @param programId - Deployed velocity program id.
171
- * @param marketIndex - Perp market index.
172
- * @returns The `PerpMarket` account's public key.
173
- */
174
- export async function getPerpMarketPublicKey(
175
- programId: PublicKey,
176
- marketIndex: number
177
- ): Promise<PublicKey> {
178
- return (
179
- await PublicKey.findProgramAddress(
180
- [
181
- Buffer.from(anchor.utils.bytes.utf8.encode('perp_market')),
182
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
183
- ],
184
- programId
185
- )
186
- )[0];
187
- }
188
-
189
- /**
190
- * Synchronous variant of `getPerpMarketPublicKey`.
191
- * @param programId - Deployed velocity program id.
192
- * @param marketIndex - Perp market index.
193
- * @returns The `PerpMarket` account's public key.
194
- */
195
- export function getPerpMarketPublicKeySync(
196
- programId: PublicKey,
197
- marketIndex: number
198
- ): PublicKey {
199
- return PublicKey.findProgramAddressSync(
200
- [
201
- Buffer.from(anchor.utils.bytes.utf8.encode('perp_market')),
202
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
203
- ],
204
- programId
205
- )[0];
206
- }
207
-
208
- /**
209
- * Derives a `SpotMarket` PDA from seeds `["spot_market", marketIndex as u16 LE]`.
210
- * @param programId - Deployed velocity program id.
211
- * @param marketIndex - Spot market index.
212
- * @returns The `SpotMarket` account's public key.
213
- */
214
- export async function getSpotMarketPublicKey(
215
- programId: PublicKey,
216
- marketIndex: number
217
- ): Promise<PublicKey> {
218
- return (
219
- await PublicKey.findProgramAddress(
220
- [
221
- Buffer.from(anchor.utils.bytes.utf8.encode('spot_market')),
222
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
223
- ],
224
- programId
225
- )
226
- )[0];
227
- }
228
-
229
- /**
230
- * Synchronous variant of `getSpotMarketPublicKey`.
231
- * @param programId - Deployed velocity program id.
232
- * @param marketIndex - Spot market index.
233
- * @returns The `SpotMarket` account's public key.
234
- */
235
- export function getSpotMarketPublicKeySync(
236
- programId: PublicKey,
237
- marketIndex: number
238
- ): PublicKey {
239
- return PublicKey.findProgramAddressSync(
240
- [
241
- Buffer.from(anchor.utils.bytes.utf8.encode('spot_market')),
242
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
243
- ],
244
- programId
245
- )[0];
246
- }
247
-
248
- /**
249
- * Derives the token vault PDA (an SPL/Token-2022 token account owned by the `velocity_signer` PDA)
250
- * that custodies a spot market's deposits, from seeds `["spot_market_vault", marketIndex as u16 LE]`.
251
- * @param programId - Deployed velocity program id.
252
- * @param marketIndex - Spot market index.
253
- * @returns The spot market vault token account's public key.
254
- */
255
- export async function getSpotMarketVaultPublicKey(
256
- programId: PublicKey,
257
- marketIndex: number
258
- ): Promise<PublicKey> {
259
- return (
260
- await PublicKey.findProgramAddress(
261
- [
262
- Buffer.from(anchor.utils.bytes.utf8.encode('spot_market_vault')),
263
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
264
- ],
265
- programId
266
- )
267
- )[0];
268
- }
269
-
270
- /**
271
- * Derives the insurance fund's token vault PDA for a market, from seeds `["insurance_fund_vault",
272
- * marketIndex as u16 LE]`.
273
- * @param programId - Deployed velocity program id.
274
- * @param marketIndex - Spot market index whose insurance fund this vault backs.
275
- * @returns The insurance fund vault token account's public key.
276
- */
277
- export async function getInsuranceFundVaultPublicKey(
278
- programId: PublicKey,
279
- marketIndex: number
280
- ): Promise<PublicKey> {
281
- return (
282
- await PublicKey.findProgramAddress(
283
- [
284
- Buffer.from(anchor.utils.bytes.utf8.encode('insurance_fund_vault')),
285
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
286
- ],
287
- programId
288
- )
289
- )[0];
290
- }
291
-
292
- /**
293
- * Derives an `InsuranceFundStake` PDA (an authority's staked share of one market's insurance fund)
294
- * from seeds `["insurance_fund_stake", authority, marketIndex as u16 LE]`.
295
- * @param programId - Deployed velocity program id.
296
- * @param authority - Wallet pubkey staking into the insurance fund.
297
- * @param marketIndex - Spot market index whose insurance fund is being staked into.
298
- * @returns The `InsuranceFundStake` account's public key.
299
- */
300
- export function getInsuranceFundStakeAccountPublicKey(
301
- programId: PublicKey,
302
- authority: PublicKey,
303
- marketIndex: number
304
- ): PublicKey {
305
- return PublicKey.findProgramAddressSync(
306
- [
307
- Buffer.from(anchor.utils.bytes.utf8.encode('insurance_fund_stake')),
308
- authority.toBuffer(),
309
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
310
- ],
311
- programId
312
- )[0];
313
- }
314
-
315
- /**
316
- * Derives the singleton `velocity_signer` PDA — the program-derived authority that owns/signs for
317
- * all program-controlled token vaults (spot market vaults, insurance fund vaults, etc.) via CPI.
318
- * @param programId - Deployed velocity program id.
319
- * @returns The velocity signer PDA's public key.
320
- */
321
- export function getVelocitySignerPublicKey(programId: PublicKey): PublicKey {
322
- return PublicKey.findProgramAddressSync(
323
- [Buffer.from(anchor.utils.bytes.utf8.encode('velocity_signer'))],
324
- programId
325
- )[0];
326
- }
327
-
328
- /**
329
- * Derives the PDA that reserves a unique referrer name, from seeds `["referrer_name", nameBuffer]`.
330
- * Used to enforce name uniqueness for referrers on-chain.
331
- * @param programId - Deployed velocity program id.
332
- * @param nameBuffer - The 32-byte encoded name (see `encodeName`) to reserve.
333
- * @returns The referrer-name PDA's public key.
334
- */
335
- export function getReferrerNamePublicKeySync(
336
- programId: PublicKey,
337
- nameBuffer: number[]
338
- ): PublicKey {
339
- return PublicKey.findProgramAddressSync(
340
- [
341
- Buffer.from(anchor.utils.bytes.utf8.encode('referrer_name')),
342
- Buffer.from(nameBuffer),
343
- ],
344
- programId
345
- )[0];
346
- }
347
-
348
- /**
349
- * Derives the `PrelaunchOracle` PDA used as a placeholder/synthetic oracle for a not-yet-listed
350
- * perp market, from seeds `["prelaunch_oracle", marketIndex as u16 LE]`.
351
- * @param programId - Deployed velocity program id.
352
- * @param marketIndex - Perp market index the prelaunch oracle backs.
353
- * @returns The `PrelaunchOracle` account's public key.
354
- */
355
- export function getPrelaunchOraclePublicKey(
356
- programId: PublicKey,
357
- marketIndex: number
358
- ): PublicKey {
359
- return PublicKey.findProgramAddressSync(
360
- [
361
- Buffer.from(anchor.utils.bytes.utf8.encode('prelaunch_oracle')),
362
- new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
363
- ],
364
- programId
365
- )[0];
366
- }
367
-
368
- /**
369
- * Derives a Pyth Lazer oracle account PDA from seeds `["pyth_lazer", feedId as u32 LE]`. One
370
- * account exists per Lazer feed id and is shared across all markets using that feed.
371
- * @param progarmId - Deployed velocity program id (note: parameter name is misspelled but stable API).
372
- * @param feedId - Pyth Lazer feed id (u32).
373
- * @returns The Pyth Lazer oracle account's public key.
374
- */
375
- export function getPythLazerOraclePublicKey(
376
- progarmId: PublicKey,
377
- feedId: number
378
- ): PublicKey {
379
- const buffer = new ArrayBuffer(4);
380
- const view = new DataView(buffer);
381
- view.setUint32(0, feedId, true);
382
- const feedIdBytes = new Uint8Array(buffer);
383
- return PublicKey.findProgramAddressSync(
384
- [
385
- Buffer.from(anchor.utils.bytes.utf8.encode('pyth_lazer')),
386
- Buffer.from(feedIdBytes),
387
- ],
388
- progarmId
389
- )[0];
390
- }
391
-
392
- /**
393
- * Picks the correct SPL token program for a spot market's mint, based on its `tokenProgramFlag`.
394
- * Needed because Velocity supports both classic SPL tokens and Token-2022 mints; passing the wrong
395
- * token program id to an instruction's accounts will fail owner checks.
396
- * @param spotMarketAccount - The spot market to inspect.
397
- * @returns `TOKEN_2022_PROGRAM_ID` if `TokenProgramFlag.Token2022` is set, otherwise `TOKEN_PROGRAM_ID`.
398
- */
399
- export function getTokenProgramForSpotMarket(
400
- spotMarketAccount: SpotMarketAccount
401
- ): PublicKey {
402
- if ((spotMarketAccount.tokenProgramFlag & TokenProgramFlag.Token2022) > 0) {
403
- return TOKEN_2022_PROGRAM_ID;
404
- }
405
- return TOKEN_PROGRAM_ID;
406
- }
407
-
408
- /**
409
- * Derives a builder/referrer's `RevenueShare` PDA from seeds `["REV_SHARE", authority]`. Tracks
410
- * fees a builder/referrer has accrued from orders that credited them.
411
- * @param programId - Deployed velocity program id.
412
- * @param authority - Wallet pubkey of the builder/referrer.
413
- * @returns The `RevenueShare` account's public key.
414
- */
415
- export function getRevenueShareAccountPublicKey(
416
- programId: PublicKey,
417
- authority: PublicKey
418
- ): PublicKey {
419
- return PublicKey.findProgramAddressSync(
420
- [
421
- Buffer.from(anchor.utils.bytes.utf8.encode('REV_SHARE')),
422
- authority.toBuffer(),
423
- ],
424
- programId
425
- )[0];
426
- }
427
-
428
- /**
429
- * Derives a user's `RevenueShareEscrow` PDA from seeds `["REV_ESCROW", authority]`. Holds the
430
- * user's referrer link and approved builder-fee list; required as a remaining account whenever a
431
- * placed order references a `builderIdx`/builder fee, or when a taker was referred.
432
- * @param programId - Deployed velocity program id.
433
- * @param authority - Wallet pubkey of the user (order placer), not the builder/referrer.
434
- * @returns The `RevenueShareEscrow` account's public key.
435
- */
436
- export function getRevenueShareEscrowAccountPublicKey(
437
- programId: PublicKey,
438
- authority: PublicKey
439
- ): PublicKey {
440
- return PublicKey.findProgramAddressSync(
441
- [
442
- Buffer.from(anchor.utils.bytes.utf8.encode('REV_ESCROW')),
443
- authority.toBuffer(),
444
- ],
445
- programId
446
- )[0];
447
- }
448
-
449
- /**
450
- * Derives an `LpPool` PDA from seeds `["lp_pool", lpPoolId as u8 LE]`.
451
- * @param programId - Deployed velocity program id.
452
- * @param lpPoolId - Single-byte LP pool id.
453
- * @returns The `LpPool` account's public key.
454
- */
455
- export function getLpPoolPublicKey(
456
- programId: PublicKey,
457
- lpPoolId: number
458
- ): PublicKey {
459
- return PublicKey.findProgramAddressSync(
460
- [
461
- Buffer.from(anchor.utils.bytes.utf8.encode('lp_pool')),
462
- new anchor.BN(lpPoolId).toArrayLike(Buffer, 'le', 1),
463
- ],
464
- programId
465
- )[0];
466
- }
467
-
468
- /**
469
- * Derives the token vault PDA holding an `LpPool`'s minted LP token supply's backing, from seeds
470
- * `["LP_POOL_TOKEN_VAULT", lpPool]`.
471
- * @param programId - Deployed velocity program id.
472
- * @param lpPool - The `LpPool` account's public key.
473
- * @returns The LP pool token vault's public key.
474
- */
475
- export function getLpPoolTokenVaultPublicKey(
476
- programId: PublicKey,
477
- lpPool: PublicKey
478
- ): PublicKey {
479
- return PublicKey.findProgramAddressSync(
480
- [
481
- Buffer.from(anchor.utils.bytes.utf8.encode('LP_POOL_TOKEN_VAULT')),
482
- lpPool.toBuffer(),
483
- ],
484
- programId
485
- )[0];
486
- }
487
- /**
488
- * Derives the `AmmConstituentMapping` PDA (maps LP-pool constituents to the perp AMMs they hedge)
489
- * from seeds `["AMM_MAP", lpPoolPublicKey]`.
490
- * @param programId - Deployed velocity program id.
491
- * @param lpPoolPublicKey - The `LpPool` account's public key.
492
- * @returns The `AmmConstituentMapping` account's public key.
493
- */
494
- export function getAmmConstituentMappingPublicKey(
495
- programId: PublicKey,
496
- lpPoolPublicKey: PublicKey
497
- ): PublicKey {
498
- return PublicKey.findProgramAddressSync(
499
- [
500
- Buffer.from(anchor.utils.bytes.utf8.encode('AMM_MAP')),
501
- lpPoolPublicKey.toBuffer(),
502
- ],
503
- programId
504
- )[0];
505
- }
506
-
507
- /**
508
- * Derives the `ConstituentTargetBase` PDA (target base-asset weights for an LP pool's
509
- * constituents) from seeds `["constituent_target_base_seed", lpPoolPublicKey]`.
510
- * @param programId - Deployed velocity program id.
511
- * @param lpPoolPublicKey - The `LpPool` account's public key.
512
- * @returns The `ConstituentTargetBase` account's public key.
513
- */
514
- export function getConstituentTargetBasePublicKey(
515
- programId: PublicKey,
516
- lpPoolPublicKey: PublicKey
517
- ): PublicKey {
518
- return PublicKey.findProgramAddressSync(
519
- [
520
- Buffer.from(
521
- anchor.utils.bytes.utf8.encode('constituent_target_base_seed')
522
- ),
523
- lpPoolPublicKey.toBuffer(),
524
- ],
525
- programId
526
- )[0];
527
- }
528
-
529
- /**
530
- * Derives a `Constituent` PDA (one per spot market backing an LP pool) from seeds `["CONSTITUENT",
531
- * lpPoolPublicKey, spotMarketIndex as u16 LE]`.
532
- * @param programId - Deployed velocity program id.
533
- * @param lpPoolPublicKey - The `LpPool` account's public key.
534
- * @param spotMarketIndex - Spot market index of this constituent.
535
- * @returns The `Constituent` account's public key.
536
- */
537
- export function getConstituentPublicKey(
538
- programId: PublicKey,
539
- lpPoolPublicKey: PublicKey,
540
- spotMarketIndex: number
541
- ): PublicKey {
542
- return PublicKey.findProgramAddressSync(
543
- [
544
- Buffer.from(anchor.utils.bytes.utf8.encode('CONSTITUENT')),
545
- lpPoolPublicKey.toBuffer(),
546
- new anchor.BN(spotMarketIndex).toArrayLike(Buffer, 'le', 2),
547
- ],
548
- programId
549
- )[0];
550
- }
551
-
552
- /**
553
- * Derives the token vault PDA that custodies a `Constituent`'s deposits, from seeds
554
- * `["CONSTITUENT_VAULT", lpPoolPublicKey, spotMarketIndex as u16 LE]`.
555
- * @param programId - Deployed velocity program id.
556
- * @param lpPoolPublicKey - The `LpPool` account's public key.
557
- * @param spotMarketIndex - Spot market index of the constituent this vault backs.
558
- * @returns The constituent vault token account's public key.
559
- */
560
- export function getConstituentVaultPublicKey(
561
- programId: PublicKey,
562
- lpPoolPublicKey: PublicKey,
563
- spotMarketIndex: number
564
- ): PublicKey {
565
- return PublicKey.findProgramAddressSync(
566
- [
567
- Buffer.from(anchor.utils.bytes.utf8.encode('CONSTITUENT_VAULT')),
568
- lpPoolPublicKey.toBuffer(),
569
- new anchor.BN(spotMarketIndex).toArrayLike(Buffer, 'le', 2),
570
- ],
571
- programId
572
- )[0];
573
- }
574
-
575
- /**
576
- * Derives the singleton `AmmCache` PDA (caches per-AMM data used by LP-pool hedging/settlement)
577
- * from seed `"amm_cache_seed"`. One per program deployment.
578
- * @param programId - Deployed velocity program id.
579
- * @returns The `AmmCache` account's public key.
580
- */
581
- export function getAmmCachePublicKey(programId: PublicKey): PublicKey {
582
- return PublicKey.findProgramAddressSync(
583
- [Buffer.from(anchor.utils.bytes.utf8.encode('amm_cache_seed'))],
584
- programId
585
- )[0];
586
- }
587
-
588
- /**
589
- * Derives the `ConstituentCorrelations` PDA (pairwise correlation data between an LP pool's
590
- * constituents) from seeds `["constituent_correlations", lpPoolPublicKey]`.
591
- * @param programId - Deployed velocity program id.
592
- * @param lpPoolPublicKey - The `LpPool` account's public key.
593
- * @returns The `ConstituentCorrelations` account's public key.
594
- */
595
- export function getConstituentCorrelationsPublicKey(
596
- programId: PublicKey,
597
- lpPoolPublicKey: PublicKey
598
- ): PublicKey {
599
- return PublicKey.findProgramAddressSync(
600
- [
601
- Buffer.from(anchor.utils.bytes.utf8.encode('constituent_correlations')),
602
- lpPoolPublicKey.toBuffer(),
603
- ],
604
- programId
605
- )[0];
606
- }
607
-
608
- /**
609
- * Derives the associated token account for an LP pool's mint under a given owner (not a
610
- * program-derived PDA — a standard SPL associated token account).
611
- * @param lpPoolTokenMint - The LP pool's token mint.
612
- * @param authority - Owner of the associated token account.
613
- * @returns The associated token account's public key.
614
- */
615
- export async function getLpPoolTokenTokenAccountPublicKey(
616
- lpPoolTokenMint: PublicKey,
617
- authority: PublicKey
618
- ): Promise<PublicKey> {
619
- return await getAssociatedTokenAddress(lpPoolTokenMint, authority, true);
620
- }