@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,194 +0,0 @@
1
- import { LAMPORTS_PER_SOL } from '@solana/web3.js';
2
- import { BN } from '../isomorphic/anchor';
3
-
4
- /** Precision constants used throughout the SDK. Each mirrors an on-chain fixed-point scale — a raw `BN` amount at that precision represents `amount / 10^exponent` in human units (e.g. `PRICE_PRECISION` = 1e6, so a raw price of `1_500_000` is `$1.50`). Values must stay numerically identical to the Rust program's `math::constants` — a mismatch here silently mis-scales every derived SDK computation. */
5
- export const ZERO = new BN(0);
6
- export const ONE = new BN(1);
7
- export const TWO = new BN(2);
8
- export const THREE = new BN(3);
9
- export const FOUR = new BN(4);
10
- export const FIVE = new BN(5);
11
- export const SIX = new BN(6);
12
- export const SEVEN = new BN(7);
13
- export const EIGHT = new BN(8);
14
- export const NINE = new BN(9);
15
- export const TEN = new BN(10);
16
- export const TEN_THOUSAND = new BN(10000);
17
- /** Largest value safely representable as a JS `number` (2^53 - 1), wrapped in a `BN`; used as a practical "infinite" ceiling, not an on-chain limit. */
18
- export const BN_MAX = new BN(Number.MAX_SAFE_INTEGER);
19
- export const TEN_MILLION = TEN_THOUSAND.mul(TEN_THOUSAND);
20
-
21
- /** Default max leverage (5x) used by SDK helpers when a market's actual `marginRatioInitial` isn't available. */
22
- export const MAX_LEVERAGE = new BN(5);
23
- /** `u64::MAX`; sentinel order size meaning "close the whole position" in reduce-only market-order helpers. */
24
- export const MAX_LEVERAGE_ORDER_SIZE = new BN('18446744073709551615');
25
-
26
- /** Exponent for `PERCENTAGE_PRECISION` (1e6). */
27
- export const PERCENTAGE_PRECISION_EXP = new BN(6);
28
- /** 1e6; precision for percentage/fraction fields (e.g. AMM concentration coefficient, funding ramp slope, LP pool volatility). */
29
- export const PERCENTAGE_PRECISION = new BN(10).pow(PERCENTAGE_PRECISION_EXP);
30
- /** Alias of `PERCENTAGE_PRECISION` (1e6) for the AMM's `concentrationCoef` field. */
31
- export const CONCENTRATION_PRECISION = PERCENTAGE_PRECISION;
32
-
33
- /** Exponent for `QUOTE_PRECISION` (1e6). */
34
- export const QUOTE_PRECISION_EXP = new BN(6);
35
- /** Exponent for `FUNDING_RATE_BUFFER_PRECISION` (1e3) — the extra precision funding rates carry beyond `PRICE_PRECISION`. */
36
- export const FUNDING_RATE_BUFFER_PRECISION_EXP = new BN(3);
37
- /** Exponent for `PRICE_PRECISION` (1e6). */
38
- export const PRICE_PRECISION_EXP = new BN(6);
39
- /** Exponent for `FUNDING_RATE_PRECISION` (1e9) = `PRICE_PRECISION_EXP` + `FUNDING_RATE_BUFFER_PRECISION_EXP`. */
40
- export const FUNDING_RATE_PRECISION_EXP = PRICE_PRECISION_EXP.add(
41
- FUNDING_RATE_BUFFER_PRECISION_EXP
42
- );
43
- /** Exponent for `PEG_PRECISION` (1e6). */
44
- export const PEG_PRECISION_EXP = new BN(6);
45
- /** Exponent for `AMM_RESERVE_PRECISION` / `BASE_PRECISION` (1e9). */
46
- export const AMM_RESERVE_PRECISION_EXP = new BN(9);
47
-
48
- /** Exponent for `SPOT_MARKET_RATE_PRECISION` (1e6). */
49
- export const SPOT_MARKET_RATE_PRECISION_EXP = new BN(6);
50
- /** 1e6; precision for spot market interest-rate fields (`optimalBorrowRate`, `maxBorrowRate`). */
51
- export const SPOT_MARKET_RATE_PRECISION = new BN(10).pow(
52
- SPOT_MARKET_RATE_PRECISION_EXP
53
- );
54
-
55
- /** Exponent for `SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION` (1e10). */
56
- export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = new BN(10);
57
- /** 1e10; precision for `SpotMarketAccount.cumulativeDepositInterest`/`cumulativeBorrowInterest`. */
58
- export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = new BN(10).pow(
59
- SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP
60
- );
61
-
62
- /** Exponent for `SPOT_MARKET_UTILIZATION_PRECISION` (1e6). */
63
- export const SPOT_MARKET_UTILIZATION_PRECISION_EXP = new BN(6);
64
- /** 1e6; precision for spot market utilization fields (`optimalUtilization`, `utilizationTwap`). */
65
- export const SPOT_MARKET_UTILIZATION_PRECISION = new BN(10).pow(
66
- SPOT_MARKET_UTILIZATION_PRECISION_EXP
67
- );
68
-
69
- /** 1e4; precision for spot asset/liability weight fields (`initialAssetWeight`, `maintenanceLiabilityWeight`, etc). Same scale as `MARGIN_PRECISION`. */
70
- export const SPOT_MARKET_WEIGHT_PRECISION = new BN(10000);
71
- /** Exponent for `SPOT_MARKET_BALANCE_PRECISION` (1e9). */
72
- export const SPOT_MARKET_BALANCE_PRECISION_EXP = new BN(9);
73
- /** 1e9; precision for scaled spot balances (`SpotPosition.scaledBalance`, `PoolBalance.scaledBalance`, `depositBalance`/`borrowBalance`). Multiply by the market's cumulative interest to get the token amount. */
74
- export const SPOT_MARKET_BALANCE_PRECISION = new BN(10).pow(
75
- SPOT_MARKET_BALANCE_PRECISION_EXP
76
- );
77
- /** Exponent for `SPOT_MARKET_IMF_PRECISION` (1e6). */
78
- export const SPOT_MARKET_IMF_PRECISION_EXP = new BN(6);
79
-
80
- /** 1e6; precision for `imfFactor`-style fields (deprecated alias — most `imfFactor` fields use `MARGIN_PRECISION`, 1e4). */
81
- export const SPOT_MARKET_IMF_PRECISION = new BN(10).pow(
82
- SPOT_MARKET_IMF_PRECISION_EXP
83
- );
84
- /** 1e6; precision for `liquidatorFee`/`ifLiquidationFee`/`protocolLiquidationFee` fields on perp and spot markets. */
85
- export const LIQUIDATION_FEE_PRECISION = new BN(1000000);
86
-
87
- /** 1e6; precision for quote-asset (USD-denominated) amounts — pnl, deposits/withdraws, fees, collateral. The protocol's most widely used precision. */
88
- export const QUOTE_PRECISION = new BN(10).pow(QUOTE_PRECISION_EXP);
89
- /** 1e6; precision for prices (`Order.price`, oracle prices, TWAPs, `oraclePriceOffset`). */
90
- export const PRICE_PRECISION = new BN(10).pow(PRICE_PRECISION_EXP);
91
- /** 1e9; precision for funding-rate fields (`cumulativeFundingRateLong/Short`, `lastFundingRate`, `FundingRateRecord.fundingRate`). Unit is quote per base. */
92
- export const FUNDING_RATE_PRECISION = new BN(10).pow(
93
- FUNDING_RATE_PRECISION_EXP
94
- );
95
- /** 1e3; the extra scale factor between `PRICE_PRECISION` and `FUNDING_RATE_PRECISION`. */
96
- export const FUNDING_RATE_BUFFER_PRECISION = new BN(10).pow(
97
- FUNDING_RATE_BUFFER_PRECISION_EXP
98
- );
99
- /** 1e6; precision for `AMM.pegMultiplier`, normalizing the AMM's quote reserve. */
100
- export const PEG_PRECISION = new BN(10).pow(PEG_PRECISION_EXP);
101
-
102
- /** 1e9; precision for AMM constant-product reserves (`baseAssetReserve`, `quoteAssetReserve`, `sqrtK`, etc). Same scale as `BASE_PRECISION`. */
103
- export const AMM_RESERVE_PRECISION = new BN(10).pow(AMM_RESERVE_PRECISION_EXP);
104
-
105
- /** 1e9; precision for perp base-asset amounts (position size, `Order.baseAssetAmount`, open interest). Alias of `AMM_RESERVE_PRECISION`. */
106
- export const BASE_PRECISION = AMM_RESERVE_PRECISION;
107
- export const BASE_PRECISION_EXP = AMM_RESERVE_PRECISION_EXP;
108
-
109
- /** 1e3; ratio to convert an `AMM_RESERVE_PRECISION` amount into `QUOTE_PRECISION` units (at peg = 1). */
110
- export const AMM_TO_QUOTE_PRECISION_RATIO =
111
- AMM_RESERVE_PRECISION.div(QUOTE_PRECISION); // 10^3
112
- /** 1e1 (=10); ratio between `PRICE_PRECISION` and `PEG_PRECISION`. */
113
- export const PRICE_DIV_PEG = PRICE_PRECISION.div(PEG_PRECISION); //10^1
114
- /** 1e1 (=10); ratio between `PRICE_PRECISION` and `QUOTE_PRECISION`. */
115
- export const PRICE_TO_QUOTE_PRECISION = PRICE_PRECISION.div(QUOTE_PRECISION); // 10^1
116
- /** 1e9; combined `AMM_RESERVE_PRECISION * PEG_PRECISION / QUOTE_PRECISION` conversion ratio used in AMM quote-value math. */
117
- export const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO =
118
- AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^9
119
- /** 1e4; precision for margin-ratio fields (`marginRatioInitial`, `marginRatioMaintenance`, `imfFactor`, `maxMarginRatio`, `StateAccount.liquidationMarginBufferRatio`). */
120
- export const MARGIN_PRECISION = TEN_THOUSAND;
121
- /** 1e4; precision for basis-point fields where 1 unit = 1 bp (e.g. `PerpMarketAccount.fundingClampThreshold`). */
122
- export const BPS_PRECISION = TEN_THOUSAND; // 1 unit = 1bp
123
- /** 1e6; precision for AMM bid/ask spread fields (`baseSpread`, `maxSpread`, `longSpread`, `shortSpread`, `lastOracleReservePriceSpreadPct`). */
124
- export const BID_ASK_SPREAD_PRECISION = new BN(1000000); // 10^6
125
- /** 1e4; precision for `StateAccount.initialPctToLiquidate`, the fraction of a position liquidated per partial-liquidation pass. */
126
- export const LIQUIDATION_PCT_PRECISION = TEN_THOUSAND;
127
- /** Denominator (3333) used to derive `FUNDING_RATE_OFFSET_PERCENTAGE`; yields ~10.95% annualized when applied hourly. */
128
- export const FUNDING_RATE_OFFSET_DENOMINATOR = new BN(3333);
129
- /** `FUNDING_RATE_PRECISION / FUNDING_RATE_OFFSET_DENOMINATOR`; the default funding-rate offset floor/ceiling nudge. */
130
- export const FUNDING_RATE_OFFSET_PERCENTAGE = FUNDING_RATE_PRECISION.div(
131
- FUNDING_RATE_OFFSET_DENOMINATOR
132
- );
133
- /** Denominator (2000, i.e. 0.05%) used to clamp per-update funding-rate changes. */
134
- export const FUNDING_RATE_CLAMP_DENOMINATOR = new BN(2000);
135
- /** `PRICE_PRECISION * AMM_TO_QUOTE_PRECISION_RATIO`; combined conversion ratio used when pricing AMM reserve amounts directly in quote terms. */
136
- export const PRICE_TIMES_AMM_TO_QUOTE_PRECISION_RATIO = PRICE_PRECISION.mul(
137
- AMM_TO_QUOTE_PRECISION_RATIO
138
- );
139
-
140
- /** 300 seconds. */
141
- export const FIVE_MINUTE = new BN(60 * 5);
142
- /** 3600 seconds. */
143
- export const ONE_HOUR = new BN(60 * 60);
144
- /** 31,536,000 seconds (365 days). */
145
- export const ONE_YEAR = new BN(31536000);
146
-
147
- /** Market index of the protocol's quote spot market (USDC on mainnet). */
148
- export const QUOTE_SPOT_MARKET_INDEX = 0;
149
-
150
- /** 1e9 (`LAMPORTS_PER_SOL`); token-mint precision for wrapped SOL spot markets. */
151
- export const LAMPORTS_PRECISION = new BN(LAMPORTS_PER_SOL);
152
- /** 9; decimal exponent for `LAMPORTS_PRECISION`. */
153
- export const LAMPORTS_EXP = new BN(Math.log10(LAMPORTS_PER_SOL));
154
-
155
- /** `QUOTE_PRECISION / 100` = $0.01; per-open-order margin requirement reserved against free collateral. */
156
- export const OPEN_ORDER_MARGIN_REQUIREMENT = QUOTE_PRECISION.div(new BN(100));
157
-
158
- /** -$25 (`QUOTE_PRECISION`); default floor for `AMM.netRevenueSinceLastFunding` below which the funding-rate spread retreats, damping the AMM from over-widening its spread after a large one-off loss. */
159
- export const DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = new BN(
160
- -25
161
- ).mul(QUOTE_PRECISION);
162
-
163
- /** 13 days in seconds; minimum account age before an idle user account becomes eligible for keeper-initiated deletion. */
164
- export const ACCOUNT_AGE_DELETION_CUTOFF_SECONDS = 60 * 60 * 24 * 13; // 13 days
165
- /** Slots of inactivity (~1 week at `SLOT_TIME_ESTIMATE_MS`) after which a user account is eligible to be marked idle. */
166
- export const IDLE_TIME_SLOTS = 9000;
167
- /** Approximate Solana slot duration in milliseconds, used by the SDK to convert between slots and wall-clock time. */
168
- export const SLOT_TIME_ESTIMATE_MS = 400;
169
-
170
- /** `QUOTE_PRECISION / 100` = $0.01; a perp position smaller than this is treated as dust (safe to ignore/close for free). */
171
- export const DUST_POSITION_SIZE = QUOTE_PRECISION.divn(100); // Dust position is any position smaller than 1c
172
-
173
- /**
174
- * $100 (`QUOTE_PRECISION`); the cap on a user's unrealized positive perp PnL that may count toward
175
- * *initial* margin (free collateral for opening/increasing positions). Unrealized profit beyond
176
- * this amount is not double-counted as collateral for new risk — it still counts in full for
177
- * maintenance-margin (liquidation) calculations. Mirrors the Rust
178
- * `MAX_POSITIVE_UPNL_FOR_INITIAL_MARGIN` constant; keep both in sync.
179
- */
180
- export const MAX_POSITIVE_UPNL_FOR_INITIAL_MARGIN = new BN(100).mul(
181
- QUOTE_PRECISION
182
- ); // max upnl for initial margin calc
183
-
184
- /** Max number of pubkeys per `getMultipleAccounts` RPC call the SDK will batch (RPC-imposed ceiling is 100; kept at 99 for headroom). */
185
- export const GET_MULTIPLE_ACCOUNTS_CHUNK_SIZE = 99;
186
-
187
- // integer constants
188
- // Built with `BN` directly (not `BigNum.fromPrint`) to avoid a module-load
189
- // circular dependency: `bigNum.ts` imports `ZERO` from this file, so importing
190
- // `bigNum.ts` first leaves `BigNum` undefined while this module body evaluates.
191
- /** `i64::MAX` (9223372036854775807). */
192
- export const MAX_I64 = new BN('9223372036854775807');
193
- /** `i64::MIN` (-9223372036854775808). */
194
- export const MIN_I64 = new BN('-9223372036854775808');
@@ -1,127 +0,0 @@
1
- import { PublicKey } from '@solana/web3.js';
2
- import { MarketStatus, OracleSource } from '../types';
3
- import { VelocityEnv } from '../config';
4
-
5
- /** Static off-chain metadata for one deployed perp market, keyed by `marketIndex`. This is a client-side registry (symbol/oracle wiring for UIs and SDK bootstrapping) — it is not decoded from chain and can drift from the live `PerpMarketAccount` if not kept in sync with deployments. */
6
- export type PerpMarketConfig = {
7
- fullName?: string;
8
- category?: string[];
9
- symbol: string;
10
- baseAssetSymbol: string;
11
- marketIndex: number;
12
- /** unix ms timestamp the market launched */
13
- launchTs: number;
14
- oracle: PublicKey;
15
- oracleSource: OracleSource;
16
- /** Pyth price-feed id (hex), for the legacy Pyth push/pull oracle path */
17
- pythFeedId?: string;
18
- /** Pyth Lazer feed id, for `OracleSource.PYTH_LAZER*` markets */
19
- pythLazerId?: number;
20
- /** current known on-chain status; omitted means `ACTIVE`. Kept here so tooling can filter out delisted markets without an RPC round-trip */
21
- marketStatus?: MarketStatus;
22
- };
23
-
24
- /**
25
- * Reflects what is actually deployed on devnet (per on-chain enumeration of
26
- * `StateAccount.numberOfMarkets`). Update when devnet adds/changes a perp market.
27
- */
28
- export const DevnetPerpMarkets: PerpMarketConfig[] = [
29
- {
30
- fullName: 'Solana',
31
- category: ['L1', 'Infra'],
32
- symbol: 'SOL-PERP',
33
- baseAssetSymbol: 'SOL',
34
- marketIndex: 0,
35
- oracle: new PublicKey('2k3UHX6ehRFzx5fTVvbL6FwXhMjkucjJDL9MuVKLo8TV'),
36
- launchTs: 1655751353000,
37
- oracleSource: OracleSource.PYTH_LAZER,
38
- pythLazerId: 6,
39
- },
40
- {
41
- fullName: 'Bitcoin',
42
- category: ['L1', 'Payment'],
43
- symbol: 'BTC-PERP',
44
- baseAssetSymbol: 'BTC',
45
- marketIndex: 1,
46
- oracle: new PublicKey('J7Fp8iTKuKdCM7PnzqHXTdTo5Jr7ykAmiDyvpz58GJGZ'),
47
- launchTs: 1782950400000,
48
- oracleSource: OracleSource.PYTH_LAZER,
49
- pythLazerId: 1,
50
- },
51
- {
52
- fullName: 'Ethereum',
53
- category: ['L1', 'Infra'],
54
- symbol: 'ETH-PERP',
55
- baseAssetSymbol: 'ETH',
56
- marketIndex: 2,
57
- oracle: new PublicKey('6wQ5RiQ7usJ3TqYZSiuAPZHrVCeSWNrvace84khDKEmH'),
58
- launchTs: 1782950400000,
59
- oracleSource: OracleSource.PYTH_LAZER,
60
- pythLazerId: 2,
61
- },
62
- ];
63
-
64
- // Relaunch set from deploy-scripts/params/relaunch-perp-markets.json (PR #188).
65
- // Oracles are the velocity program's pyth_lazer PDAs:
66
- // findProgramAddress(["pyth_lazer", u32le(lazerFeedId)], VELOCITY_PROGRAM_ID).
67
- // launchTs = planned 2026-07 mainnet relaunch init.
68
- export const MainnetPerpMarkets: PerpMarketConfig[] = [
69
- {
70
- fullName: 'Solana',
71
- category: ['L1', 'Infra', 'Solana'],
72
- symbol: 'SOL-PERP',
73
- baseAssetSymbol: 'SOL',
74
- marketIndex: 0,
75
- oracle: new PublicKey('2k3UHX6ehRFzx5fTVvbL6FwXhMjkucjJDL9MuVKLo8TV'),
76
- launchTs: 1782950400000,
77
- oracleSource: OracleSource.PYTH_LAZER,
78
- pythFeedId:
79
- '0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d',
80
- pythLazerId: 6,
81
- },
82
- {
83
- fullName: 'Bitcoin',
84
- category: ['L1', 'Payment'],
85
- symbol: 'BTC-PERP',
86
- baseAssetSymbol: 'BTC',
87
- marketIndex: 1,
88
- oracle: new PublicKey('J7Fp8iTKuKdCM7PnzqHXTdTo5Jr7ykAmiDyvpz58GJGZ'),
89
- launchTs: 1782950400000,
90
- oracleSource: OracleSource.PYTH_LAZER,
91
- pythFeedId:
92
- '0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43',
93
- pythLazerId: 1,
94
- },
95
- {
96
- fullName: 'Ethereum',
97
- category: ['L1', 'Infra'],
98
- symbol: 'ETH-PERP',
99
- baseAssetSymbol: 'ETH',
100
- marketIndex: 2,
101
- oracle: new PublicKey('6wQ5RiQ7usJ3TqYZSiuAPZHrVCeSWNrvace84khDKEmH'),
102
- launchTs: 1782950400000,
103
- oracleSource: OracleSource.PYTH_LAZER,
104
- pythFeedId:
105
- '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace',
106
- pythLazerId: 2,
107
- },
108
- {
109
- fullName: 'Hyperliquid',
110
- category: ['DEX'],
111
- symbol: 'HYPE-PERP',
112
- baseAssetSymbol: 'HYPE',
113
- marketIndex: 3,
114
- oracle: new PublicKey('Nc9hadTxNbLw6SiYVGVGjp4WZjanWUuNiKSxdHwHNtK'),
115
- launchTs: 1782950400000,
116
- oracleSource: OracleSource.PYTH_LAZER,
117
- pythFeedId:
118
- '0x4279e31cc369bbcc2faf022b382b080e32a8e689ff20fbc530d2a603eb6cd98b',
119
- pythLazerId: 110,
120
- },
121
- ];
122
-
123
- /** Perp market registries keyed by `VelocityEnv`, for looking up a deployment's markets without hardcoding the environment. */
124
- export const PerpMarkets: { [key in VelocityEnv]: PerpMarketConfig[] } = {
125
- devnet: DevnetPerpMarkets,
126
- 'mainnet-beta': MainnetPerpMarkets,
127
- };
@@ -1,104 +0,0 @@
1
- import { PublicKey } from '@solana/web3.js';
2
- import {
3
- QUOTE_PRECISION,
4
- QUOTE_PRECISION_EXP,
5
- LAMPORTS_EXP,
6
- LAMPORTS_PRECISION,
7
- SIX,
8
- } from './numericConstants';
9
- import { OracleSource } from '../types';
10
- import { BN } from '../isomorphic/anchor';
11
- import { VelocityEnv } from '../config';
12
-
13
- /** Static off-chain metadata for one deployed spot market, keyed by `marketIndex`. Client-side registry (symbol/oracle/mint/decimals wiring) — not decoded from chain, so it must be kept in sync with deployments. */
14
- export type SpotMarketConfig = {
15
- symbol: string;
16
- marketIndex: number;
17
- /** the LP-pool "pool" this market belongs to (distinct spot markets can wrap the same mint under different pool ids, e.g. `SOL` vs `SOL-2`) */
18
- poolId: number;
19
- oracle: PublicKey;
20
- mint: PublicKey;
21
- oracleSource: OracleSource;
22
- /** `10^precisionExp`; the token mint's precision as a `BN`, i.e. one whole token */
23
- precision: BN;
24
- /** the token mint's decimals */
25
- precisionExp: BN;
26
- /** unix ms timestamp the market launched */
27
- launchTs?: number;
28
- /** Pyth price-feed id (hex), for the legacy Pyth push/pull oracle path */
29
- pythFeedId?: string;
30
- /** Pyth Lazer feed id, for `OracleSource.PYTH_LAZER*` markets */
31
- pythLazerId?: number;
32
- };
33
-
34
- /** The canonical wrapped-SOL mint address, shared across all `SOL`-symbol spot market configs. */
35
- export const WRAPPED_SOL_MINT = new PublicKey(
36
- 'So11111111111111111111111111111111111111112'
37
- );
38
-
39
- /**
40
- * Reflects what is actually deployed on devnet (per on-chain enumeration of
41
- * `StateAccount.numberOfSpotMarkets`). Update when devnet adds/changes a spot market.
42
- */
43
- export const DevnetSpotMarkets: SpotMarketConfig[] = [
44
- {
45
- symbol: 'dUSDT',
46
- marketIndex: 0,
47
- poolId: 0,
48
- oracle: new PublicKey('Dai8hT1YRBBm5rBSJUSKcdR11psM55LVAkshbypfC4k4'),
49
- oracleSource: OracleSource.PYTH_LAZER_STABLE_COIN,
50
- mint: new PublicKey('GqmEqYsy8EyvofDpmtFxK8zhYrgWgNokAtYoduQdL7v6'),
51
- precision: new BN(10).pow(SIX),
52
- precisionExp: SIX,
53
- pythLazerId: 8,
54
- },
55
- {
56
- symbol: 'SOL',
57
- marketIndex: 1,
58
- poolId: 0,
59
- oracle: new PublicKey('2k3UHX6ehRFzx5fTVvbL6FwXhMjkucjJDL9MuVKLo8TV'),
60
- oracleSource: OracleSource.PYTH_LAZER,
61
- mint: WRAPPED_SOL_MINT,
62
- precision: LAMPORTS_PRECISION,
63
- precisionExp: LAMPORTS_EXP,
64
- pythLazerId: 6,
65
- },
66
- ];
67
-
68
- // Relaunch set from deploy-scripts/params/relaunch-spot-markets.json (PR #188).
69
- // Oracles are the velocity program's pyth_lazer PDAs:
70
- // findProgramAddress(["pyth_lazer", u32le(lazerFeedId)], VELOCITY_PROGRAM_ID).
71
- export const MainnetSpotMarkets: SpotMarketConfig[] = [
72
- {
73
- symbol: 'USDT',
74
- marketIndex: 0,
75
- poolId: 0,
76
- oracle: new PublicKey('Dai8hT1YRBBm5rBSJUSKcdR11psM55LVAkshbypfC4k4'),
77
- oracleSource: OracleSource.PYTH_LAZER_STABLE_COIN,
78
- mint: new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'),
79
- precision: QUOTE_PRECISION,
80
- precisionExp: QUOTE_PRECISION_EXP,
81
- pythFeedId:
82
- '0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b',
83
- pythLazerId: 8,
84
- },
85
- {
86
- symbol: 'SOL',
87
- marketIndex: 1,
88
- poolId: 0,
89
- oracle: new PublicKey('2k3UHX6ehRFzx5fTVvbL6FwXhMjkucjJDL9MuVKLo8TV'),
90
- oracleSource: OracleSource.PYTH_LAZER,
91
- mint: WRAPPED_SOL_MINT,
92
- precision: LAMPORTS_PRECISION,
93
- precisionExp: LAMPORTS_EXP,
94
- pythFeedId:
95
- '0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d',
96
- pythLazerId: 6,
97
- },
98
- ];
99
-
100
- /** Spot market registries keyed by `VelocityEnv`, for looking up a deployment's markets without hardcoding the environment. */
101
- export const SpotMarkets: { [key in VelocityEnv]: SpotMarketConfig[] } = {
102
- devnet: DevnetSpotMarkets,
103
- 'mainnet-beta': MainnetSpotMarkets,
104
- };
@@ -1,2 +0,0 @@
1
- /** Error code attached to the `TxSendError` thrown when a transaction send times out without the SDK observing either a confirmation or a definite on-chain failure (see `BaseTxSender`/`TransactionConfirmationManager`). Not a Solana/program error code — it's SDK-internal, meaning "we don't know what happened." */
2
- export const NOT_CONFIRMED_ERROR_CODE = -1001;