@velocity-exchange/sdk 0.0.5 → 0.2.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 (815) hide show
  1. package/.prettierignore +1 -1
  2. package/CHANGELOG.md +35 -0
  3. package/README.md +30 -30
  4. package/bun.lock +24 -2
  5. package/lib/browser/accounts/basicUserAccountSubscriber.d.ts +5 -3
  6. package/lib/browser/accounts/basicUserAccountSubscriber.js +4 -3
  7. package/lib/browser/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
  8. package/lib/browser/accounts/basicUserStatsAccountSubscriber.js +4 -3
  9. package/lib/browser/accounts/bulkAccountLoader.d.ts +5 -5
  10. package/lib/browser/accounts/bulkAccountLoader.js +12 -1
  11. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +2 -1
  12. package/lib/browser/accounts/grpcAccountSubscriber.js +8 -2
  13. package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
  14. package/lib/browser/accounts/grpcMultiAccountSubscriber.js +13 -5
  15. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
  16. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.js +12 -8
  17. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
  18. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +9 -3
  19. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
  20. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +19 -6
  21. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -5
  22. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +44 -23
  23. package/lib/browser/accounts/laserProgramAccountSubscriber.js +4 -1
  24. package/lib/browser/accounts/oneShotUserAccountSubscriber.js +4 -3
  25. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
  26. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  27. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
  28. package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
  29. package/lib/browser/accounts/pollingOracleAccountSubscriber.js +16 -5
  30. package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
  31. package/lib/browser/accounts/pollingTokenAccountSubscriber.js +16 -5
  32. package/lib/browser/accounts/pollingUserAccountSubscriber.d.ts +8 -4
  33. package/lib/browser/accounts/pollingUserAccountSubscriber.js +17 -11
  34. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
  35. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +6 -6
  36. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -5
  37. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +69 -35
  38. package/lib/browser/accounts/types.d.ts +6 -12
  39. package/lib/browser/accounts/utils.d.ts +1 -0
  40. package/lib/browser/accounts/utils.js +10 -3
  41. package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +4 -2
  42. package/lib/browser/accounts/webSocketAccountSubscriber.js +17 -5
  43. package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
  44. package/lib/browser/accounts/webSocketAccountSubscriberV2.js +17 -6
  45. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  46. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
  47. package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
  48. package/lib/browser/accounts/webSocketProgramAccountSubscriber.js +14 -3
  49. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
  50. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
  51. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
  52. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
  53. package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
  54. package/lib/browser/accounts/webSocketUserAccountSubscriber.js +9 -0
  55. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
  56. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
  57. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -8
  58. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +52 -26
  59. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -7
  60. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +49 -20
  61. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
  62. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.js +0 -3
  63. package/lib/browser/addresses/marketAddresses.js +3 -2
  64. package/lib/browser/addresses/pda.d.ts +1 -9
  65. package/lib/browser/addresses/pda.js +4 -23
  66. package/lib/browser/adminClient.d.ts +25 -29
  67. package/lib/browser/adminClient.js +168 -169
  68. package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +2 -4
  69. package/lib/browser/auctionSubscriber/auctionSubscriber.js +8 -10
  70. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +2 -4
  71. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +11 -10
  72. package/lib/browser/auctionSubscriber/types.d.ts +3 -2
  73. package/lib/browser/bankrun/bankrunConnection.d.ts +6 -4
  74. package/lib/browser/bankrun/bankrunConnection.js +69 -31
  75. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
  76. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +3 -2
  77. package/lib/browser/clock/clockSubscriber.d.ts +6 -6
  78. package/lib/browser/clock/clockSubscriber.js +4 -3
  79. package/lib/browser/config.d.ts +11 -20
  80. package/lib/browser/config.js +13 -36
  81. package/lib/browser/constants/index.d.ts +1 -2
  82. package/lib/browser/constants/index.js +1 -2
  83. package/lib/browser/constants/numericConstants.d.ts +1 -3
  84. package/lib/browser/constants/numericConstants.js +3 -5
  85. package/lib/browser/constituentMap/constituentMap.d.ts +0 -2
  86. package/lib/browser/constituentMap/constituentMap.js +10 -6
  87. package/lib/browser/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
  88. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
  89. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
  90. package/lib/browser/core/VelocityCore.d.ts +9 -15
  91. package/lib/browser/core/VelocityCore.js +5 -7
  92. package/lib/browser/core/instructions/perpOrders.d.ts +14 -0
  93. package/lib/browser/core/instructions/perpOrders.js +14 -0
  94. package/lib/browser/core/instructions/withdraw.d.ts +1 -1
  95. package/lib/browser/core/instructions/withdraw.js +1 -1
  96. package/lib/browser/core/remainingAccounts.d.ts +2 -2
  97. package/lib/browser/core/remainingAccounts.js +5 -5
  98. package/lib/browser/decode/user.js +9 -1
  99. package/lib/browser/dlob/DLOB.d.ts +7 -2
  100. package/lib/browser/dlob/DLOB.js +205 -142
  101. package/lib/browser/dlob/DLOBNode.d.ts +5 -2
  102. package/lib/browser/dlob/DLOBNode.js +7 -0
  103. package/lib/browser/dlob/DLOBSubscriber.d.ts +0 -2
  104. package/lib/browser/dlob/DLOBSubscriber.js +39 -39
  105. package/lib/browser/dlob/NodeList.js +8 -7
  106. package/lib/browser/dlob/orderBookLevels.js +24 -17
  107. package/lib/browser/dlob/types.d.ts +0 -2
  108. package/lib/browser/events/eventList.js +4 -1
  109. package/lib/browser/events/eventSubscriber.d.ts +6 -3
  110. package/lib/browser/events/eventSubscriber.js +75 -26
  111. package/lib/browser/events/eventsServerLogProvider.d.ts +1 -1
  112. package/lib/browser/events/eventsServerLogProvider.js +17 -10
  113. package/lib/browser/events/fetchLogs.d.ts +1 -1
  114. package/lib/browser/events/fetchLogs.js +4 -2
  115. package/lib/browser/events/parse.js +14 -14
  116. package/lib/browser/events/pollingLogProvider.d.ts +1 -1
  117. package/lib/browser/events/pollingLogProvider.js +1 -0
  118. package/lib/browser/events/txEventCache.js +6 -2
  119. package/lib/browser/events/types.d.ts +3 -7
  120. package/lib/browser/events/types.js +1 -3
  121. package/lib/browser/events/webSocketLogProvider.d.ts +1 -1
  122. package/lib/browser/events/webSocketLogProvider.js +5 -2
  123. package/lib/browser/factory/bigNum.js +1 -1
  124. package/lib/{node/idl/drift.d.ts → browser/idl/velocity.d.ts} +2412 -2481
  125. package/lib/browser/idl/{drift.json → velocity.json} +2265 -2333
  126. package/lib/browser/index.d.ts +1 -3
  127. package/lib/browser/index.js +1 -4
  128. package/lib/browser/jupiter/jupiterClient.d.ts +1 -1
  129. package/lib/browser/jupiter/jupiterClient.js +18 -8
  130. package/lib/browser/marginCalculation.js +1 -0
  131. package/lib/browser/math/amm.d.ts +31 -13
  132. package/lib/browser/math/amm.js +87 -31
  133. package/lib/browser/math/auction.js +16 -12
  134. package/lib/browser/math/bankruptcy.js +1 -1
  135. package/lib/browser/math/builder.d.ts +18 -1
  136. package/lib/browser/math/builder.js +32 -1
  137. package/lib/browser/math/funding.js +30 -30
  138. package/lib/browser/math/insurance.d.ts +1 -1
  139. package/lib/browser/math/insurance.js +4 -5
  140. package/lib/browser/math/margin.d.ts +3 -11
  141. package/lib/browser/math/margin.js +10 -69
  142. package/lib/browser/math/market.d.ts +4 -12
  143. package/lib/browser/math/market.js +12 -46
  144. package/lib/browser/math/oracles.d.ts +4 -7
  145. package/lib/browser/math/oracles.js +24 -37
  146. package/lib/browser/math/orders.d.ts +2 -7
  147. package/lib/browser/math/orders.js +9 -81
  148. package/lib/browser/math/position.d.ts +0 -4
  149. package/lib/browser/math/position.js +6 -11
  150. package/lib/browser/math/repeg.d.ts +0 -1
  151. package/lib/browser/math/repeg.js +1 -23
  152. package/lib/browser/math/spotBalance.d.ts +4 -4
  153. package/lib/browser/math/spotBalance.js +6 -6
  154. package/lib/browser/math/spotMarket.d.ts +0 -6
  155. package/lib/browser/math/spotMarket.js +1 -16
  156. package/lib/browser/math/spotPosition.d.ts +4 -4
  157. package/lib/browser/math/state.d.ts +0 -2
  158. package/lib/browser/math/state.js +1 -9
  159. package/lib/browser/math/superStake.d.ts +11 -63
  160. package/lib/browser/math/superStake.js +29 -28
  161. package/lib/browser/math/trade.js +7 -7
  162. package/lib/browser/math/utils.d.ts +1 -1
  163. package/lib/browser/math/utils.js +1 -1
  164. package/lib/browser/memcmp.d.ts +0 -1
  165. package/lib/browser/memcmp.js +1 -10
  166. package/lib/browser/oracles/prelaunchOracleClient.js +3 -2
  167. package/lib/browser/oracles/pythClient.js +9 -3
  168. package/lib/browser/oracles/pythLazerClient.js +5 -4
  169. package/lib/browser/oracles/utils.d.ts +4 -0
  170. package/lib/browser/oracles/utils.js +9 -1
  171. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -3
  172. package/lib/browser/orderSubscriber/OrderSubscriber.js +16 -14
  173. package/lib/browser/orderSubscriber/WebsocketSubscription.js +1 -1
  174. package/lib/browser/orderSubscriber/grpcSubscription.js +2 -2
  175. package/lib/browser/orderSubscriber/types.d.ts +0 -2
  176. package/lib/browser/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
  177. package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +2 -6
  178. package/lib/browser/priorityFee/priorityFeeSubscriber.js +34 -18
  179. package/lib/browser/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
  180. package/lib/browser/priorityFee/priorityFeeSubscriberMap.js +3 -11
  181. package/lib/browser/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
  182. package/lib/browser/priorityFee/types.d.ts +3 -8
  183. package/lib/browser/priorityFee/velocityPriorityFeeMethod.d.ts +0 -8
  184. package/lib/browser/priorityFee/velocityPriorityFeeMethod.js +1 -3
  185. package/lib/browser/pyth/pythLazerSubscriber.d.ts +1 -1
  186. package/lib/browser/pyth/pythLazerSubscriber.js +1 -1
  187. package/lib/browser/pyth/types.d.ts +0 -1
  188. package/lib/browser/slot/SlotSubscriber.d.ts +1 -1
  189. package/lib/browser/slot/SlotSubscriber.js +2 -1
  190. package/lib/browser/slot/SlothashSubscriber.d.ts +3 -2
  191. package/lib/browser/slot/SlothashSubscriber.js +11 -4
  192. package/lib/browser/swap/UnifiedSwapClient.js +1 -1
  193. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
  194. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
  195. package/lib/browser/swift/signedMsgUserAccountSubscriber.d.ts +7 -7
  196. package/lib/browser/swift/signedMsgUserAccountSubscriber.js +14 -10
  197. package/lib/browser/swift/swiftOrderSubscriber.d.ts +7 -6
  198. package/lib/browser/swift/swiftOrderSubscriber.js +15 -16
  199. package/lib/browser/testClient.js +3 -2
  200. package/lib/browser/tokenFaucet.js +16 -2
  201. package/lib/browser/tx/baseTxSender.d.ts +4 -4
  202. package/lib/browser/tx/baseTxSender.js +5 -4
  203. package/lib/browser/tx/fastSingleTxSender.d.ts +3 -3
  204. package/lib/browser/tx/fastSingleTxSender.js +9 -5
  205. package/lib/browser/tx/reportTransactionError.d.ts +2 -2
  206. package/lib/browser/tx/reportTransactionError.js +5 -1
  207. package/lib/browser/tx/retryTxSender.d.ts +1 -1
  208. package/lib/browser/tx/retryTxSender.js +4 -2
  209. package/lib/browser/tx/txHandler.d.ts +7 -1
  210. package/lib/browser/tx/txHandler.js +54 -40
  211. package/lib/browser/tx/txParamProcessor.d.ts +4 -1
  212. package/lib/browser/tx/txParamProcessor.js +6 -0
  213. package/lib/browser/tx/types.d.ts +1 -1
  214. package/lib/browser/tx/whileValidTxSender.d.ts +1 -6
  215. package/lib/browser/tx/whileValidTxSender.js +35 -13
  216. package/lib/browser/types.d.ts +102 -157
  217. package/lib/browser/types.js +6 -2
  218. package/lib/browser/user.d.ts +22 -10
  219. package/lib/browser/user.js +174 -154
  220. package/lib/browser/userConfig.d.ts +3 -2
  221. package/lib/browser/userMap/WebsocketSubscription.d.ts +1 -1
  222. package/lib/browser/userMap/WebsocketSubscription.js +1 -1
  223. package/lib/browser/userMap/grpcSubscription.d.ts +1 -1
  224. package/lib/browser/userMap/grpcSubscription.js +1 -1
  225. package/lib/browser/userMap/referrerMap.d.ts +0 -2
  226. package/lib/browser/userMap/referrerMap.js +10 -7
  227. package/lib/browser/userMap/revenueShareEscrowMap.d.ts +0 -2
  228. package/lib/browser/userMap/revenueShareEscrowMap.js +4 -4
  229. package/lib/browser/userMap/userMap.d.ts +3 -5
  230. package/lib/browser/userMap/userMap.js +39 -30
  231. package/lib/browser/userMap/userMapConfig.d.ts +3 -2
  232. package/lib/browser/userMap/userStatsMap.d.ts +1 -3
  233. package/lib/browser/userMap/userStatsMap.js +18 -17
  234. package/lib/browser/userStats.d.ts +7 -4
  235. package/lib/browser/userStats.js +28 -18
  236. package/lib/browser/userStatsConfig.d.ts +3 -2
  237. package/lib/browser/util/TransactionConfirmationManager.js +4 -2
  238. package/lib/browser/util/chainClock.d.ts +1 -1
  239. package/lib/browser/util/computeUnits.d.ts +1 -1
  240. package/lib/browser/util/computeUnits.js +6 -1
  241. package/lib/browser/util/ed25519Utils.d.ts +1 -1
  242. package/lib/browser/util/ed25519Utils.js +1 -1
  243. package/lib/browser/velocityClient.d.ts +144 -71
  244. package/lib/browser/velocityClient.js +653 -457
  245. package/lib/browser/velocityClientConfig.d.ts +0 -8
  246. package/lib/node/accounts/basicUserAccountSubscriber.d.ts +5 -3
  247. package/lib/node/accounts/basicUserAccountSubscriber.d.ts.map +1 -1
  248. package/lib/node/accounts/basicUserAccountSubscriber.js +4 -3
  249. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
  250. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts.map +1 -1
  251. package/lib/node/accounts/basicUserStatsAccountSubscriber.js +4 -3
  252. package/lib/node/accounts/bulkAccountLoader.d.ts +5 -5
  253. package/lib/node/accounts/bulkAccountLoader.d.ts.map +1 -1
  254. package/lib/node/accounts/bulkAccountLoader.js +12 -1
  255. package/lib/node/accounts/grpcAccountSubscriber.d.ts +2 -1
  256. package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
  257. package/lib/node/accounts/grpcAccountSubscriber.js +8 -2
  258. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
  259. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
  260. package/lib/node/accounts/grpcMultiAccountSubscriber.js +13 -5
  261. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
  262. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
  263. package/lib/node/accounts/grpcMultiUserAccountSubscriber.js +12 -8
  264. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
  265. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
  266. package/lib/node/accounts/grpcProgramAccountSubscriber.js +9 -3
  267. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
  268. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
  269. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +19 -6
  270. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -5
  271. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  272. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +44 -23
  273. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
  274. package/lib/node/accounts/laserProgramAccountSubscriber.js +4 -1
  275. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
  276. package/lib/node/accounts/oneShotUserAccountSubscriber.js +4 -3
  277. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
  278. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
  279. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  280. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  281. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
  282. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
  283. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
  284. package/lib/node/accounts/pollingOracleAccountSubscriber.js +16 -5
  285. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
  286. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
  287. package/lib/node/accounts/pollingTokenAccountSubscriber.js +16 -5
  288. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +8 -4
  289. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts.map +1 -1
  290. package/lib/node/accounts/pollingUserAccountSubscriber.js +17 -11
  291. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
  292. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
  293. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +6 -6
  294. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -5
  295. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
  296. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +69 -35
  297. package/lib/node/accounts/types.d.ts +6 -12
  298. package/lib/node/accounts/types.d.ts.map +1 -1
  299. package/lib/node/accounts/utils.d.ts +1 -0
  300. package/lib/node/accounts/utils.d.ts.map +1 -1
  301. package/lib/node/accounts/utils.js +10 -3
  302. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +4 -2
  303. package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
  304. package/lib/node/accounts/webSocketAccountSubscriber.js +17 -5
  305. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
  306. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
  307. package/lib/node/accounts/webSocketAccountSubscriberV2.js +17 -6
  308. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  309. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  310. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
  311. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
  312. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
  313. package/lib/node/accounts/webSocketProgramAccountSubscriber.js +14 -3
  314. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
  315. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
  316. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
  317. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
  318. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
  319. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
  320. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
  321. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
  322. package/lib/node/accounts/webSocketUserAccountSubscriber.js +9 -0
  323. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
  324. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
  325. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
  326. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -8
  327. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
  328. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +52 -26
  329. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -7
  330. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  331. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +49 -20
  332. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
  333. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
  334. package/lib/node/accounts/websocketProgramUserAccountSubscriber.js +0 -3
  335. package/lib/node/addresses/marketAddresses.d.ts.map +1 -1
  336. package/lib/node/addresses/marketAddresses.js +3 -2
  337. package/lib/node/addresses/pda.d.ts +1 -9
  338. package/lib/node/addresses/pda.d.ts.map +1 -1
  339. package/lib/node/addresses/pda.js +4 -23
  340. package/lib/node/adminClient.d.ts +25 -29
  341. package/lib/node/adminClient.d.ts.map +1 -1
  342. package/lib/node/adminClient.js +168 -169
  343. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +2 -4
  344. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  345. package/lib/node/auctionSubscriber/auctionSubscriber.js +8 -10
  346. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +2 -4
  347. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  348. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +11 -10
  349. package/lib/node/auctionSubscriber/types.d.ts +3 -2
  350. package/lib/node/auctionSubscriber/types.d.ts.map +1 -1
  351. package/lib/node/bankrun/bankrunConnection.d.ts +6 -4
  352. package/lib/node/bankrun/bankrunConnection.d.ts.map +1 -1
  353. package/lib/node/bankrun/bankrunConnection.js +69 -31
  354. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
  355. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
  356. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +3 -2
  357. package/lib/node/clock/clockSubscriber.d.ts +6 -6
  358. package/lib/node/clock/clockSubscriber.d.ts.map +1 -1
  359. package/lib/node/clock/clockSubscriber.js +4 -3
  360. package/lib/node/config.d.ts +11 -20
  361. package/lib/node/config.d.ts.map +1 -1
  362. package/lib/node/config.js +13 -36
  363. package/lib/node/constants/index.d.ts +1 -2
  364. package/lib/node/constants/index.d.ts.map +1 -1
  365. package/lib/node/constants/index.js +1 -2
  366. package/lib/node/constants/numericConstants.d.ts +1 -3
  367. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  368. package/lib/node/constants/numericConstants.js +3 -5
  369. package/lib/node/constituentMap/constituentMap.d.ts +0 -2
  370. package/lib/node/constituentMap/constituentMap.d.ts.map +1 -1
  371. package/lib/node/constituentMap/constituentMap.js +10 -6
  372. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.d.ts.map +1 -1
  373. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
  374. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
  375. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts.map +1 -1
  376. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
  377. package/lib/node/core/VelocityCore.d.ts +9 -15
  378. package/lib/node/core/VelocityCore.d.ts.map +1 -1
  379. package/lib/node/core/VelocityCore.js +5 -7
  380. package/lib/node/core/instructions/perpOrders.d.ts +14 -0
  381. package/lib/node/core/instructions/perpOrders.d.ts.map +1 -1
  382. package/lib/node/core/instructions/perpOrders.js +14 -0
  383. package/lib/node/core/instructions/withdraw.d.ts +1 -1
  384. package/lib/node/core/instructions/withdraw.d.ts.map +1 -1
  385. package/lib/node/core/instructions/withdraw.js +1 -1
  386. package/lib/node/core/remainingAccounts.d.ts +2 -2
  387. package/lib/node/core/remainingAccounts.d.ts.map +1 -1
  388. package/lib/node/core/remainingAccounts.js +5 -5
  389. package/lib/node/decode/user.d.ts.map +1 -1
  390. package/lib/node/decode/user.js +9 -1
  391. package/lib/node/dlob/DLOB.d.ts +7 -2
  392. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  393. package/lib/node/dlob/DLOB.js +205 -142
  394. package/lib/node/dlob/DLOBNode.d.ts +5 -2
  395. package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
  396. package/lib/node/dlob/DLOBNode.js +7 -0
  397. package/lib/node/dlob/DLOBSubscriber.d.ts +0 -2
  398. package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
  399. package/lib/node/dlob/DLOBSubscriber.js +39 -39
  400. package/lib/node/dlob/NodeList.d.ts.map +1 -1
  401. package/lib/node/dlob/NodeList.js +8 -7
  402. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  403. package/lib/node/dlob/orderBookLevels.js +24 -17
  404. package/lib/node/dlob/types.d.ts +0 -2
  405. package/lib/node/dlob/types.d.ts.map +1 -1
  406. package/lib/node/events/eventList.d.ts +3 -3
  407. package/lib/node/events/eventList.d.ts.map +1 -1
  408. package/lib/node/events/eventList.js +4 -1
  409. package/lib/node/events/eventSubscriber.d.ts +6 -3
  410. package/lib/node/events/eventSubscriber.d.ts.map +1 -1
  411. package/lib/node/events/eventSubscriber.js +75 -26
  412. package/lib/node/events/eventsServerLogProvider.d.ts +2 -2
  413. package/lib/node/events/eventsServerLogProvider.d.ts.map +1 -1
  414. package/lib/node/events/eventsServerLogProvider.js +17 -10
  415. package/lib/node/events/fetchLogs.d.ts +1 -1
  416. package/lib/node/events/fetchLogs.d.ts.map +1 -1
  417. package/lib/node/events/fetchLogs.js +4 -2
  418. package/lib/node/events/parse.d.ts.map +1 -1
  419. package/lib/node/events/parse.js +14 -14
  420. package/lib/node/events/pollingLogProvider.d.ts +2 -2
  421. package/lib/node/events/pollingLogProvider.d.ts.map +1 -1
  422. package/lib/node/events/pollingLogProvider.js +1 -0
  423. package/lib/node/events/txEventCache.d.ts +3 -3
  424. package/lib/node/events/txEventCache.d.ts.map +1 -1
  425. package/lib/node/events/txEventCache.js +6 -2
  426. package/lib/node/events/types.d.ts +3 -7
  427. package/lib/node/events/types.d.ts.map +1 -1
  428. package/lib/node/events/types.js +1 -3
  429. package/lib/node/events/webSocketLogProvider.d.ts +2 -2
  430. package/lib/node/events/webSocketLogProvider.d.ts.map +1 -1
  431. package/lib/node/events/webSocketLogProvider.js +5 -2
  432. package/lib/node/factory/bigNum.js +1 -1
  433. package/lib/{browser/idl/drift.d.ts → node/idl/velocity.d.ts} +2413 -2480
  434. package/lib/node/idl/velocity.d.ts.map +1 -0
  435. package/lib/node/idl/{drift.json → velocity.json} +2265 -2333
  436. package/lib/node/index.d.ts +1 -3
  437. package/lib/node/index.d.ts.map +1 -1
  438. package/lib/node/index.js +1 -4
  439. package/lib/node/jupiter/jupiterClient.d.ts +1 -1
  440. package/lib/node/jupiter/jupiterClient.d.ts.map +1 -1
  441. package/lib/node/jupiter/jupiterClient.js +18 -8
  442. package/lib/node/marginCalculation.d.ts.map +1 -1
  443. package/lib/node/marginCalculation.js +1 -0
  444. package/lib/node/math/amm.d.ts +31 -13
  445. package/lib/node/math/amm.d.ts.map +1 -1
  446. package/lib/node/math/amm.js +87 -31
  447. package/lib/node/math/auction.d.ts.map +1 -1
  448. package/lib/node/math/auction.js +16 -12
  449. package/lib/node/math/bankruptcy.js +1 -1
  450. package/lib/node/math/builder.d.ts +18 -1
  451. package/lib/node/math/builder.d.ts.map +1 -1
  452. package/lib/node/math/builder.js +32 -1
  453. package/lib/node/math/funding.d.ts.map +1 -1
  454. package/lib/node/math/funding.js +30 -30
  455. package/lib/node/math/insurance.d.ts +1 -1
  456. package/lib/node/math/insurance.d.ts.map +1 -1
  457. package/lib/node/math/insurance.js +4 -5
  458. package/lib/node/math/margin.d.ts +3 -11
  459. package/lib/node/math/margin.d.ts.map +1 -1
  460. package/lib/node/math/margin.js +10 -69
  461. package/lib/node/math/market.d.ts +4 -12
  462. package/lib/node/math/market.d.ts.map +1 -1
  463. package/lib/node/math/market.js +12 -46
  464. package/lib/node/math/oracles.d.ts +4 -7
  465. package/lib/node/math/oracles.d.ts.map +1 -1
  466. package/lib/node/math/oracles.js +24 -37
  467. package/lib/node/math/orders.d.ts +2 -7
  468. package/lib/node/math/orders.d.ts.map +1 -1
  469. package/lib/node/math/orders.js +9 -81
  470. package/lib/node/math/position.d.ts +1 -5
  471. package/lib/node/math/position.d.ts.map +1 -1
  472. package/lib/node/math/position.js +6 -11
  473. package/lib/node/math/repeg.d.ts +0 -1
  474. package/lib/node/math/repeg.d.ts.map +1 -1
  475. package/lib/node/math/repeg.js +1 -23
  476. package/lib/node/math/spotBalance.d.ts +4 -4
  477. package/lib/node/math/spotBalance.d.ts.map +1 -1
  478. package/lib/node/math/spotBalance.js +6 -6
  479. package/lib/node/math/spotMarket.d.ts +0 -6
  480. package/lib/node/math/spotMarket.d.ts.map +1 -1
  481. package/lib/node/math/spotMarket.js +1 -16
  482. package/lib/node/math/spotPosition.d.ts +4 -4
  483. package/lib/node/math/spotPosition.d.ts.map +1 -1
  484. package/lib/node/math/state.d.ts +0 -2
  485. package/lib/node/math/state.d.ts.map +1 -1
  486. package/lib/node/math/state.js +1 -9
  487. package/lib/node/math/superStake.d.ts +11 -63
  488. package/lib/node/math/superStake.d.ts.map +1 -1
  489. package/lib/node/math/superStake.js +29 -28
  490. package/lib/node/math/trade.d.ts +2 -2
  491. package/lib/node/math/trade.d.ts.map +1 -1
  492. package/lib/node/math/trade.js +7 -7
  493. package/lib/node/math/utils.d.ts +1 -1
  494. package/lib/node/math/utils.js +1 -1
  495. package/lib/node/memcmp.d.ts +0 -1
  496. package/lib/node/memcmp.d.ts.map +1 -1
  497. package/lib/node/memcmp.js +1 -10
  498. package/lib/node/oracles/oracleClientCache.d.ts +1 -1
  499. package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
  500. package/lib/node/oracles/prelaunchOracleClient.js +3 -2
  501. package/lib/node/oracles/pythClient.d.ts.map +1 -1
  502. package/lib/node/oracles/pythClient.js +9 -3
  503. package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
  504. package/lib/node/oracles/pythLazerClient.js +5 -4
  505. package/lib/node/oracles/utils.d.ts +4 -0
  506. package/lib/node/oracles/utils.d.ts.map +1 -1
  507. package/lib/node/oracles/utils.js +9 -1
  508. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -3
  509. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  510. package/lib/node/orderSubscriber/OrderSubscriber.js +16 -14
  511. package/lib/node/orderSubscriber/WebsocketSubscription.js +1 -1
  512. package/lib/node/orderSubscriber/grpcSubscription.js +2 -2
  513. package/lib/node/orderSubscriber/types.d.ts +0 -2
  514. package/lib/node/orderSubscriber/types.d.ts.map +1 -1
  515. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
  516. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts.map +1 -1
  517. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +2 -6
  518. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
  519. package/lib/node/priorityFee/priorityFeeSubscriber.js +34 -18
  520. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
  521. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts.map +1 -1
  522. package/lib/node/priorityFee/priorityFeeSubscriberMap.js +3 -11
  523. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
  524. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts.map +1 -1
  525. package/lib/node/priorityFee/types.d.ts +3 -8
  526. package/lib/node/priorityFee/types.d.ts.map +1 -1
  527. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts +0 -8
  528. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts.map +1 -1
  529. package/lib/node/priorityFee/velocityPriorityFeeMethod.js +1 -3
  530. package/lib/node/pyth/pythLazerSubscriber.d.ts +1 -1
  531. package/lib/node/pyth/pythLazerSubscriber.js +1 -1
  532. package/lib/node/pyth/types.d.ts +0 -1
  533. package/lib/node/pyth/types.d.ts.map +1 -1
  534. package/lib/node/slot/SlotSubscriber.d.ts +1 -1
  535. package/lib/node/slot/SlotSubscriber.d.ts.map +1 -1
  536. package/lib/node/slot/SlotSubscriber.js +2 -1
  537. package/lib/node/slot/SlothashSubscriber.d.ts +3 -2
  538. package/lib/node/slot/SlothashSubscriber.d.ts.map +1 -1
  539. package/lib/node/slot/SlothashSubscriber.js +11 -4
  540. package/lib/node/swap/UnifiedSwapClient.js +1 -1
  541. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
  542. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts.map +1 -1
  543. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
  544. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts +7 -7
  545. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
  546. package/lib/node/swift/signedMsgUserAccountSubscriber.js +14 -10
  547. package/lib/node/swift/swiftOrderSubscriber.d.ts +7 -6
  548. package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
  549. package/lib/node/swift/swiftOrderSubscriber.js +15 -16
  550. package/lib/node/testClient.js +3 -2
  551. package/lib/node/tokenFaucet.d.ts.map +1 -1
  552. package/lib/node/tokenFaucet.js +16 -2
  553. package/lib/node/tx/baseTxSender.d.ts +4 -4
  554. package/lib/node/tx/baseTxSender.d.ts.map +1 -1
  555. package/lib/node/tx/baseTxSender.js +5 -4
  556. package/lib/node/tx/fastSingleTxSender.d.ts +3 -3
  557. package/lib/node/tx/fastSingleTxSender.d.ts.map +1 -1
  558. package/lib/node/tx/fastSingleTxSender.js +9 -5
  559. package/lib/node/tx/reportTransactionError.d.ts +2 -2
  560. package/lib/node/tx/reportTransactionError.d.ts.map +1 -1
  561. package/lib/node/tx/reportTransactionError.js +5 -1
  562. package/lib/node/tx/retryTxSender.d.ts +1 -1
  563. package/lib/node/tx/retryTxSender.d.ts.map +1 -1
  564. package/lib/node/tx/retryTxSender.js +4 -2
  565. package/lib/node/tx/txHandler.d.ts +9 -3
  566. package/lib/node/tx/txHandler.d.ts.map +1 -1
  567. package/lib/node/tx/txHandler.js +54 -40
  568. package/lib/node/tx/txParamProcessor.d.ts +4 -1
  569. package/lib/node/tx/txParamProcessor.d.ts.map +1 -1
  570. package/lib/node/tx/txParamProcessor.js +6 -0
  571. package/lib/node/tx/types.d.ts +1 -1
  572. package/lib/node/tx/types.d.ts.map +1 -1
  573. package/lib/node/tx/whileValidTxSender.d.ts +1 -6
  574. package/lib/node/tx/whileValidTxSender.d.ts.map +1 -1
  575. package/lib/node/tx/whileValidTxSender.js +35 -13
  576. package/lib/node/types.d.ts +100 -155
  577. package/lib/node/types.d.ts.map +1 -1
  578. package/lib/node/types.js +6 -2
  579. package/lib/node/user.d.ts +22 -10
  580. package/lib/node/user.d.ts.map +1 -1
  581. package/lib/node/user.js +174 -154
  582. package/lib/node/userConfig.d.ts +3 -2
  583. package/lib/node/userConfig.d.ts.map +1 -1
  584. package/lib/node/userMap/WebsocketSubscription.d.ts +1 -1
  585. package/lib/node/userMap/WebsocketSubscription.d.ts.map +1 -1
  586. package/lib/node/userMap/WebsocketSubscription.js +1 -1
  587. package/lib/node/userMap/grpcSubscription.d.ts +1 -1
  588. package/lib/node/userMap/grpcSubscription.d.ts.map +1 -1
  589. package/lib/node/userMap/grpcSubscription.js +1 -1
  590. package/lib/node/userMap/referrerMap.d.ts +0 -2
  591. package/lib/node/userMap/referrerMap.d.ts.map +1 -1
  592. package/lib/node/userMap/referrerMap.js +10 -7
  593. package/lib/node/userMap/revenueShareEscrowMap.d.ts +0 -2
  594. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  595. package/lib/node/userMap/revenueShareEscrowMap.js +4 -4
  596. package/lib/node/userMap/userMap.d.ts +3 -5
  597. package/lib/node/userMap/userMap.d.ts.map +1 -1
  598. package/lib/node/userMap/userMap.js +39 -30
  599. package/lib/node/userMap/userMapConfig.d.ts +3 -2
  600. package/lib/node/userMap/userMapConfig.d.ts.map +1 -1
  601. package/lib/node/userMap/userStatsMap.d.ts +1 -3
  602. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  603. package/lib/node/userMap/userStatsMap.js +18 -17
  604. package/lib/node/userStats.d.ts +7 -4
  605. package/lib/node/userStats.d.ts.map +1 -1
  606. package/lib/node/userStats.js +28 -18
  607. package/lib/node/userStatsConfig.d.ts +3 -2
  608. package/lib/node/userStatsConfig.d.ts.map +1 -1
  609. package/lib/node/util/TransactionConfirmationManager.d.ts.map +1 -1
  610. package/lib/node/util/TransactionConfirmationManager.js +4 -2
  611. package/lib/node/util/chainClock.d.ts +1 -1
  612. package/lib/node/util/chainClock.d.ts.map +1 -1
  613. package/lib/node/util/computeUnits.d.ts +1 -1
  614. package/lib/node/util/computeUnits.d.ts.map +1 -1
  615. package/lib/node/util/computeUnits.js +6 -1
  616. package/lib/node/util/ed25519Utils.d.ts +1 -1
  617. package/lib/node/util/ed25519Utils.js +1 -1
  618. package/lib/node/velocityClient.d.ts +145 -72
  619. package/lib/node/velocityClient.d.ts.map +1 -1
  620. package/lib/node/velocityClient.js +653 -457
  621. package/lib/node/velocityClientConfig.d.ts +0 -8
  622. package/lib/node/velocityClientConfig.d.ts.map +1 -1
  623. package/package.json +10 -9
  624. package/scripts/deposit-isolated-positions.ts +2 -2
  625. package/scripts/find-flagged-users.ts +1 -1
  626. package/scripts/grpc-client-test-comparison.ts +4 -4
  627. package/scripts/grpc-multiuser-client-test-comparison.ts +2 -2
  628. package/scripts/single-grpc-client-test.ts +3 -3
  629. package/scripts/updateVersion.js +4 -4
  630. package/scripts/withdraw-isolated-positions.ts +2 -2
  631. package/src/accounts/basicUserAccountSubscriber.ts +7 -5
  632. package/src/accounts/basicUserStatsAccountSubscriber.ts +9 -5
  633. package/src/accounts/bulkAccountLoader.ts +20 -7
  634. package/src/accounts/grpcAccountSubscriber.ts +11 -3
  635. package/src/accounts/grpcMultiAccountSubscriber.ts +24 -9
  636. package/src/accounts/grpcMultiUserAccountSubscriber.ts +16 -12
  637. package/src/accounts/grpcProgramAccountSubscriber.ts +12 -4
  638. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +17 -14
  639. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +69 -49
  640. package/src/accounts/laserProgramAccountSubscriber.ts +4 -1
  641. package/src/accounts/oneShotUserAccountSubscriber.ts +5 -3
  642. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +8 -3
  643. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +11 -5
  644. package/src/accounts/pollingOracleAccountSubscriber.ts +17 -10
  645. package/src/accounts/pollingTokenAccountSubscriber.ts +17 -10
  646. package/src/accounts/pollingUserAccountSubscriber.ts +26 -20
  647. package/src/accounts/pollingUserStatsAccountSubscriber.ts +12 -10
  648. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +80 -41
  649. package/src/accounts/types.ts +8 -13
  650. package/src/accounts/utils.ts +12 -2
  651. package/src/accounts/webSocketAccountSubscriber.ts +23 -10
  652. package/src/accounts/webSocketAccountSubscriberV2.ts +23 -8
  653. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +17 -2
  654. package/src/accounts/webSocketProgramAccountSubscriber.ts +29 -4
  655. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +30 -4
  656. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +29 -4
  657. package/src/accounts/webSocketUserAccountSubscriber.ts +11 -2
  658. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +15 -2
  659. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +79 -58
  660. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +77 -45
  661. package/src/accounts/websocketProgramUserAccountSubscriber.ts +1 -6
  662. package/src/addresses/marketAddresses.ts +3 -2
  663. package/src/addresses/pda.ts +3 -38
  664. package/src/adminClient.ts +285 -315
  665. package/src/auctionSubscriber/auctionSubscriber.ts +8 -11
  666. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +13 -11
  667. package/src/auctionSubscriber/types.ts +3 -3
  668. package/src/bankrun/bankrunConnection.ts +83 -39
  669. package/src/blockhashSubscriber/BlockhashSubscriber.ts +5 -4
  670. package/src/clock/clockSubscriber.ts +10 -9
  671. package/src/config.ts +16 -70
  672. package/src/constants/index.ts +1 -2
  673. package/src/constants/numericConstants.ts +3 -3
  674. package/src/constituentMap/constituentMap.ts +10 -7
  675. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +4 -2
  676. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +13 -4
  677. package/src/core/VelocityCore.ts +11 -20
  678. package/src/core/instructions/perpOrders.ts +14 -0
  679. package/src/core/instructions/withdraw.ts +2 -2
  680. package/src/core/remainingAccounts.ts +7 -7
  681. package/src/decode/user.ts +8 -1
  682. package/src/dlob/DLOB.ts +300 -176
  683. package/src/dlob/DLOBNode.ts +23 -3
  684. package/src/dlob/DLOBSubscriber.ts +53 -42
  685. package/src/dlob/NodeList.ts +8 -7
  686. package/src/dlob/orderBookLevels.ts +51 -25
  687. package/src/dlob/types.ts +0 -2
  688. package/src/events/eventList.ts +4 -1
  689. package/src/events/eventSubscriber.ts +108 -50
  690. package/src/events/eventsServerLogProvider.ts +24 -15
  691. package/src/events/fetchLogs.ts +3 -3
  692. package/src/events/parse.ts +14 -14
  693. package/src/events/pollingLogProvider.ts +2 -2
  694. package/src/events/txEventCache.ts +8 -2
  695. package/src/events/types.ts +4 -15
  696. package/src/events/webSocketLogProvider.ts +5 -3
  697. package/src/factory/bigNum.ts +2 -2
  698. package/src/idl/{drift.json → velocity.json} +2265 -2333
  699. package/src/idl/{drift.ts → velocity.ts} +2267 -2335
  700. package/src/index.ts +1 -6
  701. package/src/jupiter/jupiterClient.ts +30 -10
  702. package/src/margin/README.md +2 -2
  703. package/src/marginCalculation.ts +1 -0
  704. package/src/math/amm.ts +217 -40
  705. package/src/math/auction.ts +16 -12
  706. package/src/math/bankruptcy.ts +1 -1
  707. package/src/math/builder.ts +45 -1
  708. package/src/math/funding.ts +51 -47
  709. package/src/math/insurance.ts +6 -8
  710. package/src/math/margin.ts +12 -119
  711. package/src/math/market.ts +16 -98
  712. package/src/math/oracles.ts +29 -43
  713. package/src/math/orders.ts +13 -109
  714. package/src/math/position.ts +6 -12
  715. package/src/math/repeg.ts +0 -29
  716. package/src/math/spotBalance.ts +14 -10
  717. package/src/math/spotMarket.ts +2 -28
  718. package/src/math/spotPosition.ts +4 -4
  719. package/src/math/state.ts +0 -8
  720. package/src/math/superStake.ts +36 -85
  721. package/src/math/trade.ts +7 -3
  722. package/src/math/utils.ts +1 -1
  723. package/src/memcmp.ts +0 -9
  724. package/src/oracles/prelaunchOracleClient.ts +7 -2
  725. package/src/oracles/pythClient.ts +12 -3
  726. package/src/oracles/pythLazerClient.ts +10 -5
  727. package/src/oracles/utils.ts +15 -0
  728. package/src/orderSubscriber/OrderSubscriber.ts +12 -12
  729. package/src/orderSubscriber/WebsocketSubscription.ts +1 -1
  730. package/src/orderSubscriber/grpcSubscription.ts +2 -2
  731. package/src/orderSubscriber/types.ts +0 -2
  732. package/src/priorityFee/heliusPriorityFeeMethod.ts +1 -1
  733. package/src/priorityFee/priorityFeeSubscriber.ts +50 -21
  734. package/src/priorityFee/priorityFeeSubscriberMap.ts +2 -10
  735. package/src/priorityFee/solanaPriorityFeeMethod.ts +1 -1
  736. package/src/priorityFee/types.ts +3 -13
  737. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -12
  738. package/src/pyth/pythLazerSubscriber.ts +1 -1
  739. package/src/pyth/types.ts +0 -2
  740. package/src/slot/SlotSubscriber.ts +3 -3
  741. package/src/slot/SlothashSubscriber.ts +17 -6
  742. package/src/swap/UnifiedSwapClient.ts +1 -1
  743. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +5 -6
  744. package/src/swift/signedMsgUserAccountSubscriber.ts +18 -16
  745. package/src/swift/swiftOrderSubscriber.ts +17 -21
  746. package/src/testClient.ts +2 -2
  747. package/src/tokenFaucet.ts +22 -3
  748. package/src/tx/baseTxSender.ts +10 -10
  749. package/src/tx/fastSingleTxSender.ts +12 -8
  750. package/src/tx/reportTransactionError.ts +12 -7
  751. package/src/tx/retryTxSender.ts +6 -4
  752. package/src/tx/txHandler.ts +88 -43
  753. package/src/tx/txParamProcessor.ts +18 -3
  754. package/src/tx/types.ts +1 -1
  755. package/src/tx/whileValidTxSender.ts +51 -22
  756. package/src/types.ts +119 -173
  757. package/src/user.ts +208 -165
  758. package/src/userConfig.ts +1 -3
  759. package/src/userMap/WebsocketSubscription.ts +2 -2
  760. package/src/userMap/grpcSubscription.ts +2 -2
  761. package/src/userMap/referrerMap.ts +13 -13
  762. package/src/userMap/revenueShareEscrowMap.ts +6 -5
  763. package/src/userMap/userMap.ts +46 -32
  764. package/src/userMap/userMapConfig.ts +3 -3
  765. package/src/userMap/userStatsMap.ts +32 -23
  766. package/src/userStats.ts +22 -13
  767. package/src/userStatsConfig.ts +3 -3
  768. package/src/util/TransactionConfirmationManager.ts +10 -2
  769. package/src/util/chainClock.ts +1 -1
  770. package/src/util/computeUnits.ts +7 -3
  771. package/src/util/ed25519Utils.ts +1 -1
  772. package/src/velocityClient.ts +867 -600
  773. package/src/velocityClientConfig.ts +0 -10
  774. package/tests/{DriftCore → VelocityCore}/decode.test.ts +1 -1
  775. package/tests/{DriftCore → VelocityCore}/fill_trigger.test.ts +1 -1
  776. package/tests/{DriftCore → VelocityCore}/instructions.test.ts +1 -1
  777. package/tests/{DriftCore → VelocityCore}/pdas.test.ts +4 -2
  778. package/tests/amm/test.ts +138 -0
  779. package/tests/ci/verifyConstants.ts +24 -27
  780. package/tests/decode/test.ts +2 -2
  781. package/tests/dlob/helpers.ts +11 -10
  782. package/tests/events/parseLogsForCuUsage.ts +15 -15
  783. package/tests/user/helpers.ts +9 -9
  784. package/tests/user/test.ts +13 -10
  785. package/tsconfig.json +1 -0
  786. package/lib/browser/constants/insuranceFund.d.ts +0 -5
  787. package/lib/browser/constants/insuranceFund.js +0 -9
  788. package/lib/browser/tx/forwardOnlyTxSender.d.ts +0 -37
  789. package/lib/browser/tx/forwardOnlyTxSender.js +0 -92
  790. package/lib/browser/util/deprecatedAlias.d.ts +0 -26
  791. package/lib/browser/util/deprecatedAlias.js +0 -10
  792. package/lib/browser/util/tps.d.ts +0 -2
  793. package/lib/browser/util/tps.js +0 -16
  794. package/lib/node/constants/insuranceFund.d.ts +0 -6
  795. package/lib/node/constants/insuranceFund.d.ts.map +0 -1
  796. package/lib/node/constants/insuranceFund.js +0 -9
  797. package/lib/node/idl/drift.d.ts.map +0 -1
  798. package/lib/node/tx/forwardOnlyTxSender.d.ts +0 -38
  799. package/lib/node/tx/forwardOnlyTxSender.d.ts.map +0 -1
  800. package/lib/node/tx/forwardOnlyTxSender.js +0 -92
  801. package/lib/node/util/deprecatedAlias.d.ts +0 -27
  802. package/lib/node/util/deprecatedAlias.d.ts.map +0 -1
  803. package/lib/node/util/deprecatedAlias.js +0 -10
  804. package/lib/node/util/tps.d.ts +0 -3
  805. package/lib/node/util/tps.d.ts.map +0 -1
  806. package/lib/node/util/tps.js +0 -16
  807. package/src/constants/insuranceFund.ts +0 -8
  808. package/src/tx/forwardOnlyTxSender.ts +0 -145
  809. package/src/util/deprecatedAlias.ts +0 -21
  810. package/src/util/tps.ts +0 -27
  811. /package/lib/browser/idl/{drift.js → velocity.js} +0 -0
  812. /package/lib/node/idl/{drift.js → velocity.js} +0 -0
  813. /package/tests/{DriftCore → VelocityCore}/perp_orders.test.ts +0 -0
  814. /package/tests/{DriftCore → VelocityCore}/remainingAccounts.test.ts +0 -0
  815. /package/tests/{DriftCore → VelocityCore}/settlement_liquidation.test.ts +0 -0
