@velocity-exchange/sdk 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/CHANGELOG.md +4 -32
  2. package/lib/browser/accounts/basicUserAccountSubscriber.d.ts +5 -3
  3. package/lib/browser/accounts/basicUserAccountSubscriber.js +4 -3
  4. package/lib/browser/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
  5. package/lib/browser/accounts/basicUserStatsAccountSubscriber.js +4 -3
  6. package/lib/browser/accounts/bulkAccountLoader.d.ts +5 -5
  7. package/lib/browser/accounts/bulkAccountLoader.js +12 -1
  8. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +2 -1
  9. package/lib/browser/accounts/grpcAccountSubscriber.js +8 -2
  10. package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
  11. package/lib/browser/accounts/grpcMultiAccountSubscriber.js +13 -5
  12. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
  13. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.js +12 -8
  14. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
  15. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +8 -2
  16. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +18 -3
  17. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -1
  18. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +40 -17
  19. package/lib/browser/accounts/laserProgramAccountSubscriber.js +3 -0
  20. package/lib/browser/accounts/oneShotUserAccountSubscriber.js +4 -3
  21. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
  22. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  23. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
  24. package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
  25. package/lib/browser/accounts/pollingOracleAccountSubscriber.js +16 -5
  26. package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
  27. package/lib/browser/accounts/pollingTokenAccountSubscriber.js +16 -5
  28. package/lib/browser/accounts/pollingUserAccountSubscriber.d.ts +8 -4
  29. package/lib/browser/accounts/pollingUserAccountSubscriber.js +17 -11
  30. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
  31. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +6 -6
  32. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -1
  33. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +64 -28
  34. package/lib/browser/accounts/types.d.ts +4 -4
  35. package/lib/browser/accounts/utils.d.ts +1 -0
  36. package/lib/browser/accounts/utils.js +8 -1
  37. package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +4 -2
  38. package/lib/browser/accounts/webSocketAccountSubscriber.js +17 -5
  39. package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
  40. package/lib/browser/accounts/webSocketAccountSubscriberV2.js +17 -6
  41. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  42. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
  43. package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
  44. package/lib/browser/accounts/webSocketProgramAccountSubscriber.js +14 -3
  45. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
  46. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
  47. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
  48. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
  49. package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
  50. package/lib/browser/accounts/webSocketUserAccountSubscriber.js +9 -0
  51. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
  52. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
  53. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -4
  54. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +48 -20
  55. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -3
  56. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +45 -14
  57. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
  58. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.js +0 -3
  59. package/lib/browser/addresses/marketAddresses.js +3 -2
  60. package/lib/browser/addresses/pda.d.ts +0 -2
  61. package/lib/browser/addresses/pda.js +1 -14
  62. package/lib/browser/adminClient.d.ts +24 -29
  63. package/lib/browser/adminClient.js +156 -157
  64. package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +1 -1
  65. package/lib/browser/auctionSubscriber/auctionSubscriber.js +6 -4
  66. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -1
  67. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +9 -4
  68. package/lib/browser/bankrun/bankrunConnection.d.ts +8 -5
  69. package/lib/browser/bankrun/bankrunConnection.js +92 -32
  70. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
  71. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +3 -2
  72. package/lib/browser/clock/clockSubscriber.d.ts +6 -6
  73. package/lib/browser/clock/clockSubscriber.js +4 -3
  74. package/lib/browser/config.d.ts +1 -1
  75. package/lib/browser/config.js +8 -4
  76. package/lib/browser/constants/index.d.ts +1 -2
  77. package/lib/browser/constants/index.js +1 -2
  78. package/lib/browser/constants/numericConstants.d.ts +1 -2
  79. package/lib/browser/constants/numericConstants.js +7 -5
  80. package/lib/browser/constants/spotMarkets.d.ts +0 -1
  81. package/lib/browser/constituentMap/constituentMap.js +5 -1
  82. package/lib/browser/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
  83. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
  84. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
  85. package/lib/browser/core/VelocityCore.d.ts +0 -1
  86. package/lib/browser/core/instructions/deposit.d.ts +0 -1
  87. package/lib/browser/core/instructions/perpOrders.d.ts +14 -0
  88. package/lib/browser/core/instructions/perpOrders.js +14 -0
  89. package/lib/browser/core/instructions/withdraw.d.ts +0 -1
  90. package/lib/browser/core/remainingAccounts.d.ts +2 -2
  91. package/lib/browser/core/remainingAccounts.js +2 -2
  92. package/lib/browser/decode/user.js +9 -1
  93. package/lib/browser/dlob/DLOB.d.ts +6 -2
  94. package/lib/browser/dlob/DLOB.js +201 -138
  95. package/lib/browser/dlob/DLOBNode.d.ts +5 -3
  96. package/lib/browser/dlob/DLOBNode.js +7 -0
  97. package/lib/browser/dlob/DLOBSubscriber.d.ts +0 -1
  98. package/lib/browser/dlob/DLOBSubscriber.js +37 -32
  99. package/lib/browser/dlob/NodeList.d.ts +0 -1
  100. package/lib/browser/dlob/NodeList.js +8 -7
  101. package/lib/browser/dlob/orderBookLevels.d.ts +0 -1
  102. package/lib/browser/dlob/orderBookLevels.js +19 -12
  103. package/lib/browser/events/eventList.d.ts +3 -3
  104. package/lib/browser/events/eventList.js +4 -1
  105. package/lib/browser/events/eventSubscriber.d.ts +5 -2
  106. package/lib/browser/events/eventSubscriber.js +75 -26
  107. package/lib/browser/events/eventsServerLogProvider.d.ts +2 -2
  108. package/lib/browser/events/eventsServerLogProvider.js +15 -8
  109. package/lib/browser/events/fetchLogs.d.ts +1 -1
  110. package/lib/browser/events/fetchLogs.js +4 -2
  111. package/lib/browser/events/pollingLogProvider.d.ts +2 -2
  112. package/lib/browser/events/pollingLogProvider.js +1 -0
  113. package/lib/browser/events/txEventCache.d.ts +3 -3
  114. package/lib/browser/events/txEventCache.js +6 -2
  115. package/lib/browser/events/types.d.ts +2 -4
  116. package/lib/browser/events/types.js +0 -2
  117. package/lib/browser/events/webSocketLogProvider.d.ts +2 -2
  118. package/lib/browser/events/webSocketLogProvider.js +5 -2
  119. package/lib/browser/factory/bigNum.d.ts +0 -1
  120. package/lib/browser/factory/bigNum.js +1 -1
  121. package/lib/browser/idl/velocity.d.ts +1243 -1586
  122. package/lib/browser/idl/velocity.json +1234 -1577
  123. package/lib/browser/index.d.ts +0 -2
  124. package/lib/browser/index.js +0 -2
  125. package/lib/browser/indicative-quotes/indicativeQuotesSender.d.ts +0 -1
  126. package/lib/browser/jupiter/jupiterClient.d.ts +1 -2
  127. package/lib/browser/jupiter/jupiterClient.js +18 -8
  128. package/lib/browser/marginCalculation.d.ts +0 -1
  129. package/lib/browser/marginCalculation.js +1 -0
  130. package/lib/browser/marinade/index.d.ts +2 -3
  131. package/lib/browser/marinade/index.js +5 -0
  132. package/lib/browser/math/amm.d.ts +31 -14
  133. package/lib/browser/math/amm.js +77 -22
  134. package/lib/browser/math/auction.d.ts +0 -1
  135. package/lib/browser/math/bankruptcy.js +1 -1
  136. package/lib/browser/math/conversion.d.ts +0 -1
  137. package/lib/browser/math/funding.d.ts +0 -1
  138. package/lib/browser/math/funding.js +6 -6
  139. package/lib/browser/math/insurance.d.ts +1 -2
  140. package/lib/browser/math/insurance.js +4 -5
  141. package/lib/browser/math/liquidation.d.ts +0 -1
  142. package/lib/browser/math/margin.d.ts +1 -10
  143. package/lib/browser/math/margin.js +3 -62
  144. package/lib/browser/math/market.d.ts +4 -13
  145. package/lib/browser/math/market.js +6 -40
  146. package/lib/browser/math/oracles.d.ts +0 -4
  147. package/lib/browser/math/oracles.js +1 -14
  148. package/lib/browser/math/orders.d.ts +0 -6
  149. package/lib/browser/math/orders.js +2 -74
  150. package/lib/browser/math/position.d.ts +1 -6
  151. package/lib/browser/math/position.js +5 -10
  152. package/lib/browser/math/repeg.d.ts +0 -2
  153. package/lib/browser/math/repeg.js +1 -23
  154. package/lib/browser/math/spotBalance.d.ts +4 -5
  155. package/lib/browser/math/spotBalance.js +6 -6
  156. package/lib/browser/math/spotMarket.d.ts +0 -7
  157. package/lib/browser/math/spotMarket.js +1 -16
  158. package/lib/browser/math/spotPosition.d.ts +4 -5
  159. package/lib/browser/math/state.d.ts +0 -3
  160. package/lib/browser/math/state.js +1 -9
  161. package/lib/browser/math/superStake.d.ts +3 -54
  162. package/lib/browser/math/superStake.js +16 -13
  163. package/lib/browser/math/trade.d.ts +2 -3
  164. package/lib/browser/math/trade.js +6 -6
  165. package/lib/browser/math/utils.d.ts +0 -1
  166. package/lib/browser/memcmp.d.ts +0 -1
  167. package/lib/browser/memcmp.js +1 -10
  168. package/lib/browser/oracles/oracleClientCache.d.ts +1 -1
  169. package/lib/browser/oracles/prelaunchOracleClient.js +3 -2
  170. package/lib/browser/oracles/pythClient.d.ts +0 -1
  171. package/lib/browser/oracles/pythClient.js +9 -3
  172. package/lib/browser/oracles/pythLazerClient.d.ts +0 -1
  173. package/lib/browser/oracles/pythLazerClient.js +3 -2
  174. package/lib/browser/oracles/strictOraclePrice.d.ts +0 -1
  175. package/lib/browser/oracles/types.d.ts +0 -1
  176. package/lib/browser/oracles/utils.d.ts +4 -1
  177. package/lib/browser/oracles/utils.js +9 -1
  178. package/lib/browser/orderParams.d.ts +0 -1
  179. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -1
  180. package/lib/browser/orderSubscriber/OrderSubscriber.js +8 -2
  181. package/lib/browser/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
  182. package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +1 -1
  183. package/lib/browser/priorityFee/priorityFeeSubscriber.js +32 -8
  184. package/lib/browser/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
  185. package/lib/browser/pyth/types.d.ts +0 -1
  186. package/lib/browser/slot/SlotSubscriber.d.ts +1 -1
  187. package/lib/browser/slot/SlotSubscriber.js +2 -1
  188. package/lib/browser/slot/SlothashSubscriber.d.ts +3 -2
  189. package/lib/browser/slot/SlothashSubscriber.js +11 -4
  190. package/lib/browser/swap/UnifiedSwapClient.d.ts +0 -1
  191. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
  192. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
  193. package/lib/browser/swift/signedMsgUserAccountSubscriber.d.ts +3 -2
  194. package/lib/browser/swift/signedMsgUserAccountSubscriber.js +13 -5
  195. package/lib/browser/swift/swiftOrderSubscriber.d.ts +1 -1
  196. package/lib/browser/swift/swiftOrderSubscriber.js +10 -5
  197. package/lib/browser/testClient.js +3 -2
  198. package/lib/browser/titan/titanClient.d.ts +0 -1
  199. package/lib/browser/tokenFaucet.d.ts +0 -1
  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 +9 -3
  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 +25 -69
  217. package/lib/browser/types.js +2 -2
  218. package/lib/browser/user.d.ts +21 -8
  219. package/lib/browser/user.js +156 -132
  220. package/lib/browser/userMap/WebsocketSubscription.d.ts +1 -1
  221. package/lib/browser/userMap/grpcSubscription.d.ts +1 -1
  222. package/lib/browser/userMap/referrerMap.js +10 -3
  223. package/lib/browser/userMap/revenueShareEscrowMap.js +4 -0
  224. package/lib/browser/userMap/userMap.d.ts +1 -1
  225. package/lib/browser/userMap/userMap.js +36 -23
  226. package/lib/browser/userMap/userStatsMap.d.ts +1 -1
  227. package/lib/browser/userMap/userStatsMap.js +18 -13
  228. package/lib/browser/userStats.d.ts +7 -2
  229. package/lib/browser/userStats.js +18 -4
  230. package/lib/browser/util/TransactionConfirmationManager.js +4 -2
  231. package/lib/browser/util/chainClock.d.ts +1 -1
  232. package/lib/browser/util/computeUnits.d.ts +1 -1
  233. package/lib/browser/util/computeUnits.js +6 -1
  234. package/lib/browser/velocityClient.d.ts +93 -36
  235. package/lib/browser/velocityClient.js +414 -280
  236. package/lib/node/accounts/basicUserAccountSubscriber.d.ts +5 -3
  237. package/lib/node/accounts/basicUserAccountSubscriber.d.ts.map +1 -1
  238. package/lib/node/accounts/basicUserAccountSubscriber.js +4 -3
  239. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
  240. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts.map +1 -1
  241. package/lib/node/accounts/basicUserStatsAccountSubscriber.js +4 -3
  242. package/lib/node/accounts/bulkAccountLoader.d.ts +5 -5
  243. package/lib/node/accounts/bulkAccountLoader.d.ts.map +1 -1
  244. package/lib/node/accounts/bulkAccountLoader.js +12 -1
  245. package/lib/node/accounts/grpcAccountSubscriber.d.ts +2 -1
  246. package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
  247. package/lib/node/accounts/grpcAccountSubscriber.js +8 -2
  248. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
  249. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
  250. package/lib/node/accounts/grpcMultiAccountSubscriber.js +13 -5
  251. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
  252. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
  253. package/lib/node/accounts/grpcMultiUserAccountSubscriber.js +12 -8
  254. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
  255. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
  256. package/lib/node/accounts/grpcProgramAccountSubscriber.js +8 -2
  257. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
  258. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +18 -3
  259. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -1
  260. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  261. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +40 -17
  262. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
  263. package/lib/node/accounts/laserProgramAccountSubscriber.js +3 -0
  264. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
  265. package/lib/node/accounts/oneShotUserAccountSubscriber.js +4 -3
  266. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
  267. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
  268. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  269. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  270. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
  271. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
  272. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
  273. package/lib/node/accounts/pollingOracleAccountSubscriber.js +16 -5
  274. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
  275. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
  276. package/lib/node/accounts/pollingTokenAccountSubscriber.js +16 -5
  277. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +8 -4
  278. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts.map +1 -1
  279. package/lib/node/accounts/pollingUserAccountSubscriber.js +17 -11
  280. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
  281. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
  282. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +6 -6
  283. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -1
  284. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
  285. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +64 -28
  286. package/lib/node/accounts/types.d.ts +4 -4
  287. package/lib/node/accounts/types.d.ts.map +1 -1
  288. package/lib/node/accounts/utils.d.ts +1 -0
  289. package/lib/node/accounts/utils.d.ts.map +1 -1
  290. package/lib/node/accounts/utils.js +8 -1
  291. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +4 -2
  292. package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
  293. package/lib/node/accounts/webSocketAccountSubscriber.js +17 -5
  294. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
  295. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
  296. package/lib/node/accounts/webSocketAccountSubscriberV2.js +17 -6
  297. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
  298. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  299. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
  300. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
  301. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
  302. package/lib/node/accounts/webSocketProgramAccountSubscriber.js +14 -3
  303. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
  304. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
  305. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
  306. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
  307. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
  308. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
  309. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
  310. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
  311. package/lib/node/accounts/webSocketUserAccountSubscriber.js +9 -0
  312. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
  313. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
  314. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
  315. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -4
  316. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
  317. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +48 -20
  318. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -3
  319. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  320. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +45 -14
  321. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
  322. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
  323. package/lib/node/accounts/websocketProgramUserAccountSubscriber.js +0 -3
  324. package/lib/node/addresses/marketAddresses.d.ts.map +1 -1
  325. package/lib/node/addresses/marketAddresses.js +3 -2
  326. package/lib/node/addresses/pda.d.ts +0 -2
  327. package/lib/node/addresses/pda.d.ts.map +1 -1
  328. package/lib/node/addresses/pda.js +1 -14
  329. package/lib/node/adminClient.d.ts +24 -29
  330. package/lib/node/adminClient.d.ts.map +1 -1
  331. package/lib/node/adminClient.js +156 -157
  332. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +1 -1
  333. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  334. package/lib/node/auctionSubscriber/auctionSubscriber.js +6 -4
  335. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -1
  336. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  337. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +9 -4
  338. package/lib/node/bankrun/bankrunConnection.d.ts +8 -5
  339. package/lib/node/bankrun/bankrunConnection.d.ts.map +1 -1
  340. package/lib/node/bankrun/bankrunConnection.js +92 -32
  341. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
  342. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
  343. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +3 -2
  344. package/lib/node/clock/clockSubscriber.d.ts +6 -6
  345. package/lib/node/clock/clockSubscriber.d.ts.map +1 -1
  346. package/lib/node/clock/clockSubscriber.js +4 -3
  347. package/lib/node/config.d.ts +1 -1
  348. package/lib/node/config.d.ts.map +1 -1
  349. package/lib/node/config.js +8 -4
  350. package/lib/node/constants/index.d.ts +1 -2
  351. package/lib/node/constants/index.d.ts.map +1 -1
  352. package/lib/node/constants/index.js +1 -2
  353. package/lib/node/constants/numericConstants.d.ts +1 -2
  354. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  355. package/lib/node/constants/numericConstants.js +7 -5
  356. package/lib/node/constants/spotMarkets.d.ts +0 -1
  357. package/lib/node/constants/spotMarkets.d.ts.map +1 -1
  358. package/lib/node/constituentMap/constituentMap.d.ts.map +1 -1
  359. package/lib/node/constituentMap/constituentMap.js +5 -1
  360. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.d.ts.map +1 -1
  361. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
  362. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
  363. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts.map +1 -1
  364. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
  365. package/lib/node/core/VelocityCore.d.ts +0 -1
  366. package/lib/node/core/VelocityCore.d.ts.map +1 -1
  367. package/lib/node/core/instructions/deposit.d.ts +0 -1
  368. package/lib/node/core/instructions/deposit.d.ts.map +1 -1
  369. package/lib/node/core/instructions/perpOrders.d.ts +14 -0
  370. package/lib/node/core/instructions/perpOrders.d.ts.map +1 -1
  371. package/lib/node/core/instructions/perpOrders.js +14 -0
  372. package/lib/node/core/instructions/withdraw.d.ts +0 -1
  373. package/lib/node/core/instructions/withdraw.d.ts.map +1 -1
  374. package/lib/node/core/remainingAccounts.d.ts +2 -2
  375. package/lib/node/core/remainingAccounts.d.ts.map +1 -1
  376. package/lib/node/core/remainingAccounts.js +2 -2
  377. package/lib/node/decode/user.d.ts.map +1 -1
  378. package/lib/node/decode/user.js +9 -1
  379. package/lib/node/dlob/DLOB.d.ts +6 -2
  380. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  381. package/lib/node/dlob/DLOB.js +201 -138
  382. package/lib/node/dlob/DLOBNode.d.ts +5 -3
  383. package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
  384. package/lib/node/dlob/DLOBNode.js +7 -0
  385. package/lib/node/dlob/DLOBSubscriber.d.ts +0 -1
  386. package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
  387. package/lib/node/dlob/DLOBSubscriber.js +37 -32
  388. package/lib/node/dlob/NodeList.d.ts +0 -1
  389. package/lib/node/dlob/NodeList.d.ts.map +1 -1
  390. package/lib/node/dlob/NodeList.js +8 -7
  391. package/lib/node/dlob/orderBookLevels.d.ts +0 -1
  392. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  393. package/lib/node/dlob/orderBookLevels.js +19 -12
  394. package/lib/node/events/eventList.d.ts +3 -3
  395. package/lib/node/events/eventList.d.ts.map +1 -1
  396. package/lib/node/events/eventList.js +4 -1
  397. package/lib/node/events/eventSubscriber.d.ts +5 -2
  398. package/lib/node/events/eventSubscriber.d.ts.map +1 -1
  399. package/lib/node/events/eventSubscriber.js +75 -26
  400. package/lib/node/events/eventsServerLogProvider.d.ts +2 -2
  401. package/lib/node/events/eventsServerLogProvider.d.ts.map +1 -1
  402. package/lib/node/events/eventsServerLogProvider.js +15 -8
  403. package/lib/node/events/fetchLogs.d.ts +1 -1
  404. package/lib/node/events/fetchLogs.d.ts.map +1 -1
  405. package/lib/node/events/fetchLogs.js +4 -2
  406. package/lib/node/events/pollingLogProvider.d.ts +2 -2
  407. package/lib/node/events/pollingLogProvider.d.ts.map +1 -1
  408. package/lib/node/events/pollingLogProvider.js +1 -0
  409. package/lib/node/events/txEventCache.d.ts +3 -3
  410. package/lib/node/events/txEventCache.d.ts.map +1 -1
  411. package/lib/node/events/txEventCache.js +6 -2
  412. package/lib/node/events/types.d.ts +2 -4
  413. package/lib/node/events/types.d.ts.map +1 -1
  414. package/lib/node/events/types.js +0 -2
  415. package/lib/node/events/webSocketLogProvider.d.ts +2 -2
  416. package/lib/node/events/webSocketLogProvider.d.ts.map +1 -1
  417. package/lib/node/events/webSocketLogProvider.js +5 -2
  418. package/lib/node/factory/bigNum.d.ts +0 -1
  419. package/lib/node/factory/bigNum.d.ts.map +1 -1
  420. package/lib/node/factory/bigNum.js +1 -1
  421. package/lib/node/idl/velocity.d.ts +1243 -1586
  422. package/lib/node/idl/velocity.d.ts.map +1 -1
  423. package/lib/node/idl/velocity.json +1234 -1577
  424. package/lib/node/index.d.ts +0 -2
  425. package/lib/node/index.d.ts.map +1 -1
  426. package/lib/node/index.js +0 -2
  427. package/lib/node/indicative-quotes/indicativeQuotesSender.d.ts +0 -1
  428. package/lib/node/indicative-quotes/indicativeQuotesSender.d.ts.map +1 -1
  429. package/lib/node/jupiter/jupiterClient.d.ts +1 -2
  430. package/lib/node/jupiter/jupiterClient.d.ts.map +1 -1
  431. package/lib/node/jupiter/jupiterClient.js +18 -8
  432. package/lib/node/marginCalculation.d.ts +0 -1
  433. package/lib/node/marginCalculation.d.ts.map +1 -1
  434. package/lib/node/marginCalculation.js +1 -0
  435. package/lib/node/marinade/index.d.ts +2 -3
  436. package/lib/node/marinade/index.d.ts.map +1 -1
  437. package/lib/node/marinade/index.js +5 -0
  438. package/lib/node/math/amm.d.ts +31 -14
  439. package/lib/node/math/amm.d.ts.map +1 -1
  440. package/lib/node/math/amm.js +77 -22
  441. package/lib/node/math/auction.d.ts +0 -1
  442. package/lib/node/math/auction.d.ts.map +1 -1
  443. package/lib/node/math/bankruptcy.js +1 -1
  444. package/lib/node/math/conversion.d.ts +0 -1
  445. package/lib/node/math/conversion.d.ts.map +1 -1
  446. package/lib/node/math/funding.d.ts +0 -1
  447. package/lib/node/math/funding.d.ts.map +1 -1
  448. package/lib/node/math/funding.js +6 -6
  449. package/lib/node/math/insurance.d.ts +1 -2
  450. package/lib/node/math/insurance.d.ts.map +1 -1
  451. package/lib/node/math/insurance.js +4 -5
  452. package/lib/node/math/liquidation.d.ts +0 -1
  453. package/lib/node/math/liquidation.d.ts.map +1 -1
  454. package/lib/node/math/margin.d.ts +1 -10
  455. package/lib/node/math/margin.d.ts.map +1 -1
  456. package/lib/node/math/margin.js +3 -62
  457. package/lib/node/math/market.d.ts +4 -13
  458. package/lib/node/math/market.d.ts.map +1 -1
  459. package/lib/node/math/market.js +6 -40
  460. package/lib/node/math/oracles.d.ts +0 -4
  461. package/lib/node/math/oracles.d.ts.map +1 -1
  462. package/lib/node/math/oracles.js +1 -14
  463. package/lib/node/math/orders.d.ts +0 -6
  464. package/lib/node/math/orders.d.ts.map +1 -1
  465. package/lib/node/math/orders.js +2 -74
  466. package/lib/node/math/position.d.ts +1 -6
  467. package/lib/node/math/position.d.ts.map +1 -1
  468. package/lib/node/math/position.js +5 -10
  469. package/lib/node/math/repeg.d.ts +0 -2
  470. package/lib/node/math/repeg.d.ts.map +1 -1
  471. package/lib/node/math/repeg.js +1 -23
  472. package/lib/node/math/spotBalance.d.ts +4 -5
  473. package/lib/node/math/spotBalance.d.ts.map +1 -1
  474. package/lib/node/math/spotBalance.js +6 -6
  475. package/lib/node/math/spotMarket.d.ts +0 -7
  476. package/lib/node/math/spotMarket.d.ts.map +1 -1
  477. package/lib/node/math/spotMarket.js +1 -16
  478. package/lib/node/math/spotPosition.d.ts +4 -5
  479. package/lib/node/math/spotPosition.d.ts.map +1 -1
  480. package/lib/node/math/state.d.ts +0 -3
  481. package/lib/node/math/state.d.ts.map +1 -1
  482. package/lib/node/math/state.js +1 -9
  483. package/lib/node/math/superStake.d.ts +3 -54
  484. package/lib/node/math/superStake.d.ts.map +1 -1
  485. package/lib/node/math/superStake.js +16 -13
  486. package/lib/node/math/trade.d.ts +2 -3
  487. package/lib/node/math/trade.d.ts.map +1 -1
  488. package/lib/node/math/trade.js +6 -6
  489. package/lib/node/math/utils.d.ts +0 -1
  490. package/lib/node/math/utils.d.ts.map +1 -1
  491. package/lib/node/memcmp.d.ts +0 -1
  492. package/lib/node/memcmp.d.ts.map +1 -1
  493. package/lib/node/memcmp.js +1 -10
  494. package/lib/node/oracles/oracleClientCache.d.ts +1 -1
  495. package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
  496. package/lib/node/oracles/prelaunchOracleClient.js +3 -2
  497. package/lib/node/oracles/pythClient.d.ts +0 -1
  498. package/lib/node/oracles/pythClient.d.ts.map +1 -1
  499. package/lib/node/oracles/pythClient.js +9 -3
  500. package/lib/node/oracles/pythLazerClient.d.ts +0 -1
  501. package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
  502. package/lib/node/oracles/pythLazerClient.js +3 -2
  503. package/lib/node/oracles/strictOraclePrice.d.ts +0 -1
  504. package/lib/node/oracles/strictOraclePrice.d.ts.map +1 -1
  505. package/lib/node/oracles/types.d.ts +0 -1
  506. package/lib/node/oracles/types.d.ts.map +1 -1
  507. package/lib/node/oracles/utils.d.ts +4 -1
  508. package/lib/node/oracles/utils.d.ts.map +1 -1
  509. package/lib/node/oracles/utils.js +9 -1
  510. package/lib/node/orderParams.d.ts +0 -1
  511. package/lib/node/orderParams.d.ts.map +1 -1
  512. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -1
  513. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  514. package/lib/node/orderSubscriber/OrderSubscriber.js +8 -2
  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 +1 -1
  518. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
  519. package/lib/node/priorityFee/priorityFeeSubscriber.js +32 -8
  520. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
  521. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts.map +1 -1
  522. package/lib/node/pyth/types.d.ts +0 -1
  523. package/lib/node/pyth/types.d.ts.map +1 -1
  524. package/lib/node/slot/SlotSubscriber.d.ts +1 -1
  525. package/lib/node/slot/SlotSubscriber.d.ts.map +1 -1
  526. package/lib/node/slot/SlotSubscriber.js +2 -1
  527. package/lib/node/slot/SlothashSubscriber.d.ts +3 -2
  528. package/lib/node/slot/SlothashSubscriber.d.ts.map +1 -1
  529. package/lib/node/slot/SlothashSubscriber.js +11 -4
  530. package/lib/node/swap/UnifiedSwapClient.d.ts +0 -1
  531. package/lib/node/swap/UnifiedSwapClient.d.ts.map +1 -1
  532. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
  533. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts.map +1 -1
  534. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
  535. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts +3 -2
  536. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
  537. package/lib/node/swift/signedMsgUserAccountSubscriber.js +13 -5
  538. package/lib/node/swift/swiftOrderSubscriber.d.ts +1 -1
  539. package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
  540. package/lib/node/swift/swiftOrderSubscriber.js +10 -5
  541. package/lib/node/testClient.js +3 -2
  542. package/lib/node/titan/titanClient.d.ts +0 -1
  543. package/lib/node/titan/titanClient.d.ts.map +1 -1
  544. package/lib/node/tokenFaucet.d.ts +0 -1
  545. package/lib/node/tokenFaucet.d.ts.map +1 -1
  546. package/lib/node/tokenFaucet.js +16 -2
  547. package/lib/node/tx/baseTxSender.d.ts +4 -4
  548. package/lib/node/tx/baseTxSender.d.ts.map +1 -1
  549. package/lib/node/tx/baseTxSender.js +5 -4
  550. package/lib/node/tx/fastSingleTxSender.d.ts +3 -3
  551. package/lib/node/tx/fastSingleTxSender.d.ts.map +1 -1
  552. package/lib/node/tx/fastSingleTxSender.js +9 -5
  553. package/lib/node/tx/reportTransactionError.d.ts +2 -2
  554. package/lib/node/tx/reportTransactionError.d.ts.map +1 -1
  555. package/lib/node/tx/reportTransactionError.js +5 -1
  556. package/lib/node/tx/retryTxSender.d.ts +1 -1
  557. package/lib/node/tx/retryTxSender.d.ts.map +1 -1
  558. package/lib/node/tx/retryTxSender.js +4 -2
  559. package/lib/node/tx/txHandler.d.ts +9 -3
  560. package/lib/node/tx/txHandler.d.ts.map +1 -1
  561. package/lib/node/tx/txHandler.js +54 -40
  562. package/lib/node/tx/txParamProcessor.d.ts +4 -1
  563. package/lib/node/tx/txParamProcessor.d.ts.map +1 -1
  564. package/lib/node/tx/txParamProcessor.js +6 -0
  565. package/lib/node/tx/types.d.ts +1 -1
  566. package/lib/node/tx/types.d.ts.map +1 -1
  567. package/lib/node/tx/whileValidTxSender.d.ts +1 -6
  568. package/lib/node/tx/whileValidTxSender.d.ts.map +1 -1
  569. package/lib/node/tx/whileValidTxSender.js +35 -13
  570. package/lib/node/types.d.ts +25 -69
  571. package/lib/node/types.d.ts.map +1 -1
  572. package/lib/node/types.js +2 -2
  573. package/lib/node/user.d.ts +21 -8
  574. package/lib/node/user.d.ts.map +1 -1
  575. package/lib/node/user.js +156 -132
  576. package/lib/node/userMap/WebsocketSubscription.d.ts +1 -1
  577. package/lib/node/userMap/WebsocketSubscription.d.ts.map +1 -1
  578. package/lib/node/userMap/grpcSubscription.d.ts +1 -1
  579. package/lib/node/userMap/grpcSubscription.d.ts.map +1 -1
  580. package/lib/node/userMap/referrerMap.d.ts.map +1 -1
  581. package/lib/node/userMap/referrerMap.js +10 -3
  582. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  583. package/lib/node/userMap/revenueShareEscrowMap.js +4 -0
  584. package/lib/node/userMap/userMap.d.ts +1 -1
  585. package/lib/node/userMap/userMap.d.ts.map +1 -1
  586. package/lib/node/userMap/userMap.js +36 -23
  587. package/lib/node/userMap/userStatsMap.d.ts +1 -1
  588. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  589. package/lib/node/userMap/userStatsMap.js +18 -13
  590. package/lib/node/userStats.d.ts +7 -2
  591. package/lib/node/userStats.d.ts.map +1 -1
  592. package/lib/node/userStats.js +18 -4
  593. package/lib/node/util/TransactionConfirmationManager.d.ts.map +1 -1
  594. package/lib/node/util/TransactionConfirmationManager.js +4 -2
  595. package/lib/node/util/chainClock.d.ts +1 -1
  596. package/lib/node/util/chainClock.d.ts.map +1 -1
  597. package/lib/node/util/computeUnits.d.ts +1 -1
  598. package/lib/node/util/computeUnits.d.ts.map +1 -1
  599. package/lib/node/util/computeUnits.js +6 -1
  600. package/lib/node/velocityClient.d.ts +93 -36
  601. package/lib/node/velocityClient.d.ts.map +1 -1
  602. package/lib/node/velocityClient.js +414 -280
  603. package/package.json +15 -8
  604. package/src/accounts/basicUserAccountSubscriber.ts +7 -5
  605. package/src/accounts/basicUserStatsAccountSubscriber.ts +9 -5
  606. package/src/accounts/bulkAccountLoader.ts +20 -7
  607. package/src/accounts/grpcAccountSubscriber.ts +11 -3
  608. package/src/accounts/grpcMultiAccountSubscriber.ts +24 -9
  609. package/src/accounts/grpcMultiUserAccountSubscriber.ts +16 -12
  610. package/src/accounts/grpcProgramAccountSubscriber.ts +11 -3
  611. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +17 -7
  612. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +66 -39
  613. package/src/accounts/laserProgramAccountSubscriber.ts +3 -0
  614. package/src/accounts/oneShotUserAccountSubscriber.ts +5 -3
  615. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +8 -3
  616. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +11 -5
  617. package/src/accounts/pollingOracleAccountSubscriber.ts +17 -10
  618. package/src/accounts/pollingTokenAccountSubscriber.ts +17 -10
  619. package/src/accounts/pollingUserAccountSubscriber.ts +26 -20
  620. package/src/accounts/pollingUserStatsAccountSubscriber.ts +12 -10
  621. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +76 -30
  622. package/src/accounts/types.ts +6 -4
  623. package/src/accounts/utils.ts +10 -0
  624. package/src/accounts/webSocketAccountSubscriber.ts +23 -10
  625. package/src/accounts/webSocketAccountSubscriberV2.ts +23 -8
  626. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +17 -2
  627. package/src/accounts/webSocketProgramAccountSubscriber.ts +29 -4
  628. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +30 -4
  629. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +29 -4
  630. package/src/accounts/webSocketUserAccountSubscriber.ts +11 -2
  631. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +15 -2
  632. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +76 -48
  633. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +74 -35
  634. package/src/accounts/websocketProgramUserAccountSubscriber.ts +1 -6
  635. package/src/addresses/marketAddresses.ts +3 -2
  636. package/src/addresses/pda.ts +0 -25
  637. package/src/adminClient.ts +273 -303
  638. package/src/auctionSubscriber/auctionSubscriber.ts +7 -5
  639. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +12 -5
  640. package/src/bankrun/bankrunConnection.ts +110 -40
  641. package/src/blockhashSubscriber/BlockhashSubscriber.ts +5 -4
  642. package/src/clock/clockSubscriber.ts +10 -9
  643. package/src/config.ts +8 -3
  644. package/src/constants/index.ts +1 -2
  645. package/src/constants/numericConstants.ts +8 -4
  646. package/src/constituentMap/constituentMap.ts +8 -1
  647. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +4 -2
  648. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +13 -4
  649. package/src/core/instructions/perpOrders.ts +14 -0
  650. package/src/core/remainingAccounts.ts +4 -4
  651. package/src/decode/user.ts +8 -1
  652. package/src/dlob/DLOB.ts +296 -172
  653. package/src/dlob/DLOBNode.ts +23 -3
  654. package/src/dlob/DLOBSubscriber.ts +51 -34
  655. package/src/dlob/NodeList.ts +8 -7
  656. package/src/dlob/orderBookLevels.ts +45 -25
  657. package/src/events/eventList.ts +4 -1
  658. package/src/events/eventSubscriber.ts +107 -49
  659. package/src/events/eventsServerLogProvider.ts +22 -13
  660. package/src/events/fetchLogs.ts +3 -3
  661. package/src/events/pollingLogProvider.ts +2 -2
  662. package/src/events/txEventCache.ts +8 -2
  663. package/src/events/types.ts +0 -8
  664. package/src/events/webSocketLogProvider.ts +5 -3
  665. package/src/factory/bigNum.ts +2 -2
  666. package/src/idl/velocity.json +1234 -1577
  667. package/src/idl/velocity.ts +1234 -1577
  668. package/src/index.ts +0 -2
  669. package/src/jupiter/jupiterClient.ts +30 -10
  670. package/src/marginCalculation.ts +1 -0
  671. package/src/marinade/index.ts +11 -2
  672. package/src/math/amm.ts +188 -33
  673. package/src/math/bankruptcy.ts +1 -1
  674. package/src/math/funding.ts +7 -6
  675. package/src/math/insurance.ts +6 -8
  676. package/src/math/margin.ts +5 -112
  677. package/src/math/market.ts +6 -96
  678. package/src/math/oracles.ts +0 -17
  679. package/src/math/orders.ts +1 -110
  680. package/src/math/position.ts +4 -16
  681. package/src/math/repeg.ts +0 -29
  682. package/src/math/spotBalance.ts +14 -10
  683. package/src/math/spotMarket.ts +2 -28
  684. package/src/math/spotPosition.ts +4 -4
  685. package/src/math/state.ts +0 -8
  686. package/src/math/superStake.ts +19 -65
  687. package/src/math/trade.ts +2 -6
  688. package/src/memcmp.ts +0 -9
  689. package/src/oracles/prelaunchOracleClient.ts +7 -2
  690. package/src/oracles/pythClient.ts +12 -3
  691. package/src/oracles/pythLazerClient.ts +7 -2
  692. package/src/oracles/utils.ts +15 -0
  693. package/src/orderSubscriber/OrderSubscriber.ts +10 -4
  694. package/src/priorityFee/heliusPriorityFeeMethod.ts +1 -1
  695. package/src/priorityFee/priorityFeeSubscriber.ts +45 -9
  696. package/src/priorityFee/solanaPriorityFeeMethod.ts +1 -1
  697. package/src/pyth/types.ts +0 -2
  698. package/src/slot/SlotSubscriber.ts +3 -3
  699. package/src/slot/SlothashSubscriber.ts +17 -6
  700. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +5 -6
  701. package/src/swift/signedMsgUserAccountSubscriber.ts +16 -8
  702. package/src/swift/swiftOrderSubscriber.ts +10 -9
  703. package/src/testClient.ts +2 -2
  704. package/src/tokenFaucet.ts +22 -3
  705. package/src/tx/baseTxSender.ts +10 -10
  706. package/src/tx/fastSingleTxSender.ts +12 -8
  707. package/src/tx/reportTransactionError.ts +12 -7
  708. package/src/tx/retryTxSender.ts +6 -4
  709. package/src/tx/txHandler.ts +88 -43
  710. package/src/tx/txParamProcessor.ts +18 -3
  711. package/src/tx/types.ts +1 -1
  712. package/src/tx/whileValidTxSender.ts +51 -22
  713. package/src/types.ts +39 -75
  714. package/src/user.ts +200 -152
  715. package/src/userMap/WebsocketSubscription.ts +1 -1
  716. package/src/userMap/grpcSubscription.ts +1 -1
  717. package/src/userMap/referrerMap.ts +14 -10
  718. package/src/userMap/revenueShareEscrowMap.ts +8 -3
  719. package/src/userMap/userMap.ts +43 -25
  720. package/src/userMap/userStatsMap.ts +32 -19
  721. package/src/userStats.ts +21 -8
  722. package/src/util/TransactionConfirmationManager.ts +10 -2
  723. package/src/util/chainClock.ts +1 -1
  724. package/src/util/computeUnits.ts +7 -3
  725. package/src/velocityClient.ts +536 -383
  726. package/tests/VelocityCore/remainingAccounts.test.ts +4 -5
  727. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +19 -11
  728. package/tests/amm/test.ts +300 -95
  729. package/tests/decode/userAccountBufferStrings.ts +100 -100
  730. package/tests/dlob/helpers.ts +162 -173
  731. package/tests/dlob/test.ts +155 -106
  732. package/tests/tx/TransactionConfirmationManager.test.ts +9 -2
  733. package/tests/user/getMarginCalculation.ts +1 -1
  734. package/tests/user/helpers.ts +3 -4
  735. package/tests/user/marginCalculations.test.ts +2 -2
  736. package/tests/user/test.ts +3 -3
  737. package/tsconfig.browser.json +3 -1
  738. package/tsconfig.json +21 -2
  739. package/.yarn/install-state.gz +0 -0
  740. package/VERSION +0 -1
  741. package/bun.lock +0 -1885
  742. package/lib/browser/constants/insuranceFund.d.ts +0 -5
  743. package/lib/browser/constants/insuranceFund.js +0 -9
  744. package/lib/browser/tx/forwardOnlyTxSender.d.ts +0 -37
  745. package/lib/browser/tx/forwardOnlyTxSender.js +0 -92
  746. package/lib/browser/util/tps.d.ts +0 -2
  747. package/lib/browser/util/tps.js +0 -16
  748. package/lib/node/constants/insuranceFund.d.ts +0 -6
  749. package/lib/node/constants/insuranceFund.d.ts.map +0 -1
  750. package/lib/node/constants/insuranceFund.js +0 -9
  751. package/lib/node/tx/forwardOnlyTxSender.d.ts +0 -38
  752. package/lib/node/tx/forwardOnlyTxSender.d.ts.map +0 -1
  753. package/lib/node/tx/forwardOnlyTxSender.js +0 -92
  754. package/lib/node/util/tps.d.ts +0 -3
  755. package/lib/node/util/tps.d.ts.map +0 -1
  756. package/lib/node/util/tps.js +0 -16
  757. package/scripts/updateVersion.js +0 -28
  758. package/src/constants/insuranceFund.ts +0 -8
  759. package/src/tx/forwardOnlyTxSender.ts +0 -145
  760. package/src/util/tps.ts +0 -27
  761. package/tests/decode/phoenix.ts +0 -71