package/src/user.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * User — read-oriented abstraction over the on-chain `User` account.
3
3
  *
4
4
  * Responsibilities:
5
- * - Margin and free-collateral calculations (mirrors `programs/drift/src/math/margin.rs`).
5
+ * - Margin and free-collateral calculations (mirrors `programs/velocity/src/math/margin.rs`).
6
6
  * - Position accessors: perp positions, spot positions, unrealized PnL, leverage.
7
7
  * - Open order queries and filtering.
8
8
  * - Health factor and liquidation threshold checks.
@@ -58,6 +58,7 @@ import {
58
58
  UserAccountEvents,
59
59
  UserAccountSubscriber,
60
60
  } from './accounts/types';
61
+ import { assertDataAndSlot } from './accounts/utils';
61
62
  import { BigNum } from './factory/bigNum';
62
63
  import { BN } from './isomorphic/anchor';
63
64
  import { calculateBaseAssetValue, calculatePositionPNL } from './math/position';
@@ -129,10 +130,6 @@ export type MarginType = 'Cross' | 'Isolated';
129
130
 
130
131
  export class User {
131
132
  velocityClient: VelocityClient;
132
- /** @deprecated Use `velocityClient` instead. `driftClient` will be removed in a future major. */
133
- public get driftClient(): VelocityClient {
134
- return this.velocityClient;
135
- }
136
133
  userAccountPublicKey: PublicKey;
137
134
  accountSubscriber: UserAccountSubscriber;
138
135
  _isSubscribed = false;
@@ -148,7 +145,7 @@ export class User {
148
145
 
149
146
  public constructor(config: UserConfig) {
150
147
  // Type-system guarantees at least one of the two is supplied.
151
- const velocityClient = (config.velocityClient ?? config.driftClient)!;
148
+ const velocityClient = config.velocityClient!;
152
149
  this.velocityClient = velocityClient;
153
150
  this.userAccountPublicKey = config.userAccountPublicKey;
154
151
  if (config.accountSubscription?.type === 'polling') {
@@ -228,19 +225,47 @@ export class User {
228
225
  this.isSubscribed = false;
229
226
  }
230
227
 
231
- public getUserAccount(): UserAccount {
232
- return this.accountSubscriber.getUserAccountAndSlot().data;
228
+ public getUserAccount(): UserAccount | undefined {
229
+ return this.accountSubscriber.getUserAccountAndSlot()?.data;
233
230
  }
234
231
 
235
- public async forceGetUserAccount(): Promise<UserAccount> {
232
+ /**
233
+ * Like {@link getUserAccount} but throws a named error instead of returning
234
+ * `undefined` when the account has not been loaded yet. Use at call sites
235
+ * that structurally require a loaded account.
236
+ */
237
+ public getUserAccountOrThrow(): UserAccount {
238
+ const userAccount = this.getUserAccount();
239
+ if (!userAccount) {
240
+ throw new Error(
241
+ `User account not loaded: ${this.getUserAccountPublicKey().toString()}`
242
+ );
243
+ }
244
+ return userAccount;
245
+ }
246
+
247
+ public async forceGetUserAccount(): Promise<UserAccount | undefined> {
236
248
  await this.fetchAccounts();
237
- return this.accountSubscriber.getUserAccountAndSlot().data;
249
+ const account = this.accountSubscriber.getUserAccountAndSlot();
250
+ return account?.data;
238
251
  }
239
252
 
240
253
  public getUserAccountAndSlot(): DataAndSlot<UserAccount> | undefined {
241
254
  return this.accountSubscriber.getUserAccountAndSlot();
242
255
  }
243
256
 
257
+ /**
258
+ * Like {@link getUserAccountAndSlot} but throws a named error instead of
259
+ * returning `undefined` when the account has not been loaded yet. Use at
260
+ * call sites that structurally require a loaded account.
261
+ */
262
+ public getUserAccountAndSlotOrThrow(): DataAndSlot<UserAccount> {
263
+ return assertDataAndSlot(
264
+ this.accountSubscriber.getUserAccountAndSlot(),
265
+ `User account not loaded: ${this.getUserAccountPublicKey().toString()}`
266
+ );
267
+ }
268
+
244
269
  public getPerpPositionForUserAccount(
245
270
  userAccount: UserAccount,
246
271
  marketIndex: number
@@ -256,22 +281,30 @@ export class User {
256
281
  * @returns userPerpPosition
257
282
  */
258
283
  public getPerpPosition(marketIndex: number): PerpPosition | undefined {
259
- const userAccount = this.getUserAccount();
284
+ const userAccount = this.getUserAccountOrThrow();
260
285
  return this.getPerpPositionForUserAccount(userAccount, marketIndex);
261
286
  }
262
287
 
263
288
  public getPerpPositionOrEmpty(marketIndex: number): PerpPosition {
264
- const userAccount = this.getUserAccount();
289
+ const userAccount = this.getUserAccountOrThrow();
265
290
  return (
266
291
  this.getPerpPositionForUserAccount(userAccount, marketIndex) ??
267
292
  this.getEmptyPosition(marketIndex)
268
293
  );
269
294
  }
270
295
 
296
+ public getPerpPositionOrThrow(marketIndex: number): PerpPosition {
297
+ const position = this.getPerpPosition(marketIndex);
298
+ if (!position) {
299
+ throw new Error(`No perp position found for market ${marketIndex}`);
300
+ }
301
+ return position;
302
+ }
303
+
271
304
  public getPerpPositionAndSlot(
272
305
  marketIndex: number
273
306
  ): DataAndSlot<PerpPosition | undefined> {
274
- const userAccount = this.getUserAccountAndSlot();
307
+ const userAccount = this.getUserAccountAndSlotOrThrow();
275
308
  const perpPosition = this.getPerpPositionForUserAccount(
276
309
  userAccount.data,
277
310
  marketIndex
@@ -297,14 +330,14 @@ export class User {
297
330
  * @returns userSpotPosition
298
331
  */
299
332
  public getSpotPosition(marketIndex: number): SpotPosition | undefined {
300
- const userAccount = this.getUserAccount();
333
+ const userAccount = this.getUserAccountOrThrow();
301
334
  return this.getSpotPositionForUserAccount(userAccount, marketIndex);
302
335
  }
303
336
 
304
337
  public getSpotPositionAndSlot(
305
338
  marketIndex: number
306
339
  ): DataAndSlot<SpotPosition | undefined> {
307
- const userAccount = this.getUserAccountAndSlot();
340
+ const userAccount = this.getUserAccountAndSlotOrThrow();
308
341
  const spotPosition = this.getSpotPositionForUserAccount(
309
342
  userAccount.data,
310
343
  marketIndex
@@ -338,7 +371,8 @@ export class User {
338
371
  if (spotPosition === undefined) {
339
372
  return ZERO;
340
373
  }
341
- const spotMarket = this.velocityClient.getSpotMarketAccount(marketIndex);
374
+ const spotMarket =
375
+ this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
342
376
  return getSignedTokenAmount(
343
377
  getTokenAmount(
344
378
  spotPosition.scaledBalance,
@@ -376,8 +410,8 @@ export class User {
376
410
  const perpPosition = this.getPerpPosition(perpMarketIndex);
377
411
  if (!perpPosition) return ZERO;
378
412
  const perpMarket =
379
- this.velocityClient.getPerpMarketAccount(perpMarketIndex);
380
- const spotMarket = this.velocityClient.getSpotMarketAccount(
413
+ this.velocityClient.getPerpMarketAccountOrThrow(perpMarketIndex);
414
+ const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
381
415
  perpMarket.quoteSpotMarketIndex
382
416
  );
383
417
  if (perpPosition === undefined) {
@@ -399,10 +433,10 @@ export class User {
399
433
  return total;
400
434
  }
401
435
 
402
- const perpMarket = this.velocityClient.getPerpMarketAccount(
436
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
403
437
  perpPosition.marketIndex
404
438
  );
405
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
439
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
406
440
  perpMarket.quoteSpotMarketIndex
407
441
  );
408
442
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -442,12 +476,12 @@ export class User {
442
476
  * @returns Order
443
477
  */
444
478
  public getOrder(orderId: number): Order | undefined {
445
- const userAccount = this.getUserAccount();
479
+ const userAccount = this.getUserAccountOrThrow();
446
480
  return this.getOrderForUserAccount(userAccount, orderId);
447
481
  }
448
482
 
449
483
  public getOrderAndSlot(orderId: number): DataAndSlot<Order | undefined> {
450
- const userAccount = this.getUserAccountAndSlot();
484
+ const userAccount = this.getUserAccountAndSlotOrThrow();
451
485
  const order = this.getOrderForUserAccount(userAccount.data, orderId);
452
486
  return {
453
487
  data: order,
@@ -469,14 +503,14 @@ export class User {
469
503
  * @returns Order
470
504
  */
471
505
  public getOrderByUserOrderId(userOrderId: number): Order | undefined {
472
- const userAccount = this.getUserAccount();
506
+ const userAccount = this.getUserAccountOrThrow();
473
507
  return this.getOrderByUserIdForUserAccount(userAccount, userOrderId);
474
508
  }
475
509
 
476
510
  public getOrderByUserOrderIdAndSlot(
477
511
  userOrderId: number
478
512
  ): DataAndSlot<Order | undefined> {
479
- const userAccount = this.getUserAccountAndSlot();
513
+ const userAccount = this.getUserAccountAndSlotOrThrow();
480
514
  const order = this.getOrderByUserIdForUserAccount(
481
515
  userAccount.data,
482
516
  userOrderId
@@ -487,7 +521,9 @@ export class User {
487
521
  };
488
522
  }
489
523
 
490
- public getOpenOrdersForUserAccount(userAccount?: UserAccount): Order[] {
524
+ public getOpenOrdersForUserAccount(
525
+ userAccount?: UserAccount
526
+ ): Order[] | undefined {
491
527
  return userAccount?.orders.filter((order) =>
492
528
  isVariant(order.status, 'open')
493
529
  );
@@ -495,12 +531,12 @@ export class User {
495
531
 
496
532
  public getOpenOrders(): Order[] {
497
533
  const userAccount = this.getUserAccount();
498
- return this.getOpenOrdersForUserAccount(userAccount);
534
+ return this.getOpenOrdersForUserAccount(userAccount) ?? [];
499
535
  }
500
536
 
501
537
  public getOpenOrdersAndSlot(): DataAndSlot<Order[]> {
502
- const userAccount = this.getUserAccountAndSlot();
503
- const openOrders = this.getOpenOrdersForUserAccount(userAccount.data);
538
+ const userAccount = this.getUserAccountAndSlotOrThrow();
539
+ const openOrders = this.getOpenOrdersForUserAccount(userAccount.data) ?? [];
504
540
  return {
505
541
  data: openOrders,
506
542
  slot: userAccount.slot,
@@ -525,7 +561,7 @@ export class User {
525
561
  * @returns : open asks
526
562
  */
527
563
  public getPerpBidAsks(marketIndex: number): [BN, BN] {
528
- const position = this.getPerpPosition(marketIndex);
564
+ const position = this.getPerpPositionOrThrow(marketIndex);
529
565
 
530
566
  const totalOpenBids = position.openBids;
531
567
  const totalOpenAsks = position.openAsks;
@@ -540,12 +576,13 @@ export class User {
540
576
  public getPerpBuyingPower(
541
577
  marketIndex: number,
542
578
  collateralBuffer = ZERO,
543
- maxMarginRatio = undefined,
579
+ maxMarginRatio: number | undefined = undefined,
544
580
  positionType: 'isolated' | 'cross' = 'cross'
545
581
  ): BN {
546
582
  const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
547
583
 
548
- const perpMarket = this.velocityClient.getPerpMarketAccount(marketIndex);
584
+ const perpMarket =
585
+ this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
549
586
  const oraclePriceData = this.getOracleDataForPerpMarket(marketIndex);
550
587
  const worstCaseBaseAssetAmount = perpPosition
551
588
  ? calculateWorstCaseBaseAssetAmount(
@@ -595,18 +632,24 @@ export class User {
595
632
  );
596
633
  }
597
634
 
635
+ private resolveMaxMarginRatio(perpMarketMaxMarginRatio?: number): number {
636
+ // 0 means "no custom margin ratio override", so Math.max returns
637
+ // userAccount.maxMarginRatio unchanged — the expected semantic.
638
+ return Math.max(
639
+ perpMarketMaxMarginRatio ?? 0,
640
+ this.getUserAccountOrThrow().maxMarginRatio
641
+ );
642
+ }
643
+
598
644
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(
599
645
  marketIndex: number,
600
646
  freeCollateral: BN,
601
647
  baseAssetAmount: BN,
602
- perpMarketMaxMarginRatio = undefined
648
+ perpMarketMaxMarginRatio: number | undefined = undefined
603
649
  ): BN {
604
- const maxMarginRatio = Math.max(
605
- perpMarketMaxMarginRatio,
606
- this.getUserAccount().maxMarginRatio
607
- );
650
+ const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
608
651
  const marginRatio = calculateMarketMarginRatio(
609
- this.velocityClient.getPerpMarketAccount(marketIndex),
652
+ this.velocityClient.getPerpMarketAccountOrThrow(marketIndex),
610
653
  baseAssetAmount,
611
654
  'Initial',
612
655
  maxMarginRatio
@@ -751,11 +794,11 @@ export class User {
751
794
  }
752
795
 
753
796
  public getActivePerpPositions(): PerpPosition[] {
754
- const userAccount = this.getUserAccount();
797
+ const userAccount = this.getUserAccountOrThrow();
755
798
  return this.getActivePerpPositionsForUserAccount(userAccount);
756
799
  }
757
800
  public getActivePerpPositionsAndSlot(): DataAndSlot<PerpPosition[]> {
758
- const userAccount = this.getUserAccountAndSlot();
801
+ const userAccount = this.getUserAccountAndSlotOrThrow();
759
802
  const positions = this.getActivePerpPositionsForUserAccount(
760
803
  userAccount.data
761
804
  );
@@ -774,11 +817,11 @@ export class User {
774
817
  }
775
818
 
776
819
  public getActiveSpotPositions(): SpotPosition[] {
777
- const userAccount = this.getUserAccount();
820
+ const userAccount = this.getUserAccountOrThrow();
778
821
  return this.getActiveSpotPositionsForUserAccount(userAccount);
779
822
  }
780
823
  public getActiveSpotPositionsAndSlot(): DataAndSlot<SpotPosition[]> {
781
- const userAccount = this.getUserAccountAndSlot();
824
+ const userAccount = this.getUserAccountAndSlotOrThrow();
782
825
  const positions = this.getActiveSpotPositionsForUserAccount(
783
826
  userAccount.data
784
827
  );
@@ -804,14 +847,14 @@ export class User {
804
847
  marketIndex !== undefined ? pos.marketIndex === marketIndex : true
805
848
  )
806
849
  .reduce((unrealizedPnl, perpPosition) => {
807
- const market = this.velocityClient.getPerpMarketAccount(
850
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
808
851
  perpPosition.marketIndex
809
852
  );
810
853
  const oraclePriceData = this.getMMOracleDataForPerpMarket(
811
854
  market.marketIndex
812
855
  );
813
856
 
814
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
857
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
815
858
  market.quoteSpotMarketIndex
816
859
  );
817
860
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -875,12 +918,12 @@ export class User {
875
918
  * @returns : Precision QUOTE_PRECISION
876
919
  */
877
920
  public getUnrealizedFundingPNL(marketIndex?: number): BN {
878
- return this.getUserAccount()
921
+ return this.getUserAccountOrThrow()
879
922
  .perpPositions.filter((pos) =>
880
923
  marketIndex !== undefined ? pos.marketIndex === marketIndex : true
881
924
  )
882
925
  .reduce((pnl, perpPosition) => {
883
- const market = this.velocityClient.getPerpMarketAccount(
926
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
884
927
  perpPosition.marketIndex
885
928
  );
886
929
  return pnl.add(calculateUnsettledFundingPnl(market, perpPosition));
@@ -899,7 +942,7 @@ export class User {
899
942
  let netQuoteValue = ZERO;
900
943
  let totalAssetValue = ZERO;
901
944
  let totalLiabilityValue = ZERO;
902
- for (const spotPosition of this.getUserAccount().spotPositions) {
945
+ for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
903
946
  const countForBase =
904
947
  marketIndex === undefined || spotPosition.marketIndex === marketIndex;
905
948
 
@@ -915,7 +958,9 @@ export class User {
915
958
  }
916
959
 
917
960
  const spotMarketAccount: SpotMarketAccount =
918
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
961
+ this.velocityClient.getSpotMarketAccountOrThrow(
962
+ spotPosition.marketIndex
963
+ );
919
964
 
920
965
  const oraclePriceData = this.getOracleDataForSpotMarket(
921
966
  spotPosition.marketIndex
@@ -1018,7 +1063,7 @@ export class User {
1018
1063
  spotMarketAccount,
1019
1064
  strictOraclePrice,
1020
1065
  marginCategory,
1021
- this.getUserAccount().maxMarginRatio
1066
+ this.getUserAccountOrThrow().maxMarginRatio
1022
1067
  );
1023
1068
 
1024
1069
  if (worstCaseTokenAmount.gt(ZERO) && countForBase) {
@@ -1051,7 +1096,10 @@ export class User {
1051
1096
  if (worstCaseQuoteTokenAmount.lt(ZERO) && countForQuote) {
1052
1097
  let weight = SPOT_MARKET_WEIGHT_PRECISION;
1053
1098
  if (marginCategory === 'Initial') {
1054
- weight = BN.max(weight, new BN(this.getUserAccount().maxMarginRatio));
1099
+ weight = BN.max(
1100
+ weight,
1101
+ new BN(this.getUserAccountOrThrow().maxMarginRatio)
1102
+ );
1055
1103
  }
1056
1104
 
1057
1105
  const weightedTokenValue = worstCaseQuoteTokenAmount
@@ -1108,7 +1156,7 @@ export class User {
1108
1156
  tokenAmount,
1109
1157
  strictOraclePrice,
1110
1158
  spotMarketAccount,
1111
- this.getUserAccount().maxMarginRatio,
1159
+ this.getUserAccountOrThrow().maxMarginRatio,
1112
1160
  marginCategory,
1113
1161
  liquidationBuffer
1114
1162
  );
@@ -1142,7 +1190,7 @@ export class User {
1142
1190
  tokenAmount,
1143
1191
  strictOraclePrice,
1144
1192
  spotMarketAccount,
1145
- this.getUserAccount().maxMarginRatio,
1193
+ this.getUserAccountOrThrow().maxMarginRatio,
1146
1194
  marginCategory
1147
1195
  );
1148
1196
  }
@@ -1203,8 +1251,15 @@ export class User {
1203
1251
  });
1204
1252
 
1205
1253
  if (perpMarketIndex !== undefined) {
1206
- const { totalCollateral, totalCollateralBuffer } =
1254
+ const isolatedMarginCalculation =
1207
1255
  marginCalc.isolatedMarginCalculations.get(perpMarketIndex);
1256
+ if (!isolatedMarginCalculation) {
1257
+ throw new Error(
1258
+ `No isolated margin calculation for perp market ${perpMarketIndex}`
1259
+ );
1260
+ }
1261
+ const { totalCollateral, totalCollateralBuffer } =
1262
+ isolatedMarginCalculation;
1208
1263
  if (liquidationBuffer?.gt(ZERO)) {
1209
1264
  return totalCollateralBuffer;
1210
1265
  }
@@ -1304,7 +1359,7 @@ export class User {
1304
1359
  includeOpenOrders?: boolean,
1305
1360
  strict = false
1306
1361
  ): BN {
1307
- const market = this.velocityClient.getPerpMarketAccount(
1362
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1308
1363
  perpPosition.marketIndex
1309
1364
  );
1310
1365
 
@@ -1338,7 +1393,7 @@ export class User {
1338
1393
  if (marginCategory) {
1339
1394
  const userCustomMargin = Math.max(
1340
1395
  perpPosition.maxMarginRatio,
1341
- this.getUserAccount().maxMarginRatio
1396
+ this.getUserAccountOrThrow().maxMarginRatio
1342
1397
  );
1343
1398
  let marginRatio = new BN(
1344
1399
  calculateMarketMarginRatio(
@@ -1357,7 +1412,7 @@ export class User {
1357
1412
  marginRatio = ZERO;
1358
1413
  }
1359
1414
 
1360
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
1415
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
1361
1416
  market.quoteSpotMarketIndex
1362
1417
  );
1363
1418
  const quoteOraclePriceData =
@@ -1400,7 +1455,7 @@ export class User {
1400
1455
  includeOpenOrders?: boolean,
1401
1456
  strict = false
1402
1457
  ): BN {
1403
- const perpPosition = this.getPerpPosition(marketIndex);
1458
+ const perpPosition = this.getPerpPositionOrThrow(marketIndex);
1404
1459
  return this.calculateWeightedPerpPositionLiability(
1405
1460
  perpPosition,
1406
1461
  marginCategory,
@@ -1445,7 +1500,7 @@ export class User {
1445
1500
  includeOpenOrders = false
1446
1501
  ): BN {
1447
1502
  const userPosition = this.getPerpPositionOrEmpty(marketIndex);
1448
- const market = this.velocityClient.getPerpMarketAccount(
1503
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1449
1504
  userPosition.marketIndex
1450
1505
  );
1451
1506
  return calculateBaseAssetValueWithOracle(
@@ -1466,7 +1521,7 @@ export class User {
1466
1521
  includeOpenOrders = false
1467
1522
  ): BN {
1468
1523
  const userPosition = this.getPerpPositionOrEmpty(marketIndex);
1469
- const market = this.velocityClient.getPerpMarketAccount(
1524
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1470
1525
  userPosition.marketIndex
1471
1526
  );
1472
1527
 
@@ -1505,7 +1560,7 @@ export class User {
1505
1560
  amountToClose?: BN,
1506
1561
  useAMMClose = false
1507
1562
  ): [BN, BN] {
1508
- const market = this.velocityClient.getPerpMarketAccount(
1563
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1509
1564
  position.marketIndex
1510
1565
  );
1511
1566
 
@@ -1594,7 +1649,7 @@ export class User {
1594
1649
 
1595
1650
  getLeverageComponents(
1596
1651
  includeOpenOrders = true,
1597
- marginCategory: MarginCategory = undefined,
1652
+ marginCategory: MarginCategory | undefined = undefined,
1598
1653
  perpMarketIndex?: number
1599
1654
  ): {
1600
1655
  perpLiabilityValue: BN;
@@ -1610,14 +1665,14 @@ export class User {
1610
1665
  undefined,
1611
1666
  includeOpenOrders
1612
1667
  );
1613
- const perpMarket = this.velocityClient.getPerpMarketAccount(
1668
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
1614
1669
  perpPosition.marketIndex
1615
1670
  );
1616
1671
 
1617
1672
  const oraclePriceData = this.getOracleDataForPerpMarket(
1618
1673
  perpPosition.marketIndex
1619
1674
  );
1620
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
1675
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
1621
1676
  perpMarket.quoteSpotMarketIndex
1622
1677
  );
1623
1678
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -1690,6 +1745,12 @@ export class User {
1690
1745
 
1691
1746
  const spotPosition = this.getSpotPosition(spotMarketAccount.marketIndex);
1692
1747
 
1748
+ if (!spotPosition) {
1749
+ throw new Error(
1750
+ `No spot position found for market ${spotMarketAccount.marketIndex}`
1751
+ );
1752
+ }
1753
+
1693
1754
  if (isSpotPositionAvailable(spotPosition)) {
1694
1755
  return false;
1695
1756
  }
@@ -1776,8 +1837,8 @@ export class User {
1776
1837
  */
1777
1838
  getTotalAllTimePnl(): BN {
1778
1839
  const netUsdValue = this.getNetUsdValue();
1779
- const totalDeposits = this.getUserAccount().totalDeposits;
1780
- const totalWithdraws = this.getUserAccount().totalWithdraws;
1840
+ const totalDeposits = this.getUserAccountOrThrow().totalDeposits;
1841
+ const totalWithdraws = this.getUserAccountOrThrow().totalWithdraws;
1781
1842
 
1782
1843
  const totalPnl = netUsdValue.add(totalWithdraws).sub(totalDeposits);
1783
1844
 
@@ -2016,7 +2077,7 @@ export class User {
2016
2077
 
2017
2078
  public isCrossMarginBeingLiquidated(): boolean {
2018
2079
  return (
2019
- (this.getUserAccount().status &
2080
+ (this.getUserAccountOrThrow().status &
2020
2081
  (UserStatus.BEING_LIQUIDATED | UserStatus.BANKRUPT)) >
2021
2082
  0
2022
2083
  );
@@ -2043,7 +2104,7 @@ export class User {
2043
2104
  );
2044
2105
 
2045
2106
  return (
2046
- (position?.positionFlag &
2107
+ ((position?.positionFlag ?? 0) &
2047
2108
  (PositionFlag.BeingLiquidated | PositionFlag.Bankruptcy)) >
2048
2109
  0
2049
2110
  );
@@ -2072,11 +2133,11 @@ export class User {
2072
2133
  }
2073
2134
 
2074
2135
  public hasStatus(status: UserStatus): boolean {
2075
- return (this.getUserAccount().status & status) > 0;
2136
+ return (this.getUserAccountOrThrow().status & status) > 0;
2076
2137
  }
2077
2138
 
2078
2139
  public isBankrupt(): boolean {
2079
- return (this.getUserAccount().status & UserStatus.BANKRUPT) > 0;
2140
+ return (this.getUserAccountOrThrow().status & UserStatus.BANKRUPT) > 0;
2080
2141
  }
2081
2142
 
2082
2143
  /**
@@ -2084,19 +2145,19 @@ export class User {
2084
2145
  * @returns
2085
2146
  */
2086
2147
  public needsToSettleFundingPayment(): boolean {
2087
- for (const userPosition of this.getUserAccount().perpPositions) {
2148
+ for (const userPosition of this.getUserAccountOrThrow().perpPositions) {
2088
2149
  if (userPosition.baseAssetAmount.eq(ZERO)) {
2089
2150
  continue;
2090
2151
  }
2091
2152
 
2092
- const market = this.velocityClient.getPerpMarketAccount(
2153
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
2093
2154
  userPosition.marketIndex
2094
2155
  );
2095
2156
  if (
2096
- market.amm.cumulativeFundingRateLong.eq(
2157
+ market.cumulativeFundingRateLong.eq(
2097
2158
  userPosition.lastCumulativeFundingRate
2098
2159
  ) ||
2099
- market.amm.cumulativeFundingRateShort.eq(
2160
+ market.cumulativeFundingRateShort.eq(
2100
2161
  userPosition.lastCumulativeFundingRate
2101
2162
  )
2102
2163
  ) {
@@ -2130,7 +2191,7 @@ export class User {
2130
2191
  totalCollateral.sub(maintenanceMarginRequirement)
2131
2192
  );
2132
2193
 
2133
- const market = this.velocityClient.getSpotMarketAccount(marketIndex);
2194
+ const market = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
2134
2195
  let signedTokenAmount = getSignedTokenAmount(
2135
2196
  getTokenAmount(
2136
2197
  currentSpotPosition.scaledBalance,
@@ -2153,7 +2214,7 @@ export class User {
2153
2214
  const oracle = market.oracle;
2154
2215
  const perpMarketWithSameOracle = this.velocityClient
2155
2216
  .getPerpMarketAccounts()
2156
- .find((market) => market.amm.oracle.equals(oracle));
2217
+ .find((market) => market.oracle.equals(oracle));
2157
2218
  const oraclePrice =
2158
2219
  this.velocityClient.getOracleDataForSpotMarket(marketIndex).price;
2159
2220
  if (perpMarketWithSameOracle) {
@@ -2172,7 +2233,7 @@ export class User {
2172
2233
  if (freeCollateralDeltaForPerp) {
2173
2234
  const { numerator, denominator } = getMultipleBetweenOracleSources(
2174
2235
  market.oracleSource,
2175
- perpMarketWithSameOracle.amm.oracleSource
2236
+ perpMarketWithSameOracle.oracleSource
2176
2237
  );
2177
2238
  freeCollateralDeltaForPerp = freeCollateralDeltaForPerp
2178
2239
  .mul(numerator)
@@ -2221,10 +2282,9 @@ export class User {
2221
2282
  offsetCollateral = ZERO,
2222
2283
  marginType?: MarginType
2223
2284
  ): BN {
2224
- const market = this.velocityClient.getPerpMarketAccount(marketIndex);
2285
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
2225
2286
 
2226
- const oracle =
2227
- this.velocityClient.getPerpMarketAccount(marketIndex).amm.oracle;
2287
+ const oracle = market.oracle;
2228
2288
 
2229
2289
  const oraclePrice =
2230
2290
  this.velocityClient.getOracleDataForPerpMarket(marketIndex).price;
@@ -2292,7 +2352,7 @@ export class User {
2292
2352
 
2293
2353
  positionBaseSizeChange = standardizeBaseAssetAmount(
2294
2354
  positionBaseSizeChange,
2295
- market.amm.orderStepSize
2355
+ market.orderStepSize
2296
2356
  );
2297
2357
 
2298
2358
  const freeCollateralChangeFromNewPosition =
@@ -2345,7 +2405,7 @@ export class User {
2345
2405
 
2346
2406
  if (spotFreeCollateralDelta) {
2347
2407
  const { numerator, denominator } = getMultipleBetweenOracleSources(
2348
- market.amm.oracleSource,
2408
+ market.oracleSource,
2349
2409
  spotMarketWithSameOracle.oracleSource
2350
2410
  );
2351
2411
  spotFreeCollateralDelta = spotFreeCollateralDelta
@@ -2436,7 +2496,7 @@ export class User {
2436
2496
 
2437
2497
  const userCustomMargin = Math.max(
2438
2498
  perpPosition.maxMarginRatio,
2439
- this.getUserAccount().maxMarginRatio
2499
+ this.getUserAccountOrThrow().maxMarginRatio
2440
2500
  );
2441
2501
  const marginRatio = calculateMarketMarginRatio(
2442
2502
  market,
@@ -2485,7 +2545,7 @@ export class User {
2485
2545
 
2486
2546
  const userCustomMargin = Math.max(
2487
2547
  perpPosition.maxMarginRatio,
2488
- this.getUserAccount().maxMarginRatio
2548
+ this.getUserAccountOrThrow().maxMarginRatio
2489
2549
  );
2490
2550
 
2491
2551
  const marginRatio = calculateMarketMarginRatio(
@@ -2598,10 +2658,7 @@ export class User {
2598
2658
  estEntryPrice?: BN,
2599
2659
  perpMarketMaxMarginRatio?: number
2600
2660
  ): BN {
2601
- const maxMarginRatio = Math.max(
2602
- perpMarketMaxMarginRatio,
2603
- this.getUserAccount().maxMarginRatio
2604
- );
2661
+ const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
2605
2662
  return calculateMarginUSDCRequiredForTrade(
2606
2663
  this.velocityClient,
2607
2664
  targetMarketIndex,
@@ -2617,10 +2674,7 @@ export class User {
2617
2674
  collateralIndex: number,
2618
2675
  perpMarketMaxMarginRatio?: number
2619
2676
  ): BN {
2620
- const maxMarginRatio = Math.max(
2621
- perpMarketMaxMarginRatio,
2622
- this.getUserAccount().maxMarginRatio
2623
- );
2677
+ const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
2624
2678
  return calculateCollateralDepositRequiredForTrade(
2625
2679
  this.velocityClient,
2626
2680
  targetMarketIndex,
@@ -2641,7 +2695,7 @@ export class User {
2641
2695
  public getMaxTradeSizeUSDCForPerp(
2642
2696
  targetMarketIndex: number,
2643
2697
  tradeSide: PositionDirection,
2644
- maxMarginRatio = undefined,
2698
+ maxMarginRatio: number | undefined = undefined,
2645
2699
  positionType: 'isolated' | 'cross' = 'cross'
2646
2700
  ): { tradeSize: BN; oppositeSideTradeSize: BN } {
2647
2701
  let tradeSize = ZERO;
@@ -2661,7 +2715,7 @@ export class User {
2661
2715
  const oracleData = this.getMMOracleDataForPerpMarket(targetMarketIndex);
2662
2716
 
2663
2717
  const marketAccount =
2664
- this.velocityClient.getPerpMarketAccount(targetMarketIndex);
2718
+ this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
2665
2719
 
2666
2720
  // add any position we have on the opposite side of the current trade, because we can "flip" the size of this position without taking any extra leverage.
2667
2721
  const oppositeSizeLiabilityValue = targetingSameSide
@@ -2700,7 +2754,7 @@ export class User {
2700
2754
  const marginRequirement = this.getInitialMarginRequirement();
2701
2755
  const marginRatio = Math.max(
2702
2756
  currentPosition.maxMarginRatio,
2703
- this.getUserAccount().maxMarginRatio
2757
+ this.getUserAccountOrThrow().maxMarginRatio
2704
2758
  );
2705
2759
  const marginFreedByClosing = perpLiabilityValue
2706
2760
  .mul(new BN(marginRatio))
@@ -2788,7 +2842,8 @@ export class User {
2788
2842
  currentQuoteAssetValue?: BN,
2789
2843
  currentSpotMarketNetValue?: BN
2790
2844
  ): BN {
2791
- const market = this.velocityClient.getSpotMarketAccount(targetMarketIndex);
2845
+ const market =
2846
+ this.velocityClient.getSpotMarketAccountOrThrow(targetMarketIndex);
2792
2847
  const oraclePrice =
2793
2848
  this.velocityClient.getOracleDataForSpotMarket(targetMarketIndex).price;
2794
2849
 
@@ -2808,11 +2863,11 @@ export class User {
2808
2863
  isVariant(direction, 'long')
2809
2864
  ? SpotBalanceType.DEPOSIT
2810
2865
  : SpotBalanceType.BORROW,
2811
- this.getUserAccount().maxMarginRatio
2866
+ this.getUserAccountOrThrow().maxMarginRatio
2812
2867
  );
2813
2868
 
2814
2869
  let tradeAmount = ZERO;
2815
- if (this.getUserAccount().isMarginTradingEnabled) {
2870
+ if (this.getUserAccountOrThrow().isMarginTradingEnabled) {
2816
2871
  // if the user is buying/selling and already short/long, need to account for closing out short/long
2817
2872
  if (isVariant(direction, 'long') && currentSpotMarketNetValue.lt(ZERO)) {
2818
2873
  tradeAmount = currentSpotMarketNetValue.abs();
@@ -2822,7 +2877,7 @@ export class User {
2822
2877
  'Initial',
2823
2878
  this.getTokenAmount(targetMarketIndex).abs(),
2824
2879
  SpotBalanceType.BORROW,
2825
- this.getUserAccount().maxMarginRatio
2880
+ this.getUserAccountOrThrow().maxMarginRatio
2826
2881
  );
2827
2882
  freeCollateral = freeCollateral.add(
2828
2883
  tradeAmount.mul(new BN(marginRatio)).div(MARGIN_PRECISION)
@@ -2838,7 +2893,7 @@ export class User {
2838
2893
  'Initial',
2839
2894
  this.getTokenAmount(targetMarketIndex),
2840
2895
  SpotBalanceType.DEPOSIT,
2841
- this.getUserAccount().maxMarginRatio
2896
+ this.getUserAccountOrThrow().maxMarginRatio
2842
2897
  );
2843
2898
  freeCollateral = freeCollateral.add(
2844
2899
  tradeAmount.mul(new BN(marginRatio)).div(MARGIN_PRECISION)
@@ -2880,8 +2935,10 @@ export class User {
2880
2935
  calculateSwap?: (inAmount: BN) => BN;
2881
2936
  iterationLimit?: number;
2882
2937
  }): { inAmount: BN; outAmount: BN; leverage: BN } {
2883
- const inMarket = this.velocityClient.getSpotMarketAccount(inMarketIndex);
2884
- const outMarket = this.velocityClient.getSpotMarketAccount(outMarketIndex);
2938
+ const inMarket =
2939
+ this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
2940
+ const outMarket =
2941
+ this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
2885
2942
 
2886
2943
  const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
2887
2944
  const inOraclePrice = inOraclePriceData.price;
@@ -3138,14 +3195,14 @@ export class User {
3138
3195
  const marginCategory = 'Initial';
3139
3196
 
3140
3197
  const spotMarketAccount: SpotMarketAccount =
3141
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
3198
+ this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
3142
3199
 
3143
3200
  const { freeCollateralContribution } = getWorstCaseTokenAmounts(
3144
3201
  spotPosition,
3145
3202
  spotMarketAccount,
3146
3203
  strictOraclePrice,
3147
3204
  marginCategory,
3148
- this.getUserAccount().maxMarginRatio
3205
+ this.getUserAccountOrThrow().maxMarginRatio
3149
3206
  );
3150
3207
 
3151
3208
  return freeCollateralContribution;
@@ -3162,14 +3219,14 @@ export class User {
3162
3219
  let totalLiabilityValue = ZERO;
3163
3220
 
3164
3221
  const spotMarketAccount: SpotMarketAccount =
3165
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
3222
+ this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
3166
3223
 
3167
3224
  const { tokenValue, ordersValue } = getWorstCaseTokenAmounts(
3168
3225
  spotPosition,
3169
3226
  spotMarketAccount,
3170
3227
  strictOraclePrice,
3171
3228
  'Initial',
3172
- this.getUserAccount().maxMarginRatio
3229
+ this.getUserAccountOrThrow().maxMarginRatio
3173
3230
  );
3174
3231
 
3175
3232
  if (tokenValue.gte(ZERO)) {
@@ -3208,8 +3265,10 @@ export class User {
3208
3265
  inAmount: BN;
3209
3266
  outAmount: BN;
3210
3267
  }): BN {
3211
- const inMarket = this.velocityClient.getSpotMarketAccount(inMarketIndex);
3212
- const outMarket = this.velocityClient.getSpotMarketAccount(outMarketIndex);
3268
+ const inMarket =
3269
+ this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
3270
+ const outMarket =
3271
+ this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
3213
3272
 
3214
3273
  const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
3215
3274
  const inOraclePrice = inOraclePriceData.price;
@@ -3412,7 +3471,7 @@ export class User {
3412
3471
  const currentPosition = this.getPerpPositionOrEmpty(targetMarketIndex);
3413
3472
 
3414
3473
  const perpMarket =
3415
- this.velocityClient.getPerpMarketAccount(targetMarketIndex);
3474
+ this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
3416
3475
  const oracleData = this.getOracleDataForPerpMarket(targetMarketIndex);
3417
3476
 
3418
3477
  let {
@@ -3482,17 +3541,15 @@ export class User {
3482
3541
  public getUserFeeTier(marketType: MarketType, now?: BN) {
3483
3542
  const state = this.velocityClient.getStateAccount();
3484
3543
 
3485
- const feeTierIndex = 0;
3486
3544
  if (isVariant(marketType, 'perp')) {
3487
3545
  const userStatsAccount: UserStatsAccount = this.velocityClient
3488
- .getUserStats()
3489
- .getAccount();
3546
+ .getUserStatsOrThrow()
3547
+ .getAccountOrThrow();
3490
3548
 
3491
3549
  const total30dVolume = getUser30dRollingVolumeEstimate(
3492
3550
  userStatsAccount,
3493
3551
  now
3494
3552
  );
3495
- const stakedGovAssetAmount = userStatsAccount.ifStakedGovTokenAmount;
3496
3553
 
3497
3554
  const volumeThresholds = [
3498
3555
  new BN(2_000_000).mul(QUOTE_PRECISION),
@@ -3501,14 +3558,6 @@ export class User {
3501
3558
  new BN(80_000_000).mul(QUOTE_PRECISION),
3502
3559
  new BN(200_000_000).mul(QUOTE_PRECISION),
3503
3560
  ];
3504
- const stakeThresholds = [
3505
- new BN(1_000 - 1).mul(QUOTE_PRECISION),
3506
- new BN(10_000 - 1).mul(QUOTE_PRECISION),
3507
- new BN(50_000 - 1).mul(QUOTE_PRECISION),
3508
- new BN(100_000 - 1).mul(QUOTE_PRECISION),
3509
- new BN(250_000 - 5).mul(QUOTE_PRECISION),
3510
- ];
3511
- const stakeBenefitFrac = [0, 5, 10, 20, 30, 40];
3512
3561
 
3513
3562
  let feeTierIndex = 5;
3514
3563
  for (let i = 0; i < volumeThresholds.length; i++) {
@@ -3518,29 +3567,10 @@ export class User {
3518
3567
  }
3519
3568
  }
3520
3569
 
3521
- let stakeBenefitIndex = 5;
3522
- for (let i = 0; i < stakeThresholds.length; i++) {
3523
- if (stakedGovAssetAmount.lt(stakeThresholds[i])) {
3524
- stakeBenefitIndex = i;
3525
- break;
3526
- }
3527
- }
3528
-
3529
- const stakeBenefit = stakeBenefitFrac[stakeBenefitIndex];
3530
-
3531
- const tier = { ...state.perpFeeStructure.feeTiers[feeTierIndex] };
3532
-
3533
- if (stakeBenefit > 0) {
3534
- tier.feeNumerator = (tier.feeNumerator * (100 - stakeBenefit)) / 100;
3535
-
3536
- tier.makerRebateNumerator =
3537
- (tier.makerRebateNumerator * (100 + stakeBenefit)) / 100;
3538
- }
3539
-
3540
- return tier;
3570
+ return state.perpFeeStructure.feeTiers[feeTierIndex];
3541
3571
  }
3542
3572
 
3543
- return state.spotFeeStructure.feeTiers[feeTierIndex];
3573
+ return state.spotFeeStructure.feeTiers[0];
3544
3574
  }
3545
3575
 
3546
3576
  /**
@@ -3575,7 +3605,8 @@ export class User {
3575
3605
  */
3576
3606
  public getWithdrawalLimit(marketIndex: number, reduceOnly?: boolean): BN {
3577
3607
  const nowTs = new BN(Math.floor(Date.now() / 1000));
3578
- const spotMarket = this.velocityClient.getSpotMarketAccount(marketIndex);
3608
+ const spotMarket =
3609
+ this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
3579
3610
 
3580
3611
  // eslint-disable-next-line prefer-const
3581
3612
  let { borrowLimit, withdrawLimit } = calculateWithdrawLimit(
@@ -3667,12 +3698,13 @@ export class User {
3667
3698
  depositAmount: BN;
3668
3699
  maxDepositAmount: BN;
3669
3700
  } {
3670
- const spotMarket = this.velocityClient.getSpotMarketAccount(marketIndex);
3701
+ const spotMarket =
3702
+ this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
3671
3703
  const maxDepositAmount = spotMarket.withdrawGuardThreshold.div(new BN(10));
3672
3704
  const position = this.getSpotPosition(marketIndex);
3673
3705
 
3674
- const netDeposits = this.getUserAccount().totalDeposits.sub(
3675
- this.getUserAccount().totalWithdraws
3706
+ const netDeposits = this.getUserAccountOrThrow().totalDeposits.sub(
3707
+ this.getUserAccountOrThrow().totalWithdraws
3676
3708
  );
3677
3709
 
3678
3710
  if (!position) {
@@ -3717,7 +3749,7 @@ export class User {
3717
3749
  }
3718
3750
 
3719
3751
  public canMakeIdle(slot: BN): boolean {
3720
- const userAccount = this.getUserAccount();
3752
+ const userAccount = this.getUserAccountOrThrow();
3721
3753
  if (userAccount.idle) {
3722
3754
  return false;
3723
3755
  }
@@ -3775,14 +3807,16 @@ export class User {
3775
3807
  userStatsAccount?: UserStatsAccount,
3776
3808
  now?: BN
3777
3809
  ): { canDelete: boolean; reason?: string } {
3778
- const userAccount = this.getUserAccount();
3810
+ const userAccount = this.getUserAccountOrThrow();
3779
3811
  const userStatsAccountToUse =
3780
- userStatsAccount || this.velocityClient.getUserStats().getAccount();
3812
+ userStatsAccount ??
3813
+ this.velocityClient.getUserStatsOrThrow().getAccount();
3781
3814
  const nowInSeconds = now || new BN(Math.floor(Date.now() / 1000));
3782
3815
  const stateAccount = this.velocityClient.getStateAccount();
3783
3816
 
3784
3817
  // Referrer cannot delete sub_account_id 0
3785
3818
  const isReferrer =
3819
+ userStatsAccountToUse !== undefined &&
3786
3820
  (userStatsAccountToUse.referrerStatus & ReferrerStatus.IsReferrer) > 0;
3787
3821
  if (isReferrer && userAccount.subAccountId === 0) {
3788
3822
  return { canDelete: false, reason: 'is-subaccount-0-referrer' };
@@ -3818,7 +3852,7 @@ export class User {
3818
3852
  }
3819
3853
 
3820
3854
  // Fresh account (< 13 days) with init fee must be idle
3821
- if (stateAccount.maxInitializeUserFee > 0) {
3855
+ if (stateAccount.maxInitializeUserFee > 0 && userStatsAccountToUse) {
3822
3856
  const minActionTs = BN.min(
3823
3857
  userStatsAccountToUse.lastFillerVolume30DTs,
3824
3858
  BN.min(
@@ -3848,7 +3882,9 @@ export class User {
3848
3882
  safestPerpTier = Math.min(
3849
3883
  safestPerpTier,
3850
3884
  getPerpMarketTierNumber(
3851
- this.velocityClient.getPerpMarketAccount(perpPosition.marketIndex)
3885
+ this.velocityClient.getPerpMarketAccountOrThrow(
3886
+ perpPosition.marketIndex
3887
+ )
3852
3888
  )
3853
3889
  );
3854
3890
  }
@@ -3861,7 +3897,9 @@ export class User {
3861
3897
  safestSpotTier = Math.min(
3862
3898
  safestSpotTier,
3863
3899
  getSpotMarketTierNumber(
3864
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex)
3900
+ this.velocityClient.getSpotMarketAccountOrThrow(
3901
+ spotPosition.marketIndex
3902
+ )
3865
3903
  )
3866
3904
  );
3867
3905
  }
@@ -3885,7 +3923,7 @@ export class User {
3885
3923
  quoteOraclePriceData?: OraclePriceData;
3886
3924
  includeOpenOrders?: boolean;
3887
3925
  }): HealthComponent {
3888
- const perpMarket = this.velocityClient.getPerpMarketAccount(
3926
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
3889
3927
  perpPosition.marketIndex
3890
3928
  );
3891
3929
  const _oraclePriceData =
@@ -3913,7 +3951,7 @@ export class User {
3913
3951
 
3914
3952
  const userCustomMargin = Math.max(
3915
3953
  perpPosition.maxMarginRatio,
3916
- this.getUserAccount().maxMarginRatio
3954
+ this.getUserAccountOrThrow().maxMarginRatio
3917
3955
  );
3918
3956
  const marginRatio = new BN(
3919
3957
  calculateMarketMarginRatio(
@@ -3960,7 +3998,7 @@ export class User {
3960
3998
  };
3961
3999
 
3962
4000
  for (const perpPosition of this.getActivePerpPositions()) {
3963
- const perpMarket = this.velocityClient.getPerpMarketAccount(
4001
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
3964
4002
  perpPosition.marketIndex
3965
4003
  );
3966
4004
 
@@ -3980,7 +4018,7 @@ export class User {
3980
4018
  })
3981
4019
  );
3982
4020
 
3983
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
4021
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
3984
4022
  perpMarket.quoteSpotMarketIndex
3985
4023
  );
3986
4024
 
@@ -4024,7 +4062,9 @@ export class User {
4024
4062
  let netQuoteValue = ZERO;
4025
4063
  for (const spotPosition of this.getActiveSpotPositions()) {
4026
4064
  const spotMarketAccount: SpotMarketAccount =
4027
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
4065
+ this.velocityClient.getSpotMarketAccountOrThrow(
4066
+ spotPosition.marketIndex
4067
+ );
4028
4068
 
4029
4069
  const oraclePriceData = this.getOracleDataForSpotMarket(
4030
4070
  spotPosition.marketIndex
@@ -4057,7 +4097,7 @@ export class User {
4057
4097
  spotMarketAccount,
4058
4098
  strictOraclePrice,
4059
4099
  marginCategory,
4060
- this.getUserAccount().maxMarginRatio
4100
+ this.getUserAccountOrThrow().maxMarginRatio
4061
4101
  );
4062
4102
 
4063
4103
  netQuoteValue = netQuoteValue.add(ordersValue);
@@ -4102,7 +4142,7 @@ export class User {
4102
4142
  oraclePriceData.price,
4103
4143
  spotMarketAccount,
4104
4144
  marginCategory,
4105
- this.getUserAccount().maxMarginRatio
4145
+ this.getUserAccountOrThrow().maxMarginRatio
4106
4146
  );
4107
4147
 
4108
4148
  if (netQuoteValue.lt(ZERO)) {
@@ -4210,7 +4250,9 @@ export class User {
4210
4250
 
4211
4251
  // Equivalent to on-chain user_custom_margin_ratio
4212
4252
  const userCustomMarginRatio =
4213
- marginCategory === 'Initial' ? this.getUserAccount().maxMarginRatio : 0;
4253
+ marginCategory === 'Initial'
4254
+ ? this.getUserAccountOrThrow().maxMarginRatio
4255
+ : 0;
4214
4256
 
4215
4257
  // Initialize calc via JS mirror of Rust/on-chain MarginCalculation
4216
4258
  const isolatedMarginBuffers = new Map<number, BN>();
@@ -4229,12 +4271,12 @@ export class User {
4229
4271
  const calc = new MarginCalculation(ctx);
4230
4272
 
4231
4273
  // SPOT POSITIONS
4232
- for (const spotPosition of this.getUserAccount().spotPositions) {
4274
+ for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
4233
4275
  if (isSpotPositionAvailable(spotPosition)) continue;
4234
4276
 
4235
4277
  const isQuote = spotPosition.marketIndex === QUOTE_SPOT_MARKET_INDEX;
4236
4278
 
4237
- const spotMarket = this.velocityClient.getSpotMarketAccount(
4279
+ const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
4238
4280
  spotPosition.marketIndex
4239
4281
  );
4240
4282
  const oraclePriceData = this.getOracleDataForSpotMarket(
@@ -4340,10 +4382,10 @@ export class User {
4340
4382
 
4341
4383
  // PERP POSITIONS
4342
4384
  for (const marketPosition of this.getActivePerpPositions()) {
4343
- const market = this.velocityClient.getPerpMarketAccount(
4385
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
4344
4386
  marketPosition.marketIndex
4345
4387
  );
4346
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
4388
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
4347
4389
  market.quoteSpotMarketIndex
4348
4390
  );
4349
4391
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -4449,9 +4491,10 @@ export class User {
4449
4491
  // derive isolated quote deposit value, mirroring on-chain logic
4450
4492
  let depositValue = ZERO;
4451
4493
  if (marketPosition.isolatedPositionScaledBalance?.gt(ZERO)) {
4452
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
4453
- market.quoteSpotMarketIndex
4454
- );
4494
+ const quoteSpotMarket =
4495
+ this.velocityClient.getSpotMarketAccountOrThrow(
4496
+ market.quoteSpotMarketIndex
4497
+ );
4455
4498
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
4456
4499
  market.quoteSpotMarketIndex
4457
4500
  );