package/src/user.ts CHANGED
@@ -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';
@@ -224,19 +225,47 @@ export class User {
224
225
  this.isSubscribed = false;
225
226
  }
226
227
 
227
- public getUserAccount(): UserAccount {
228
- return this.accountSubscriber.getUserAccountAndSlot().data;
228
+ public getUserAccount(): UserAccount | undefined {
229
+ return this.accountSubscriber.getUserAccountAndSlot()?.data;
229
230
  }
230
231
 
231
- 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> {
232
248
  await this.fetchAccounts();
233
- return this.accountSubscriber.getUserAccountAndSlot().data;
249
+ const account = this.accountSubscriber.getUserAccountAndSlot();
250
+ return account?.data;
234
251
  }
235
252
 
236
253
  public getUserAccountAndSlot(): DataAndSlot<UserAccount> | undefined {
237
254
  return this.accountSubscriber.getUserAccountAndSlot();
238
255
  }
239
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
+
240
269
  public getPerpPositionForUserAccount(
241
270
  userAccount: UserAccount,
242
271
  marketIndex: number
@@ -252,22 +281,30 @@ export class User {
252
281
  * @returns userPerpPosition
253
282
  */
254
283
  public getPerpPosition(marketIndex: number): PerpPosition | undefined {
255
- const userAccount = this.getUserAccount();
284
+ const userAccount = this.getUserAccountOrThrow();
256
285
  return this.getPerpPositionForUserAccount(userAccount, marketIndex);
257
286
  }
258
287
 
259
288
  public getPerpPositionOrEmpty(marketIndex: number): PerpPosition {
260
- const userAccount = this.getUserAccount();
289
+ const userAccount = this.getUserAccountOrThrow();
261
290
  return (
262
291
  this.getPerpPositionForUserAccount(userAccount, marketIndex) ??
263
292
  this.getEmptyPosition(marketIndex)
264
293
  );
265
294
  }
266
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
+
267
304
  public getPerpPositionAndSlot(
268
305
  marketIndex: number
269
306
  ): DataAndSlot<PerpPosition | undefined> {
270
- const userAccount = this.getUserAccountAndSlot();
307
+ const userAccount = this.getUserAccountAndSlotOrThrow();
271
308
  const perpPosition = this.getPerpPositionForUserAccount(
272
309
  userAccount.data,
273
310
  marketIndex
@@ -293,14 +330,14 @@ export class User {
293
330
  * @returns userSpotPosition
294
331
  */
295
332
  public getSpotPosition(marketIndex: number): SpotPosition | undefined {
296
- const userAccount = this.getUserAccount();
333
+ const userAccount = this.getUserAccountOrThrow();
297
334
  return this.getSpotPositionForUserAccount(userAccount, marketIndex);
298
335
  }
299
336
 
300
337
  public getSpotPositionAndSlot(
301
338
  marketIndex: number
302
339
  ): DataAndSlot<SpotPosition | undefined> {
303
- const userAccount = this.getUserAccountAndSlot();
340
+ const userAccount = this.getUserAccountAndSlotOrThrow();
304
341
  const spotPosition = this.getSpotPositionForUserAccount(
305
342
  userAccount.data,
306
343
  marketIndex
@@ -334,7 +371,8 @@ export class User {
334
371
  if (spotPosition === undefined) {
335
372
  return ZERO;
336
373
  }
337
- const spotMarket = this.velocityClient.getSpotMarketAccount(marketIndex);
374
+ const spotMarket =
375
+ this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
338
376
  return getSignedTokenAmount(
339
377
  getTokenAmount(
340
378
  spotPosition.scaledBalance,
@@ -372,8 +410,8 @@ export class User {
372
410
  const perpPosition = this.getPerpPosition(perpMarketIndex);
373
411
  if (!perpPosition) return ZERO;
374
412
  const perpMarket =
375
- this.velocityClient.getPerpMarketAccount(perpMarketIndex);
376
- const spotMarket = this.velocityClient.getSpotMarketAccount(
413
+ this.velocityClient.getPerpMarketAccountOrThrow(perpMarketIndex);
414
+ const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
377
415
  perpMarket.quoteSpotMarketIndex
378
416
  );
379
417
  if (perpPosition === undefined) {
@@ -395,10 +433,10 @@ export class User {
395
433
  return total;
396
434
  }
397
435
 
398
- const perpMarket = this.velocityClient.getPerpMarketAccount(
436
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
399
437
  perpPosition.marketIndex
400
438
  );
401
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
439
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
402
440
  perpMarket.quoteSpotMarketIndex
403
441
  );
404
442
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -438,12 +476,12 @@ export class User {
438
476
  * @returns Order
439
477
  */
440
478
  public getOrder(orderId: number): Order | undefined {
441
- const userAccount = this.getUserAccount();
479
+ const userAccount = this.getUserAccountOrThrow();
442
480
  return this.getOrderForUserAccount(userAccount, orderId);
443
481
  }
444
482
 
445
483
  public getOrderAndSlot(orderId: number): DataAndSlot<Order | undefined> {
446
- const userAccount = this.getUserAccountAndSlot();
484
+ const userAccount = this.getUserAccountAndSlotOrThrow();
447
485
  const order = this.getOrderForUserAccount(userAccount.data, orderId);
448
486
  return {
449
487
  data: order,
@@ -465,14 +503,14 @@ export class User {
465
503
  * @returns Order
466
504
  */
467
505
  public getOrderByUserOrderId(userOrderId: number): Order | undefined {
468
- const userAccount = this.getUserAccount();
506
+ const userAccount = this.getUserAccountOrThrow();
469
507
  return this.getOrderByUserIdForUserAccount(userAccount, userOrderId);
470
508
  }
471
509
 
472
510
  public getOrderByUserOrderIdAndSlot(
473
511
  userOrderId: number
474
512
  ): DataAndSlot<Order | undefined> {
475
- const userAccount = this.getUserAccountAndSlot();
513
+ const userAccount = this.getUserAccountAndSlotOrThrow();
476
514
  const order = this.getOrderByUserIdForUserAccount(
477
515
  userAccount.data,
478
516
  userOrderId
@@ -483,7 +521,9 @@ export class User {
483
521
  };
484
522
  }
485
523
 
486
- public getOpenOrdersForUserAccount(userAccount?: UserAccount): Order[] {
524
+ public getOpenOrdersForUserAccount(
525
+ userAccount?: UserAccount
526
+ ): Order[] | undefined {
487
527
  return userAccount?.orders.filter((order) =>
488
528
  isVariant(order.status, 'open')
489
529
  );
@@ -491,12 +531,12 @@ export class User {
491
531
 
492
532
  public getOpenOrders(): Order[] {
493
533
  const userAccount = this.getUserAccount();
494
- return this.getOpenOrdersForUserAccount(userAccount);
534
+ return this.getOpenOrdersForUserAccount(userAccount) ?? [];
495
535
  }
496
536
 
497
537
  public getOpenOrdersAndSlot(): DataAndSlot<Order[]> {
498
- const userAccount = this.getUserAccountAndSlot();
499
- const openOrders = this.getOpenOrdersForUserAccount(userAccount.data);
538
+ const userAccount = this.getUserAccountAndSlotOrThrow();
539
+ const openOrders = this.getOpenOrdersForUserAccount(userAccount.data) ?? [];
500
540
  return {
501
541
  data: openOrders,
502
542
  slot: userAccount.slot,
@@ -521,7 +561,7 @@ export class User {
521
561
  * @returns : open asks
522
562
  */
523
563
  public getPerpBidAsks(marketIndex: number): [BN, BN] {
524
- const position = this.getPerpPosition(marketIndex);
564
+ const position = this.getPerpPositionOrThrow(marketIndex);
525
565
 
526
566
  const totalOpenBids = position.openBids;
527
567
  const totalOpenAsks = position.openAsks;
@@ -536,12 +576,13 @@ export class User {
536
576
  public getPerpBuyingPower(
537
577
  marketIndex: number,
538
578
  collateralBuffer = ZERO,
539
- maxMarginRatio = undefined,
579
+ maxMarginRatio: number | undefined = undefined,
540
580
  positionType: 'isolated' | 'cross' = 'cross'
541
581
  ): BN {
542
582
  const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
543
583
 
544
- const perpMarket = this.velocityClient.getPerpMarketAccount(marketIndex);
584
+ const perpMarket =
585
+ this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
545
586
  const oraclePriceData = this.getOracleDataForPerpMarket(marketIndex);
546
587
  const worstCaseBaseAssetAmount = perpPosition
547
588
  ? calculateWorstCaseBaseAssetAmount(
@@ -591,18 +632,24 @@ export class User {
591
632
  );
592
633
  }
593
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
+
594
644
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(
595
645
  marketIndex: number,
596
646
  freeCollateral: BN,
597
647
  baseAssetAmount: BN,
598
- perpMarketMaxMarginRatio = undefined
648
+ perpMarketMaxMarginRatio: number | undefined = undefined
599
649
  ): BN {
600
- const maxMarginRatio = Math.max(
601
- perpMarketMaxMarginRatio,
602
- this.getUserAccount().maxMarginRatio
603
- );
650
+ const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
604
651
  const marginRatio = calculateMarketMarginRatio(
605
- this.velocityClient.getPerpMarketAccount(marketIndex),
652
+ this.velocityClient.getPerpMarketAccountOrThrow(marketIndex),
606
653
  baseAssetAmount,
607
654
  'Initial',
608
655
  maxMarginRatio
@@ -747,11 +794,11 @@ export class User {
747
794
  }
748
795
 
749
796
  public getActivePerpPositions(): PerpPosition[] {
750
- const userAccount = this.getUserAccount();
797
+ const userAccount = this.getUserAccountOrThrow();
751
798
  return this.getActivePerpPositionsForUserAccount(userAccount);
752
799
  }
753
800
  public getActivePerpPositionsAndSlot(): DataAndSlot<PerpPosition[]> {
754
- const userAccount = this.getUserAccountAndSlot();
801
+ const userAccount = this.getUserAccountAndSlotOrThrow();
755
802
  const positions = this.getActivePerpPositionsForUserAccount(
756
803
  userAccount.data
757
804
  );
@@ -770,11 +817,11 @@ export class User {
770
817
  }
771
818
 
772
819
  public getActiveSpotPositions(): SpotPosition[] {
773
- const userAccount = this.getUserAccount();
820
+ const userAccount = this.getUserAccountOrThrow();
774
821
  return this.getActiveSpotPositionsForUserAccount(userAccount);
775
822
  }
776
823
  public getActiveSpotPositionsAndSlot(): DataAndSlot<SpotPosition[]> {
777
- const userAccount = this.getUserAccountAndSlot();
824
+ const userAccount = this.getUserAccountAndSlotOrThrow();
778
825
  const positions = this.getActiveSpotPositionsForUserAccount(
779
826
  userAccount.data
780
827
  );
@@ -800,14 +847,14 @@ export class User {
800
847
  marketIndex !== undefined ? pos.marketIndex === marketIndex : true
801
848
  )
802
849
  .reduce((unrealizedPnl, perpPosition) => {
803
- const market = this.velocityClient.getPerpMarketAccount(
850
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
804
851
  perpPosition.marketIndex
805
852
  );
806
853
  const oraclePriceData = this.getMMOracleDataForPerpMarket(
807
854
  market.marketIndex
808
855
  );
809
856
 
810
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
857
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
811
858
  market.quoteSpotMarketIndex
812
859
  );
813
860
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -871,12 +918,12 @@ export class User {
871
918
  * @returns : Precision QUOTE_PRECISION
872
919
  */
873
920
  public getUnrealizedFundingPNL(marketIndex?: number): BN {
874
- return this.getUserAccount()
921
+ return this.getUserAccountOrThrow()
875
922
  .perpPositions.filter((pos) =>
876
923
  marketIndex !== undefined ? pos.marketIndex === marketIndex : true
877
924
  )
878
925
  .reduce((pnl, perpPosition) => {
879
- const market = this.velocityClient.getPerpMarketAccount(
926
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
880
927
  perpPosition.marketIndex
881
928
  );
882
929
  return pnl.add(calculateUnsettledFundingPnl(market, perpPosition));
@@ -895,7 +942,7 @@ export class User {
895
942
  let netQuoteValue = ZERO;
896
943
  let totalAssetValue = ZERO;
897
944
  let totalLiabilityValue = ZERO;
898
- for (const spotPosition of this.getUserAccount().spotPositions) {
945
+ for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
899
946
  const countForBase =
900
947
  marketIndex === undefined || spotPosition.marketIndex === marketIndex;
901
948
 
@@ -911,7 +958,9 @@ export class User {
911
958
  }
912
959
 
913
960
  const spotMarketAccount: SpotMarketAccount =
914
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
961
+ this.velocityClient.getSpotMarketAccountOrThrow(
962
+ spotPosition.marketIndex
963
+ );
915
964
 
916
965
  const oraclePriceData = this.getOracleDataForSpotMarket(
917
966
  spotPosition.marketIndex
@@ -1014,7 +1063,7 @@ export class User {
1014
1063
  spotMarketAccount,
1015
1064
  strictOraclePrice,
1016
1065
  marginCategory,
1017
- this.getUserAccount().maxMarginRatio
1066
+ this.getUserAccountOrThrow().maxMarginRatio
1018
1067
  );
1019
1068
 
1020
1069
  if (worstCaseTokenAmount.gt(ZERO) && countForBase) {
@@ -1047,7 +1096,10 @@ export class User {
1047
1096
  if (worstCaseQuoteTokenAmount.lt(ZERO) && countForQuote) {
1048
1097
  let weight = SPOT_MARKET_WEIGHT_PRECISION;
1049
1098
  if (marginCategory === 'Initial') {
1050
- weight = BN.max(weight, new BN(this.getUserAccount().maxMarginRatio));
1099
+ weight = BN.max(
1100
+ weight,
1101
+ new BN(this.getUserAccountOrThrow().maxMarginRatio)
1102
+ );
1051
1103
  }
1052
1104
 
1053
1105
  const weightedTokenValue = worstCaseQuoteTokenAmount
@@ -1104,7 +1156,7 @@ export class User {
1104
1156
  tokenAmount,
1105
1157
  strictOraclePrice,
1106
1158
  spotMarketAccount,
1107
- this.getUserAccount().maxMarginRatio,
1159
+ this.getUserAccountOrThrow().maxMarginRatio,
1108
1160
  marginCategory,
1109
1161
  liquidationBuffer
1110
1162
  );
@@ -1138,7 +1190,7 @@ export class User {
1138
1190
  tokenAmount,
1139
1191
  strictOraclePrice,
1140
1192
  spotMarketAccount,
1141
- this.getUserAccount().maxMarginRatio,
1193
+ this.getUserAccountOrThrow().maxMarginRatio,
1142
1194
  marginCategory
1143
1195
  );
1144
1196
  }
@@ -1199,8 +1251,15 @@ export class User {
1199
1251
  });
1200
1252
 
1201
1253
  if (perpMarketIndex !== undefined) {
1202
- const { totalCollateral, totalCollateralBuffer } =
1254
+ const isolatedMarginCalculation =
1203
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;
1204
1263
  if (liquidationBuffer?.gt(ZERO)) {
1205
1264
  return totalCollateralBuffer;
1206
1265
  }
@@ -1300,7 +1359,7 @@ export class User {
1300
1359
  includeOpenOrders?: boolean,
1301
1360
  strict = false
1302
1361
  ): BN {
1303
- const market = this.velocityClient.getPerpMarketAccount(
1362
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1304
1363
  perpPosition.marketIndex
1305
1364
  );
1306
1365
 
@@ -1334,7 +1393,7 @@ export class User {
1334
1393
  if (marginCategory) {
1335
1394
  const userCustomMargin = Math.max(
1336
1395
  perpPosition.maxMarginRatio,
1337
- this.getUserAccount().maxMarginRatio
1396
+ this.getUserAccountOrThrow().maxMarginRatio
1338
1397
  );
1339
1398
  let marginRatio = new BN(
1340
1399
  calculateMarketMarginRatio(
@@ -1353,7 +1412,7 @@ export class User {
1353
1412
  marginRatio = ZERO;
1354
1413
  }
1355
1414
 
1356
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
1415
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
1357
1416
  market.quoteSpotMarketIndex
1358
1417
  );
1359
1418
  const quoteOraclePriceData =
@@ -1396,7 +1455,7 @@ export class User {
1396
1455
  includeOpenOrders?: boolean,
1397
1456
  strict = false
1398
1457
  ): BN {
1399
- const perpPosition = this.getPerpPosition(marketIndex);
1458
+ const perpPosition = this.getPerpPositionOrThrow(marketIndex);
1400
1459
  return this.calculateWeightedPerpPositionLiability(
1401
1460
  perpPosition,
1402
1461
  marginCategory,
@@ -1441,7 +1500,7 @@ export class User {
1441
1500
  includeOpenOrders = false
1442
1501
  ): BN {
1443
1502
  const userPosition = this.getPerpPositionOrEmpty(marketIndex);
1444
- const market = this.velocityClient.getPerpMarketAccount(
1503
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1445
1504
  userPosition.marketIndex
1446
1505
  );
1447
1506
  return calculateBaseAssetValueWithOracle(
@@ -1462,7 +1521,7 @@ export class User {
1462
1521
  includeOpenOrders = false
1463
1522
  ): BN {
1464
1523
  const userPosition = this.getPerpPositionOrEmpty(marketIndex);
1465
- const market = this.velocityClient.getPerpMarketAccount(
1524
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1466
1525
  userPosition.marketIndex
1467
1526
  );
1468
1527
 
@@ -1501,7 +1560,7 @@ export class User {
1501
1560
  amountToClose?: BN,
1502
1561
  useAMMClose = false
1503
1562
  ): [BN, BN] {
1504
- const market = this.velocityClient.getPerpMarketAccount(
1563
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
1505
1564
  position.marketIndex
1506
1565
  );
1507
1566
 
@@ -1590,7 +1649,7 @@ export class User {
1590
1649
 
1591
1650
  getLeverageComponents(
1592
1651
  includeOpenOrders = true,
1593
- marginCategory: MarginCategory = undefined,
1652
+ marginCategory: MarginCategory | undefined = undefined,
1594
1653
  perpMarketIndex?: number
1595
1654
  ): {
1596
1655
  perpLiabilityValue: BN;
@@ -1606,14 +1665,14 @@ export class User {
1606
1665
  undefined,
1607
1666
  includeOpenOrders
1608
1667
  );
1609
- const perpMarket = this.velocityClient.getPerpMarketAccount(
1668
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
1610
1669
  perpPosition.marketIndex
1611
1670
  );
1612
1671
 
1613
1672
  const oraclePriceData = this.getOracleDataForPerpMarket(
1614
1673
  perpPosition.marketIndex
1615
1674
  );
1616
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
1675
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
1617
1676
  perpMarket.quoteSpotMarketIndex
1618
1677
  );
1619
1678
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -1686,6 +1745,12 @@ export class User {
1686
1745
 
1687
1746
  const spotPosition = this.getSpotPosition(spotMarketAccount.marketIndex);
1688
1747
 
1748
+ if (!spotPosition) {
1749
+ throw new Error(
1750
+ `No spot position found for market ${spotMarketAccount.marketIndex}`
1751
+ );
1752
+ }
1753
+
1689
1754
  if (isSpotPositionAvailable(spotPosition)) {
1690
1755
  return false;
1691
1756
  }
@@ -1772,8 +1837,8 @@ export class User {
1772
1837
  */
1773
1838
  getTotalAllTimePnl(): BN {
1774
1839
  const netUsdValue = this.getNetUsdValue();
1775
- const totalDeposits = this.getUserAccount().totalDeposits;
1776
- const totalWithdraws = this.getUserAccount().totalWithdraws;
1840
+ const totalDeposits = this.getUserAccountOrThrow().totalDeposits;
1841
+ const totalWithdraws = this.getUserAccountOrThrow().totalWithdraws;
1777
1842
 
1778
1843
  const totalPnl = netUsdValue.add(totalWithdraws).sub(totalDeposits);
1779
1844
 
@@ -2012,7 +2077,7 @@ export class User {
2012
2077
 
2013
2078
  public isCrossMarginBeingLiquidated(): boolean {
2014
2079
  return (
2015
- (this.getUserAccount().status &
2080
+ (this.getUserAccountOrThrow().status &
2016
2081
  (UserStatus.BEING_LIQUIDATED | UserStatus.BANKRUPT)) >
2017
2082
  0
2018
2083
  );
@@ -2039,7 +2104,7 @@ export class User {
2039
2104
  );
2040
2105
 
2041
2106
  return (
2042
- (position?.positionFlag &
2107
+ ((position?.positionFlag ?? 0) &
2043
2108
  (PositionFlag.BeingLiquidated | PositionFlag.Bankruptcy)) >
2044
2109
  0
2045
2110
  );
@@ -2068,11 +2133,11 @@ export class User {
2068
2133
  }
2069
2134
 
2070
2135
  public hasStatus(status: UserStatus): boolean {
2071
- return (this.getUserAccount().status & status) > 0;
2136
+ return (this.getUserAccountOrThrow().status & status) > 0;
2072
2137
  }
2073
2138
 
2074
2139
  public isBankrupt(): boolean {
2075
- return (this.getUserAccount().status & UserStatus.BANKRUPT) > 0;
2140
+ return (this.getUserAccountOrThrow().status & UserStatus.BANKRUPT) > 0;
2076
2141
  }
2077
2142
 
2078
2143
  /**
@@ -2080,12 +2145,12 @@ export class User {
2080
2145
  * @returns
2081
2146
  */
2082
2147
  public needsToSettleFundingPayment(): boolean {
2083
- for (const userPosition of this.getUserAccount().perpPositions) {
2148
+ for (const userPosition of this.getUserAccountOrThrow().perpPositions) {
2084
2149
  if (userPosition.baseAssetAmount.eq(ZERO)) {
2085
2150
  continue;
2086
2151
  }
2087
2152
 
2088
- const market = this.velocityClient.getPerpMarketAccount(
2153
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
2089
2154
  userPosition.marketIndex
2090
2155
  );
2091
2156
  if (
@@ -2126,7 +2191,7 @@ export class User {
2126
2191
  totalCollateral.sub(maintenanceMarginRequirement)
2127
2192
  );
2128
2193
 
2129
- const market = this.velocityClient.getSpotMarketAccount(marketIndex);
2194
+ const market = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
2130
2195
  let signedTokenAmount = getSignedTokenAmount(
2131
2196
  getTokenAmount(
2132
2197
  currentSpotPosition.scaledBalance,
@@ -2217,9 +2282,9 @@ export class User {
2217
2282
  offsetCollateral = ZERO,
2218
2283
  marginType?: MarginType
2219
2284
  ): BN {
2220
- const market = this.velocityClient.getPerpMarketAccount(marketIndex);
2285
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
2221
2286
 
2222
- const oracle = this.velocityClient.getPerpMarketAccount(marketIndex).oracle;
2287
+ const oracle = market.oracle;
2223
2288
 
2224
2289
  const oraclePrice =
2225
2290
  this.velocityClient.getOracleDataForPerpMarket(marketIndex).price;
@@ -2431,7 +2496,7 @@ export class User {
2431
2496
 
2432
2497
  const userCustomMargin = Math.max(
2433
2498
  perpPosition.maxMarginRatio,
2434
- this.getUserAccount().maxMarginRatio
2499
+ this.getUserAccountOrThrow().maxMarginRatio
2435
2500
  );
2436
2501
  const marginRatio = calculateMarketMarginRatio(
2437
2502
  market,
@@ -2480,7 +2545,7 @@ export class User {
2480
2545
 
2481
2546
  const userCustomMargin = Math.max(
2482
2547
  perpPosition.maxMarginRatio,
2483
- this.getUserAccount().maxMarginRatio
2548
+ this.getUserAccountOrThrow().maxMarginRatio
2484
2549
  );
2485
2550
 
2486
2551
  const marginRatio = calculateMarketMarginRatio(
@@ -2593,10 +2658,7 @@ export class User {
2593
2658
  estEntryPrice?: BN,
2594
2659
  perpMarketMaxMarginRatio?: number
2595
2660
  ): BN {
2596
- const maxMarginRatio = Math.max(
2597
- perpMarketMaxMarginRatio,
2598
- this.getUserAccount().maxMarginRatio
2599
- );
2661
+ const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
2600
2662
  return calculateMarginUSDCRequiredForTrade(
2601
2663
  this.velocityClient,
2602
2664
  targetMarketIndex,
@@ -2612,10 +2674,7 @@ export class User {
2612
2674
  collateralIndex: number,
2613
2675
  perpMarketMaxMarginRatio?: number
2614
2676
  ): BN {
2615
- const maxMarginRatio = Math.max(
2616
- perpMarketMaxMarginRatio,
2617
- this.getUserAccount().maxMarginRatio
2618
- );
2677
+ const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
2619
2678
  return calculateCollateralDepositRequiredForTrade(
2620
2679
  this.velocityClient,
2621
2680
  targetMarketIndex,
@@ -2636,7 +2695,7 @@ export class User {
2636
2695
  public getMaxTradeSizeUSDCForPerp(
2637
2696
  targetMarketIndex: number,
2638
2697
  tradeSide: PositionDirection,
2639
- maxMarginRatio = undefined,
2698
+ maxMarginRatio: number | undefined = undefined,
2640
2699
  positionType: 'isolated' | 'cross' = 'cross'
2641
2700
  ): { tradeSize: BN; oppositeSideTradeSize: BN } {
2642
2701
  let tradeSize = ZERO;
@@ -2656,7 +2715,7 @@ export class User {
2656
2715
  const oracleData = this.getMMOracleDataForPerpMarket(targetMarketIndex);
2657
2716
 
2658
2717
  const marketAccount =
2659
- this.velocityClient.getPerpMarketAccount(targetMarketIndex);
2718
+ this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
2660
2719
 
2661
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.
2662
2721
  const oppositeSizeLiabilityValue = targetingSameSide
@@ -2695,7 +2754,7 @@ export class User {
2695
2754
  const marginRequirement = this.getInitialMarginRequirement();
2696
2755
  const marginRatio = Math.max(
2697
2756
  currentPosition.maxMarginRatio,
2698
- this.getUserAccount().maxMarginRatio
2757
+ this.getUserAccountOrThrow().maxMarginRatio
2699
2758
  );
2700
2759
  const marginFreedByClosing = perpLiabilityValue
2701
2760
  .mul(new BN(marginRatio))
@@ -2783,7 +2842,8 @@ export class User {
2783
2842
  currentQuoteAssetValue?: BN,
2784
2843
  currentSpotMarketNetValue?: BN
2785
2844
  ): BN {
2786
- const market = this.velocityClient.getSpotMarketAccount(targetMarketIndex);
2845
+ const market =
2846
+ this.velocityClient.getSpotMarketAccountOrThrow(targetMarketIndex);
2787
2847
  const oraclePrice =
2788
2848
  this.velocityClient.getOracleDataForSpotMarket(targetMarketIndex).price;
2789
2849
 
@@ -2803,11 +2863,11 @@ export class User {
2803
2863
  isVariant(direction, 'long')
2804
2864
  ? SpotBalanceType.DEPOSIT
2805
2865
  : SpotBalanceType.BORROW,
2806
- this.getUserAccount().maxMarginRatio
2866
+ this.getUserAccountOrThrow().maxMarginRatio
2807
2867
  );
2808
2868
 
2809
2869
  let tradeAmount = ZERO;
2810
- if (this.getUserAccount().isMarginTradingEnabled) {
2870
+ if (this.getUserAccountOrThrow().isMarginTradingEnabled) {
2811
2871
  // if the user is buying/selling and already short/long, need to account for closing out short/long
2812
2872
  if (isVariant(direction, 'long') && currentSpotMarketNetValue.lt(ZERO)) {
2813
2873
  tradeAmount = currentSpotMarketNetValue.abs();
@@ -2817,7 +2877,7 @@ export class User {
2817
2877
  'Initial',
2818
2878
  this.getTokenAmount(targetMarketIndex).abs(),
2819
2879
  SpotBalanceType.BORROW,
2820
- this.getUserAccount().maxMarginRatio
2880
+ this.getUserAccountOrThrow().maxMarginRatio
2821
2881
  );
2822
2882
  freeCollateral = freeCollateral.add(
2823
2883
  tradeAmount.mul(new BN(marginRatio)).div(MARGIN_PRECISION)
@@ -2833,7 +2893,7 @@ export class User {
2833
2893
  'Initial',
2834
2894
  this.getTokenAmount(targetMarketIndex),
2835
2895
  SpotBalanceType.DEPOSIT,
2836
- this.getUserAccount().maxMarginRatio
2896
+ this.getUserAccountOrThrow().maxMarginRatio
2837
2897
  );
2838
2898
  freeCollateral = freeCollateral.add(
2839
2899
  tradeAmount.mul(new BN(marginRatio)).div(MARGIN_PRECISION)
@@ -2875,8 +2935,10 @@ export class User {
2875
2935
  calculateSwap?: (inAmount: BN) => BN;
2876
2936
  iterationLimit?: number;
2877
2937
  }): { inAmount: BN; outAmount: BN; leverage: BN } {
2878
- const inMarket = this.velocityClient.getSpotMarketAccount(inMarketIndex);
2879
- const outMarket = this.velocityClient.getSpotMarketAccount(outMarketIndex);
2938
+ const inMarket =
2939
+ this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
2940
+ const outMarket =
2941
+ this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
2880
2942
 
2881
2943
  const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
2882
2944
  const inOraclePrice = inOraclePriceData.price;
@@ -3133,14 +3195,14 @@ export class User {
3133
3195
  const marginCategory = 'Initial';
3134
3196
 
3135
3197
  const spotMarketAccount: SpotMarketAccount =
3136
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
3198
+ this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
3137
3199
 
3138
3200
  const { freeCollateralContribution } = getWorstCaseTokenAmounts(
3139
3201
  spotPosition,
3140
3202
  spotMarketAccount,
3141
3203
  strictOraclePrice,
3142
3204
  marginCategory,
3143
- this.getUserAccount().maxMarginRatio
3205
+ this.getUserAccountOrThrow().maxMarginRatio
3144
3206
  );
3145
3207
 
3146
3208
  return freeCollateralContribution;
@@ -3157,14 +3219,14 @@ export class User {
3157
3219
  let totalLiabilityValue = ZERO;
3158
3220
 
3159
3221
  const spotMarketAccount: SpotMarketAccount =
3160
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
3222
+ this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
3161
3223
 
3162
3224
  const { tokenValue, ordersValue } = getWorstCaseTokenAmounts(
3163
3225
  spotPosition,
3164
3226
  spotMarketAccount,
3165
3227
  strictOraclePrice,
3166
3228
  'Initial',
3167
- this.getUserAccount().maxMarginRatio
3229
+ this.getUserAccountOrThrow().maxMarginRatio
3168
3230
  );
3169
3231
 
3170
3232
  if (tokenValue.gte(ZERO)) {
@@ -3203,8 +3265,10 @@ export class User {
3203
3265
  inAmount: BN;
3204
3266
  outAmount: BN;
3205
3267
  }): BN {
3206
- const inMarket = this.velocityClient.getSpotMarketAccount(inMarketIndex);
3207
- const outMarket = this.velocityClient.getSpotMarketAccount(outMarketIndex);
3268
+ const inMarket =
3269
+ this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
3270
+ const outMarket =
3271
+ this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
3208
3272
 
3209
3273
  const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
3210
3274
  const inOraclePrice = inOraclePriceData.price;
@@ -3407,7 +3471,7 @@ export class User {
3407
3471
  const currentPosition = this.getPerpPositionOrEmpty(targetMarketIndex);
3408
3472
 
3409
3473
  const perpMarket =
3410
- this.velocityClient.getPerpMarketAccount(targetMarketIndex);
3474
+ this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
3411
3475
  const oracleData = this.getOracleDataForPerpMarket(targetMarketIndex);
3412
3476
 
3413
3477
  let {
@@ -3477,17 +3541,15 @@ export class User {
3477
3541
  public getUserFeeTier(marketType: MarketType, now?: BN) {
3478
3542
  const state = this.velocityClient.getStateAccount();
3479
3543
 
3480
- const feeTierIndex = 0;
3481
3544
  if (isVariant(marketType, 'perp')) {
3482
3545
  const userStatsAccount: UserStatsAccount = this.velocityClient
3483
- .getUserStats()
3484
- .getAccount();
3546
+ .getUserStatsOrThrow()
3547
+ .getAccountOrThrow();
3485
3548
 
3486
3549
  const total30dVolume = getUser30dRollingVolumeEstimate(
3487
3550
  userStatsAccount,
3488
3551
  now
3489
3552
  );
3490
- const stakedGovAssetAmount = userStatsAccount.ifStakedGovTokenAmount;
3491
3553
 
3492
3554
  const volumeThresholds = [
3493
3555
  new BN(2_000_000).mul(QUOTE_PRECISION),
@@ -3496,14 +3558,6 @@ export class User {
3496
3558
  new BN(80_000_000).mul(QUOTE_PRECISION),
3497
3559
  new BN(200_000_000).mul(QUOTE_PRECISION),
3498
3560
  ];
3499
- const stakeThresholds = [
3500
- new BN(1_000 - 1).mul(QUOTE_PRECISION),
3501
- new BN(10_000 - 1).mul(QUOTE_PRECISION),
3502
- new BN(50_000 - 1).mul(QUOTE_PRECISION),
3503
- new BN(100_000 - 1).mul(QUOTE_PRECISION),
3504
- new BN(250_000 - 5).mul(QUOTE_PRECISION),
3505
- ];
3506
- const stakeBenefitFrac = [0, 5, 10, 20, 30, 40];
3507
3561
 
3508
3562
  let feeTierIndex = 5;
3509
3563
  for (let i = 0; i < volumeThresholds.length; i++) {
@@ -3513,29 +3567,10 @@ export class User {
3513
3567
  }
3514
3568
  }
3515
3569
 
3516
- let stakeBenefitIndex = 5;
3517
- for (let i = 0; i < stakeThresholds.length; i++) {
3518
- if (stakedGovAssetAmount.lt(stakeThresholds[i])) {
3519
- stakeBenefitIndex = i;
3520
- break;
3521
- }
3522
- }
3523
-
3524
- const stakeBenefit = stakeBenefitFrac[stakeBenefitIndex];
3525
-
3526
- const tier = { ...state.perpFeeStructure.feeTiers[feeTierIndex] };
3527
-
3528
- if (stakeBenefit > 0) {
3529
- tier.feeNumerator = (tier.feeNumerator * (100 - stakeBenefit)) / 100;
3530
-
3531
- tier.makerRebateNumerator =
3532
- (tier.makerRebateNumerator * (100 + stakeBenefit)) / 100;
3533
- }
3534
-
3535
- return tier;
3570
+ return state.perpFeeStructure.feeTiers[feeTierIndex];
3536
3571
  }
3537
3572
 
3538
- return state.spotFeeStructure.feeTiers[feeTierIndex];
3573
+ return state.spotFeeStructure.feeTiers[0];
3539
3574
  }
3540
3575
 
3541
3576
  /**
@@ -3570,7 +3605,8 @@ export class User {
3570
3605
  */
3571
3606
  public getWithdrawalLimit(marketIndex: number, reduceOnly?: boolean): BN {
3572
3607
  const nowTs = new BN(Math.floor(Date.now() / 1000));
3573
- const spotMarket = this.velocityClient.getSpotMarketAccount(marketIndex);
3608
+ const spotMarket =
3609
+ this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
3574
3610
 
3575
3611
  // eslint-disable-next-line prefer-const
3576
3612
  let { borrowLimit, withdrawLimit } = calculateWithdrawLimit(
@@ -3662,12 +3698,13 @@ export class User {
3662
3698
  depositAmount: BN;
3663
3699
  maxDepositAmount: BN;
3664
3700
  } {
3665
- const spotMarket = this.velocityClient.getSpotMarketAccount(marketIndex);
3701
+ const spotMarket =
3702
+ this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
3666
3703
  const maxDepositAmount = spotMarket.withdrawGuardThreshold.div(new BN(10));
3667
3704
  const position = this.getSpotPosition(marketIndex);
3668
3705
 
3669
- const netDeposits = this.getUserAccount().totalDeposits.sub(
3670
- this.getUserAccount().totalWithdraws
3706
+ const netDeposits = this.getUserAccountOrThrow().totalDeposits.sub(
3707
+ this.getUserAccountOrThrow().totalWithdraws
3671
3708
  );
3672
3709
 
3673
3710
  if (!position) {
@@ -3712,7 +3749,7 @@ export class User {
3712
3749
  }
3713
3750
 
3714
3751
  public canMakeIdle(slot: BN): boolean {
3715
- const userAccount = this.getUserAccount();
3752
+ const userAccount = this.getUserAccountOrThrow();
3716
3753
  if (userAccount.idle) {
3717
3754
  return false;
3718
3755
  }
@@ -3770,14 +3807,16 @@ export class User {
3770
3807
  userStatsAccount?: UserStatsAccount,
3771
3808
  now?: BN
3772
3809
  ): { canDelete: boolean; reason?: string } {
3773
- const userAccount = this.getUserAccount();
3810
+ const userAccount = this.getUserAccountOrThrow();
3774
3811
  const userStatsAccountToUse =
3775
- userStatsAccount || this.velocityClient.getUserStats().getAccount();
3812
+ userStatsAccount ??
3813
+ this.velocityClient.getUserStatsOrThrow().getAccount();
3776
3814
  const nowInSeconds = now || new BN(Math.floor(Date.now() / 1000));
3777
3815
  const stateAccount = this.velocityClient.getStateAccount();
3778
3816
 
3779
3817
  // Referrer cannot delete sub_account_id 0
3780
3818
  const isReferrer =
3819
+ userStatsAccountToUse !== undefined &&
3781
3820
  (userStatsAccountToUse.referrerStatus & ReferrerStatus.IsReferrer) > 0;
3782
3821
  if (isReferrer && userAccount.subAccountId === 0) {
3783
3822
  return { canDelete: false, reason: 'is-subaccount-0-referrer' };
@@ -3813,7 +3852,7 @@ export class User {
3813
3852
  }
3814
3853
 
3815
3854
  // Fresh account (< 13 days) with init fee must be idle
3816
- if (stateAccount.maxInitializeUserFee > 0) {
3855
+ if (stateAccount.maxInitializeUserFee > 0 && userStatsAccountToUse) {
3817
3856
  const minActionTs = BN.min(
3818
3857
  userStatsAccountToUse.lastFillerVolume30DTs,
3819
3858
  BN.min(
@@ -3843,7 +3882,9 @@ export class User {
3843
3882
  safestPerpTier = Math.min(
3844
3883
  safestPerpTier,
3845
3884
  getPerpMarketTierNumber(
3846
- this.velocityClient.getPerpMarketAccount(perpPosition.marketIndex)
3885
+ this.velocityClient.getPerpMarketAccountOrThrow(
3886
+ perpPosition.marketIndex
3887
+ )
3847
3888
  )
3848
3889
  );
3849
3890
  }
@@ -3856,7 +3897,9 @@ export class User {
3856
3897
  safestSpotTier = Math.min(
3857
3898
  safestSpotTier,
3858
3899
  getSpotMarketTierNumber(
3859
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex)
3900
+ this.velocityClient.getSpotMarketAccountOrThrow(
3901
+ spotPosition.marketIndex
3902
+ )
3860
3903
  )
3861
3904
  );
3862
3905
  }
@@ -3880,7 +3923,7 @@ export class User {
3880
3923
  quoteOraclePriceData?: OraclePriceData;
3881
3924
  includeOpenOrders?: boolean;
3882
3925
  }): HealthComponent {
3883
- const perpMarket = this.velocityClient.getPerpMarketAccount(
3926
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
3884
3927
  perpPosition.marketIndex
3885
3928
  );
3886
3929
  const _oraclePriceData =
@@ -3908,7 +3951,7 @@ export class User {
3908
3951
 
3909
3952
  const userCustomMargin = Math.max(
3910
3953
  perpPosition.maxMarginRatio,
3911
- this.getUserAccount().maxMarginRatio
3954
+ this.getUserAccountOrThrow().maxMarginRatio
3912
3955
  );
3913
3956
  const marginRatio = new BN(
3914
3957
  calculateMarketMarginRatio(
@@ -3955,7 +3998,7 @@ export class User {
3955
3998
  };
3956
3999
 
3957
4000
  for (const perpPosition of this.getActivePerpPositions()) {
3958
- const perpMarket = this.velocityClient.getPerpMarketAccount(
4001
+ const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
3959
4002
  perpPosition.marketIndex
3960
4003
  );
3961
4004
 
@@ -3975,7 +4018,7 @@ export class User {
3975
4018
  })
3976
4019
  );
3977
4020
 
3978
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
4021
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
3979
4022
  perpMarket.quoteSpotMarketIndex
3980
4023
  );
3981
4024
 
@@ -4019,7 +4062,9 @@ export class User {
4019
4062
  let netQuoteValue = ZERO;
4020
4063
  for (const spotPosition of this.getActiveSpotPositions()) {
4021
4064
  const spotMarketAccount: SpotMarketAccount =
4022
- this.velocityClient.getSpotMarketAccount(spotPosition.marketIndex);
4065
+ this.velocityClient.getSpotMarketAccountOrThrow(
4066
+ spotPosition.marketIndex
4067
+ );
4023
4068
 
4024
4069
  const oraclePriceData = this.getOracleDataForSpotMarket(
4025
4070
  spotPosition.marketIndex
@@ -4052,7 +4097,7 @@ export class User {
4052
4097
  spotMarketAccount,
4053
4098
  strictOraclePrice,
4054
4099
  marginCategory,
4055
- this.getUserAccount().maxMarginRatio
4100
+ this.getUserAccountOrThrow().maxMarginRatio
4056
4101
  );
4057
4102
 
4058
4103
  netQuoteValue = netQuoteValue.add(ordersValue);
@@ -4097,7 +4142,7 @@ export class User {
4097
4142
  oraclePriceData.price,
4098
4143
  spotMarketAccount,
4099
4144
  marginCategory,
4100
- this.getUserAccount().maxMarginRatio
4145
+ this.getUserAccountOrThrow().maxMarginRatio
4101
4146
  );
4102
4147
 
4103
4148
  if (netQuoteValue.lt(ZERO)) {
@@ -4205,7 +4250,9 @@ export class User {
4205
4250
 
4206
4251
  // Equivalent to on-chain user_custom_margin_ratio
4207
4252
  const userCustomMarginRatio =
4208
- marginCategory === 'Initial' ? this.getUserAccount().maxMarginRatio : 0;
4253
+ marginCategory === 'Initial'
4254
+ ? this.getUserAccountOrThrow().maxMarginRatio
4255
+ : 0;
4209
4256
 
4210
4257
  // Initialize calc via JS mirror of Rust/on-chain MarginCalculation
4211
4258
  const isolatedMarginBuffers = new Map<number, BN>();
@@ -4224,12 +4271,12 @@ export class User {
4224
4271
  const calc = new MarginCalculation(ctx);
4225
4272
 
4226
4273
  // SPOT POSITIONS
4227
- for (const spotPosition of this.getUserAccount().spotPositions) {
4274
+ for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
4228
4275
  if (isSpotPositionAvailable(spotPosition)) continue;
4229
4276
 
4230
4277
  const isQuote = spotPosition.marketIndex === QUOTE_SPOT_MARKET_INDEX;
4231
4278
 
4232
- const spotMarket = this.velocityClient.getSpotMarketAccount(
4279
+ const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
4233
4280
  spotPosition.marketIndex
4234
4281
  );
4235
4282
  const oraclePriceData = this.getOracleDataForSpotMarket(
@@ -4335,10 +4382,10 @@ export class User {
4335
4382
 
4336
4383
  // PERP POSITIONS
4337
4384
  for (const marketPosition of this.getActivePerpPositions()) {
4338
- const market = this.velocityClient.getPerpMarketAccount(
4385
+ const market = this.velocityClient.getPerpMarketAccountOrThrow(
4339
4386
  marketPosition.marketIndex
4340
4387
  );
4341
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
4388
+ const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
4342
4389
  market.quoteSpotMarketIndex
4343
4390
  );
4344
4391
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
@@ -4444,9 +4491,10 @@ export class User {
4444
4491
  // derive isolated quote deposit value, mirroring on-chain logic
4445
4492
  let depositValue = ZERO;
4446
4493
  if (marketPosition.isolatedPositionScaledBalance?.gt(ZERO)) {
4447
- const quoteSpotMarket = this.velocityClient.getSpotMarketAccount(
4448
- market.quoteSpotMarketIndex
4449
- );
4494
+ const quoteSpotMarket =
4495
+ this.velocityClient.getSpotMarketAccountOrThrow(
4496
+ market.quoteSpotMarketIndex
4497
+ );
4450
4498
  const quoteOraclePriceData = this.getOracleDataForSpotMarket(
4451
4499
  market.quoteSpotMarketIndex
4452
4500
  );