@drift-labs/sdk 2.97.0-beta.21 → 2.97.0-beta.23

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 (738) hide show
  1. package/VERSION +1 -1
  2. package/bun.lockb +0 -0
  3. package/lib/{accounts → browser/accounts}/bulkAccountLoader.d.ts +1 -0
  4. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +16 -0
  5. package/lib/browser/accounts/grpcAccountSubscriber.js +154 -0
  6. package/lib/browser/accounts/grpcDriftClientAccountSubscriber.d.ts +12 -0
  7. package/lib/browser/accounts/grpcDriftClientAccountSubscriber.js +97 -0
  8. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +10 -0
  9. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.js +30 -0
  10. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +18 -0
  11. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +171 -0
  12. package/lib/browser/accounts/grpcUserAccountSubscriber.d.ts +10 -0
  13. package/lib/browser/accounts/grpcUserAccountSubscriber.js +28 -0
  14. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.d.ts +10 -0
  15. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.js +28 -0
  16. package/lib/{accounts → browser/accounts}/types.d.ts +8 -0
  17. package/lib/{accounts → browser/accounts}/webSocketAccountSubscriber.d.ts +2 -1
  18. package/lib/{accounts → browser/accounts}/webSocketDriftClientAccountSubscriber.d.ts +3 -3
  19. package/lib/{accounts → browser/accounts}/webSocketProgramAccountSubscriber.d.ts +2 -1
  20. package/lib/{addresses → browser/addresses}/pda.d.ts +1 -0
  21. package/lib/{addresses → browser/addresses}/pda.js +8 -1
  22. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +15 -0
  23. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +32 -0
  24. package/lib/{auctionSubscriber → browser/auctionSubscriber}/index.d.ts +1 -0
  25. package/lib/browser/auctionSubscriber/index.js +19 -0
  26. package/lib/{auctionSubscriber → browser/auctionSubscriber}/types.d.ts +2 -0
  27. package/lib/{bankrun → browser/bankrun}/bankrunConnection.d.ts +1 -0
  28. package/lib/{decode → browser/decode}/phoenix.d.ts +1 -0
  29. package/lib/{decode → browser/decode}/user.d.ts +1 -0
  30. package/lib/{dlob → browser/dlob}/DLOBOrders.d.ts +1 -0
  31. package/lib/{driftClient.d.ts → browser/driftClient.d.ts} +11 -5
  32. package/lib/{driftClient.js → browser/driftClient.js} +132 -34
  33. package/lib/{driftClientConfig.d.ts → browser/driftClientConfig.d.ts} +6 -1
  34. package/lib/{idl → browser/idl}/drift.json +256 -0
  35. package/lib/browser/isomorphic/grpc.browser.d.ts +1 -0
  36. package/lib/browser/isomorphic/grpc.browser.js +8 -0
  37. package/lib/browser/isomorphic/grpc.d.ts +1 -0
  38. package/lib/browser/isomorphic/grpc.js +8 -0
  39. package/lib/browser/isomorphic/grpc.node.d.ts +5 -0
  40. package/lib/{math → browser/math}/oracles.d.ts +1 -0
  41. package/lib/{oracles → browser/oracles}/prelaunchOracleClient.d.ts +1 -0
  42. package/lib/{oracles → browser/oracles}/pythClient.d.ts +1 -0
  43. package/lib/{oracles → browser/oracles}/pythPullClient.d.ts +1 -0
  44. package/lib/{oracles → browser/oracles}/quoteAssetOracleClient.d.ts +1 -0
  45. package/lib/{oracles → browser/oracles}/switchboardClient.d.ts +1 -0
  46. package/lib/{oracles → browser/oracles}/switchboardOnDemandClient.d.ts +1 -0
  47. package/lib/{oracles → browser/oracles}/types.d.ts +1 -0
  48. package/lib/{orderSubscriber → browser/orderSubscriber}/OrderSubscriber.d.ts +3 -1
  49. package/lib/{orderSubscriber → browser/orderSubscriber}/OrderSubscriber.js +18 -4
  50. package/lib/browser/orderSubscriber/grpcSubscription.d.ts +22 -0
  51. package/lib/browser/orderSubscriber/grpcSubscription.js +66 -0
  52. package/lib/{orderSubscriber → browser/orderSubscriber}/types.d.ts +9 -0
  53. package/lib/{token → browser/token}/index.d.ts +1 -0
  54. package/lib/{tx → browser/tx}/baseTxSender.d.ts +1 -0
  55. package/lib/{tx → browser/tx}/fastSingleTxSender.d.ts +1 -0
  56. package/lib/{tx → browser/tx}/forwardOnlyTxSender.d.ts +1 -0
  57. package/lib/{tx → browser/tx}/retryTxSender.d.ts +1 -0
  58. package/lib/{tx → browser/tx}/types.d.ts +1 -0
  59. package/lib/{tx → browser/tx}/whileValidTxSender.d.ts +1 -0
  60. package/lib/{types.d.ts → browser/types.d.ts} +20 -0
  61. package/lib/{user.js → browser/user.js} +11 -4
  62. package/lib/{userConfig.d.ts → browser/userConfig.d.ts} +6 -1
  63. package/lib/{userMap → browser/userMap}/WebsocketSubscription.d.ts +1 -0
  64. package/lib/browser/userMap/grpcSubscription.d.ts +24 -0
  65. package/lib/browser/userMap/grpcSubscription.js +40 -0
  66. package/lib/{userMap → browser/userMap}/userMap.js +17 -1
  67. package/lib/{userMap → browser/userMap}/userMapConfig.d.ts +6 -0
  68. package/lib/{userStats.js → browser/userStats.js} +11 -4
  69. package/lib/{userStatsConfig.d.ts → browser/userStatsConfig.d.ts} +6 -0
  70. package/lib/node/accounts/basicUserAccountSubscriber.d.ts +27 -0
  71. package/lib/node/accounts/basicUserAccountSubscriber.js +38 -0
  72. package/lib/node/accounts/bulkAccountLoader.d.ts +37 -0
  73. package/lib/node/accounts/bulkAccountLoader.js +222 -0
  74. package/lib/node/accounts/bulkUserStatsSubscription.d.ts +7 -0
  75. package/lib/node/accounts/bulkUserStatsSubscription.js +21 -0
  76. package/lib/node/accounts/bulkUserSubscription.d.ts +7 -0
  77. package/lib/node/accounts/bulkUserSubscription.js +21 -0
  78. package/lib/node/accounts/fetch.d.ts +6 -0
  79. package/lib/node/accounts/fetch.js +30 -0
  80. package/lib/node/accounts/grpcAccountSubscriber.d.ts +16 -0
  81. package/lib/node/accounts/grpcAccountSubscriber.js +154 -0
  82. package/lib/node/accounts/grpcDriftClientAccountSubscriber.d.ts +12 -0
  83. package/lib/node/accounts/grpcDriftClientAccountSubscriber.js +97 -0
  84. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +10 -0
  85. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.js +30 -0
  86. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +18 -0
  87. package/lib/node/accounts/grpcProgramAccountSubscriber.js +171 -0
  88. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts +10 -0
  89. package/lib/node/accounts/grpcUserAccountSubscriber.js +28 -0
  90. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts +10 -0
  91. package/lib/node/accounts/grpcUserStatsAccountSubscriber.js +28 -0
  92. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts +18 -0
  93. package/lib/node/accounts/oneShotUserAccountSubscriber.js +48 -0
  94. package/lib/node/accounts/pollingDriftClientAccountSubscriber.d.ts +69 -0
  95. package/lib/node/accounts/pollingDriftClientAccountSubscriber.js +415 -0
  96. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +29 -0
  97. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +110 -0
  98. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +27 -0
  99. package/lib/node/accounts/pollingOracleAccountSubscriber.js +78 -0
  100. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +26 -0
  101. package/lib/node/accounts/pollingTokenAccountSubscriber.js +78 -0
  102. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +29 -0
  103. package/lib/node/accounts/pollingUserAccountSubscriber.js +102 -0
  104. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +27 -0
  105. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +94 -0
  106. package/lib/node/accounts/testBulkAccountLoader.d.ts +4 -0
  107. package/lib/node/accounts/testBulkAccountLoader.js +45 -0
  108. package/lib/node/accounts/types.d.ts +155 -0
  109. package/lib/node/accounts/types.js +16 -0
  110. package/lib/node/accounts/utils.d.ts +8 -0
  111. package/lib/node/accounts/utils.js +39 -0
  112. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +29 -0
  113. package/lib/node/accounts/webSocketAccountSubscriber.js +149 -0
  114. package/lib/node/accounts/webSocketDriftClientAccountSubscriber.d.ts +66 -0
  115. package/lib/node/accounts/webSocketDriftClientAccountSubscriber.js +352 -0
  116. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +23 -0
  117. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +67 -0
  118. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +34 -0
  119. package/lib/node/accounts/webSocketProgramAccountSubscriber.js +127 -0
  120. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +23 -0
  121. package/lib/node/accounts/webSocketUserAccountSubscriber.js +61 -0
  122. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +22 -0
  123. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +52 -0
  124. package/lib/node/addresses/marketAddresses.d.ts +2 -0
  125. package/lib/node/addresses/marketAddresses.js +15 -0
  126. package/lib/node/addresses/pda.d.ts +30 -0
  127. package/lib/node/addresses/pda.js +193 -0
  128. package/lib/node/adminClient.d.ts +202 -0
  129. package/lib/node/adminClient.js +1826 -0
  130. package/lib/node/assert/assert.d.ts +1 -0
  131. package/lib/node/assert/assert.js +9 -0
  132. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +14 -0
  133. package/lib/node/auctionSubscriber/auctionSubscriber.js +32 -0
  134. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +15 -0
  135. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +32 -0
  136. package/lib/node/auctionSubscriber/index.d.ts +3 -0
  137. package/lib/node/auctionSubscriber/index.js +19 -0
  138. package/lib/node/auctionSubscriber/types.d.ts +14 -0
  139. package/lib/node/auctionSubscriber/types.js +2 -0
  140. package/lib/node/bankrun/bankrunConnection.d.ts +74 -0
  141. package/lib/node/bankrun/bankrunConnection.js +318 -0
  142. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +27 -0
  143. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +89 -0
  144. package/lib/node/blockhashSubscriber/index.d.ts +1 -0
  145. package/lib/node/blockhashSubscriber/index.js +17 -0
  146. package/lib/node/blockhashSubscriber/types.d.ts +7 -0
  147. package/lib/node/blockhashSubscriber/types.js +2 -0
  148. package/lib/node/clock/clockSubscriber.d.ts +31 -0
  149. package/lib/node/clock/clockSubscriber.js +80 -0
  150. package/lib/node/config.d.ts +58 -0
  151. package/lib/node/config.js +126 -0
  152. package/lib/node/constants/numericConstants.d.ts +71 -0
  153. package/lib/node/constants/numericConstants.js +75 -0
  154. package/lib/node/constants/perpMarkets.d.ts +19 -0
  155. package/lib/node/constants/perpMarkets.js +868 -0
  156. package/lib/node/constants/spotMarkets.d.ts +23 -0
  157. package/lib/node/constants/spotMarkets.js +361 -0
  158. package/lib/node/constants/txConstants.d.ts +1 -0
  159. package/lib/node/constants/txConstants.js +4 -0
  160. package/lib/node/decode/phoenix.d.ts +7 -0
  161. package/lib/node/decode/phoenix.js +159 -0
  162. package/lib/node/decode/user.d.ts +4 -0
  163. package/lib/node/decode/user.js +339 -0
  164. package/lib/node/dlob/DLOB.d.ts +166 -0
  165. package/lib/node/dlob/DLOB.js +1142 -0
  166. package/lib/node/dlob/DLOBApiClient.d.ts +14 -0
  167. package/lib/node/dlob/DLOBApiClient.js +34 -0
  168. package/lib/node/dlob/DLOBNode.d.ts +57 -0
  169. package/lib/node/dlob/DLOBNode.js +86 -0
  170. package/lib/node/dlob/DLOBOrders.d.ts +17 -0
  171. package/lib/node/dlob/DLOBOrders.js +40 -0
  172. package/lib/node/dlob/DLOBSubscriber.d.ts +54 -0
  173. package/lib/node/dlob/DLOBSubscriber.js +139 -0
  174. package/lib/node/dlob/NodeList.d.ts +27 -0
  175. package/lib/node/dlob/NodeList.js +141 -0
  176. package/lib/node/dlob/dlobIdl.json +248 -0
  177. package/lib/node/dlob/orderBookLevels.d.ts +72 -0
  178. package/lib/node/dlob/orderBookLevels.js +438 -0
  179. package/lib/node/dlob/types.d.ts +18 -0
  180. package/lib/node/dlob/types.js +2 -0
  181. package/lib/node/driftClient.d.ts +820 -0
  182. package/lib/node/driftClient.js +4487 -0
  183. package/lib/node/driftClientConfig.d.ts +49 -0
  184. package/lib/node/driftClientConfig.js +2 -0
  185. package/lib/node/events/eventList.d.ts +22 -0
  186. package/lib/node/events/eventList.js +80 -0
  187. package/lib/node/events/eventSubscriber.d.ts +46 -0
  188. package/lib/node/events/eventSubscriber.js +223 -0
  189. package/lib/node/events/eventsServerLogProvider.d.ts +21 -0
  190. package/lib/node/events/eventsServerLogProvider.js +121 -0
  191. package/lib/node/events/fetchLogs.d.ts +25 -0
  192. package/lib/node/events/fetchLogs.js +99 -0
  193. package/lib/node/events/parse.d.ts +6 -0
  194. package/lib/node/events/parse.js +106 -0
  195. package/lib/node/events/pollingLogProvider.d.ts +17 -0
  196. package/lib/node/events/pollingLogProvider.js +58 -0
  197. package/lib/node/events/sort.d.ts +2 -0
  198. package/lib/node/events/sort.js +24 -0
  199. package/lib/node/events/txEventCache.d.ts +24 -0
  200. package/lib/node/events/txEventCache.js +71 -0
  201. package/lib/node/events/types.d.ts +77 -0
  202. package/lib/node/events/types.js +30 -0
  203. package/lib/node/events/webSocketLogProvider.d.ts +24 -0
  204. package/lib/node/events/webSocketLogProvider.js +96 -0
  205. package/lib/node/factory/bigNum.d.ts +122 -0
  206. package/lib/node/factory/bigNum.js +457 -0
  207. package/lib/node/factory/oracleClient.d.ts +5 -0
  208. package/lib/node/factory/oracleClient.js +52 -0
  209. package/lib/node/idl/drift.json +13651 -0
  210. package/lib/node/idl/openbook.json +3854 -0
  211. package/lib/node/idl/pyth_solana_receiver.json +628 -0
  212. package/lib/node/idl/switchboard.json +8354 -0
  213. package/lib/node/idl/switchboard_on_demand_30.json +4541 -0
  214. package/lib/node/idl/token_faucet.json +142 -0
  215. package/lib/node/index.d.ts +112 -0
  216. package/lib/node/index.js +134 -0
  217. package/lib/node/isomorphic/grpc.browser.d.ts +1 -0
  218. package/lib/node/isomorphic/grpc.d.ts +1 -0
  219. package/lib/node/isomorphic/grpc.js +17 -0
  220. package/lib/node/isomorphic/grpc.node.d.ts +5 -0
  221. package/lib/node/isomorphic/grpc.node.js +17 -0
  222. package/lib/node/jupiter/jupiterClient.d.ts +296 -0
  223. package/lib/node/jupiter/jupiterClient.js +178 -0
  224. package/lib/node/keypair.d.ts +2 -0
  225. package/lib/node/keypair.js +28 -0
  226. package/lib/node/marinade/index.d.ts +12 -0
  227. package/lib/node/marinade/index.js +36 -0
  228. package/lib/node/marinade/types.d.ts +1963 -0
  229. package/lib/node/marinade/types.js +1965 -0
  230. package/lib/node/math/amm.d.ts +98 -0
  231. package/lib/node/math/amm.js +626 -0
  232. package/lib/node/math/auction.d.ts +23 -0
  233. package/lib/node/math/auction.js +127 -0
  234. package/lib/node/math/bankruptcy.d.ts +2 -0
  235. package/lib/node/math/bankruptcy.js +31 -0
  236. package/lib/node/math/conversion.d.ts +2 -0
  237. package/lib/node/math/conversion.js +11 -0
  238. package/lib/node/math/exchangeStatus.d.ts +6 -0
  239. package/lib/node/math/exchangeStatus.js +77 -0
  240. package/lib/node/math/fuel.d.ts +6 -0
  241. package/lib/node/math/fuel.js +55 -0
  242. package/lib/node/math/funding.d.ts +34 -0
  243. package/lib/node/math/funding.js +209 -0
  244. package/lib/node/math/insurance.d.ts +7 -0
  245. package/lib/node/math/insurance.js +73 -0
  246. package/lib/node/math/margin.d.ts +39 -0
  247. package/lib/node/math/margin.js +184 -0
  248. package/lib/node/math/market.d.ts +39 -0
  249. package/lib/node/math/market.js +163 -0
  250. package/lib/node/math/oracles.d.ts +14 -0
  251. package/lib/node/math/oracles.js +134 -0
  252. package/lib/node/math/orders.d.ts +23 -0
  253. package/lib/node/math/orders.js +216 -0
  254. package/lib/node/math/position.d.ts +54 -0
  255. package/lib/node/math/position.js +198 -0
  256. package/lib/node/math/repeg.d.ts +22 -0
  257. package/lib/node/math/repeg.js +164 -0
  258. package/lib/node/math/spotBalance.d.ts +83 -0
  259. package/lib/node/math/spotBalance.js +373 -0
  260. package/lib/node/math/spotMarket.d.ts +11 -0
  261. package/lib/node/math/spotMarket.js +49 -0
  262. package/lib/node/math/spotPosition.d.ts +19 -0
  263. package/lib/node/math/spotPosition.js +78 -0
  264. package/lib/node/math/state.d.ts +5 -0
  265. package/lib/node/math/state.js +30 -0
  266. package/lib/node/math/superStake.d.ts +167 -0
  267. package/lib/node/math/superStake.js +306 -0
  268. package/lib/node/math/tiers.d.ts +4 -0
  269. package/lib/node/math/tiers.js +52 -0
  270. package/lib/node/math/trade.d.ts +117 -0
  271. package/lib/node/math/trade.js +637 -0
  272. package/lib/node/math/utils.d.ts +23 -0
  273. package/lib/node/math/utils.js +112 -0
  274. package/lib/node/memcmp.d.ts +7 -0
  275. package/lib/node/memcmp.js +63 -0
  276. package/lib/node/openbook/openbookV2FulfillmentConfigMap.d.ts +10 -0
  277. package/lib/node/openbook/openbookV2FulfillmentConfigMap.js +17 -0
  278. package/lib/node/openbook/openbookV2Subscriber.d.ts +36 -0
  279. package/lib/node/openbook/openbookV2Subscriber.js +104 -0
  280. package/lib/node/oracles/oracleClientCache.d.ts +9 -0
  281. package/lib/node/oracles/oracleClientCache.js +19 -0
  282. package/lib/node/oracles/prelaunchOracleClient.d.ts +12 -0
  283. package/lib/node/oracles/prelaunchOracleClient.js +24 -0
  284. package/lib/node/oracles/pythClient.d.ts +15 -0
  285. package/lib/node/oracles/pythClient.js +52 -0
  286. package/lib/node/oracles/pythPullClient.d.ts +19 -0
  287. package/lib/node/oracles/pythPullClient.js +60 -0
  288. package/lib/node/oracles/quoteAssetOracleClient.d.ts +10 -0
  289. package/lib/node/oracles/quoteAssetOracleClient.js +21 -0
  290. package/lib/node/oracles/strictOraclePrice.d.ts +9 -0
  291. package/lib/node/oracles/strictOraclePrice.js +17 -0
  292. package/lib/node/oracles/switchboardClient.d.ts +12 -0
  293. package/lib/node/oracles/switchboardClient.js +40 -0
  294. package/lib/node/oracles/switchboardOnDemandClient.d.ts +12 -0
  295. package/lib/node/oracles/switchboardOnDemandClient.js +32 -0
  296. package/lib/node/oracles/types.d.ts +23 -0
  297. package/lib/node/oracles/types.js +2 -0
  298. package/lib/node/orderParams.d.ts +29 -0
  299. package/lib/node/orderParams.js +44 -0
  300. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +42 -0
  301. package/lib/node/orderSubscriber/OrderSubscriber.js +179 -0
  302. package/lib/node/orderSubscriber/PollingSubscription.d.ts +12 -0
  303. package/lib/node/orderSubscriber/PollingSubscription.js +23 -0
  304. package/lib/node/orderSubscriber/WebsocketSubscription.d.ts +23 -0
  305. package/lib/node/orderSubscriber/WebsocketSubscription.js +67 -0
  306. package/lib/node/orderSubscriber/grpcSubscription.d.ts +22 -0
  307. package/lib/node/orderSubscriber/grpcSubscription.js +66 -0
  308. package/lib/node/orderSubscriber/index.d.ts +2 -0
  309. package/lib/{auctionSubscriber → node/orderSubscriber}/index.js +1 -1
  310. package/lib/node/orderSubscriber/types.d.ts +34 -0
  311. package/lib/node/orderSubscriber/types.js +2 -0
  312. package/lib/node/phoenix/phoenixFulfillmentConfigMap.d.ts +10 -0
  313. package/lib/node/phoenix/phoenixFulfillmentConfigMap.js +17 -0
  314. package/lib/node/phoenix/phoenixSubscriber.d.ts +41 -0
  315. package/lib/node/phoenix/phoenixSubscriber.js +152 -0
  316. package/lib/node/priorityFee/averageOverSlotsStrategy.d.ts +5 -0
  317. package/lib/node/priorityFee/averageOverSlotsStrategy.js +16 -0
  318. package/lib/node/priorityFee/averageStrategy.d.ts +5 -0
  319. package/lib/node/priorityFee/averageStrategy.js +11 -0
  320. package/lib/node/priorityFee/driftPriorityFeeMethod.d.ts +13 -0
  321. package/lib/node/priorityFee/driftPriorityFeeMethod.js +26 -0
  322. package/lib/node/priorityFee/ewmaStrategy.d.ts +11 -0
  323. package/lib/node/priorityFee/ewmaStrategy.js +33 -0
  324. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts +20 -0
  325. package/lib/node/priorityFee/heliusPriorityFeeMethod.js +46 -0
  326. package/lib/node/priorityFee/index.d.ts +11 -0
  327. package/lib/node/priorityFee/index.js +27 -0
  328. package/lib/node/priorityFee/maxOverSlotsStrategy.d.ts +5 -0
  329. package/lib/node/priorityFee/maxOverSlotsStrategy.js +17 -0
  330. package/lib/node/priorityFee/maxStrategy.d.ts +7 -0
  331. package/lib/node/priorityFee/maxStrategy.js +9 -0
  332. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +46 -0
  333. package/lib/node/priorityFee/priorityFeeSubscriber.js +188 -0
  334. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts +48 -0
  335. package/lib/node/priorityFee/priorityFeeSubscriberMap.js +88 -0
  336. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +6 -0
  337. package/lib/node/priorityFee/solanaPriorityFeeMethod.js +21 -0
  338. package/lib/node/priorityFee/types.d.ts +31 -0
  339. package/lib/node/priorityFee/types.js +10 -0
  340. package/lib/node/serum/serumFulfillmentConfigMap.d.ts +10 -0
  341. package/lib/node/serum/serumFulfillmentConfigMap.js +17 -0
  342. package/lib/node/serum/serumSubscriber.d.ts +32 -0
  343. package/lib/node/serum/serumSubscriber.js +107 -0
  344. package/lib/node/serum/types.d.ts +13 -0
  345. package/lib/node/serum/types.js +2 -0
  346. package/lib/node/slot/SlotSubscriber.d.ts +27 -0
  347. package/lib/node/slot/SlotSubscriber.js +71 -0
  348. package/lib/node/testClient.d.ts +8 -0
  349. package/lib/node/testClient.js +23 -0
  350. package/lib/node/token/index.d.ts +5 -0
  351. package/lib/node/token/index.js +15 -0
  352. package/lib/node/tokenFaucet.d.ts +41 -0
  353. package/lib/node/tokenFaucet.js +188 -0
  354. package/lib/node/tx/baseTxSender.d.ts +55 -0
  355. package/lib/node/tx/baseTxSender.js +288 -0
  356. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.d.ts +8 -0
  357. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.js +13 -0
  358. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts +28 -0
  359. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.js +73 -0
  360. package/lib/node/tx/blockhashFetcher/types.d.ts +4 -0
  361. package/lib/node/tx/blockhashFetcher/types.js +2 -0
  362. package/lib/node/tx/fastSingleTxSender.d.ts +40 -0
  363. package/lib/node/tx/fastSingleTxSender.js +85 -0
  364. package/lib/node/tx/forwardOnlyTxSender.d.ts +36 -0
  365. package/lib/node/tx/forwardOnlyTxSender.js +91 -0
  366. package/lib/node/tx/priorityFeeCalculator.d.ts +44 -0
  367. package/lib/node/tx/priorityFeeCalculator.js +85 -0
  368. package/lib/node/tx/reportTransactionError.d.ts +20 -0
  369. package/lib/node/tx/reportTransactionError.js +103 -0
  370. package/lib/node/tx/retryTxSender.d.ts +36 -0
  371. package/lib/node/tx/retryTxSender.js +85 -0
  372. package/lib/node/tx/txHandler.d.ts +154 -0
  373. package/lib/node/tx/txHandler.js +453 -0
  374. package/lib/node/tx/txParamProcessor.d.ts +25 -0
  375. package/lib/node/tx/txParamProcessor.js +88 -0
  376. package/lib/node/tx/types.d.ts +29 -0
  377. package/lib/node/tx/types.js +20 -0
  378. package/lib/node/tx/utils.d.ts +2 -0
  379. package/lib/node/tx/utils.js +10 -0
  380. package/lib/node/tx/whileValidTxSender.d.ts +43 -0
  381. package/lib/node/tx/whileValidTxSender.js +165 -0
  382. package/lib/node/types.d.ts +1351 -0
  383. package/lib/node/types.js +347 -0
  384. package/lib/node/user.d.ts +411 -0
  385. package/lib/node/user.js +2161 -0
  386. package/lib/node/userConfig.d.ts +26 -0
  387. package/lib/node/userConfig.js +2 -0
  388. package/lib/node/userMap/PollingSubscription.d.ts +16 -0
  389. package/lib/node/userMap/PollingSubscription.js +30 -0
  390. package/lib/node/userMap/WebsocketSubscription.d.ts +25 -0
  391. package/lib/node/userMap/WebsocketSubscription.js +41 -0
  392. package/lib/node/userMap/grpcSubscription.d.ts +24 -0
  393. package/lib/node/userMap/grpcSubscription.js +40 -0
  394. package/lib/node/userMap/userMap.d.ts +88 -0
  395. package/lib/node/userMap/userMap.js +455 -0
  396. package/lib/node/userMap/userMapConfig.d.ts +37 -0
  397. package/lib/node/userMap/userMapConfig.js +2 -0
  398. package/lib/node/userMap/userStatsMap.d.ts +46 -0
  399. package/lib/node/userMap/userStatsMap.js +165 -0
  400. package/lib/node/userName.d.ts +5 -0
  401. package/lib/node/userName.js +21 -0
  402. package/lib/node/userStats.d.ts +19 -0
  403. package/lib/node/userStats.js +65 -0
  404. package/lib/node/userStatsConfig.d.ts +25 -0
  405. package/lib/node/userStatsConfig.js +2 -0
  406. package/lib/node/util/TransactionConfirmationManager.d.ts +16 -0
  407. package/lib/node/util/TransactionConfirmationManager.js +174 -0
  408. package/lib/node/util/chainClock.d.ts +17 -0
  409. package/lib/node/util/chainClock.js +29 -0
  410. package/lib/node/util/computeUnits.d.ts +8 -0
  411. package/lib/node/util/computeUnits.js +46 -0
  412. package/lib/node/util/promiseTimeout.d.ts +1 -0
  413. package/lib/node/util/promiseTimeout.js +14 -0
  414. package/lib/node/util/pythPullOracleUtils.d.ts +2 -0
  415. package/lib/node/util/pythPullOracleUtils.js +15 -0
  416. package/lib/node/util/tps.d.ts +2 -0
  417. package/lib/node/util/tps.js +16 -0
  418. package/lib/node/wallet.d.ts +11 -0
  419. package/lib/node/wallet.js +32 -0
  420. package/package.json +8 -4
  421. package/scripts/postbuild.js +61 -0
  422. package/src/accounts/grpcAccountSubscriber.ts +160 -0
  423. package/src/accounts/grpcDriftClientAccountSubscriber.ts +197 -0
  424. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +56 -0
  425. package/src/accounts/grpcProgramAccountSubscriber.ts +190 -0
  426. package/src/accounts/grpcUserAccountSubscriber.ts +48 -0
  427. package/src/accounts/grpcUserStatsAccountSubscriber.ts +50 -0
  428. package/src/accounts/types.ts +8 -0
  429. package/src/accounts/webSocketAccountSubscriber.ts +1 -1
  430. package/src/accounts/webSocketDriftClientAccountSubscriber.ts +3 -3
  431. package/src/accounts/webSocketProgramAccountSubscriber.ts +1 -1
  432. package/src/addresses/pda.ts +13 -0
  433. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +70 -0
  434. package/src/auctionSubscriber/index.ts +1 -0
  435. package/src/auctionSubscriber/types.ts +2 -0
  436. package/src/driftClient.ts +175 -24
  437. package/src/driftClientConfig.ts +7 -1
  438. package/src/idl/drift.json +256 -0
  439. package/src/isomorphic/README.md +19 -0
  440. package/src/isomorphic/grpc.browser.ts +4 -0
  441. package/src/isomorphic/grpc.node.ts +23 -0
  442. package/src/isomorphic/grpc.ts +1 -0
  443. package/src/orderSubscriber/OrderSubscriber.ts +14 -1
  444. package/src/orderSubscriber/grpcSubscription.ts +121 -0
  445. package/src/orderSubscriber/types.ts +10 -0
  446. package/src/types.ts +23 -0
  447. package/src/user.ts +11 -0
  448. package/src/userConfig.ts +7 -1
  449. package/src/userMap/grpcSubscription.ts +78 -0
  450. package/src/userMap/userMap.ts +21 -2
  451. package/src/userMap/userMapConfig.ts +7 -0
  452. package/src/userStats.ts +11 -0
  453. package/src/userStatsConfig.ts +7 -0
  454. package/tsconfig.browser.json +13 -0
  455. package/tsconfig.json +1 -1
  456. /package/lib/{accounts → browser/accounts}/basicUserAccountSubscriber.d.ts +0 -0
  457. /package/lib/{accounts → browser/accounts}/basicUserAccountSubscriber.js +0 -0
  458. /package/lib/{accounts → browser/accounts}/bulkAccountLoader.js +0 -0
  459. /package/lib/{accounts → browser/accounts}/bulkUserStatsSubscription.d.ts +0 -0
  460. /package/lib/{accounts → browser/accounts}/bulkUserStatsSubscription.js +0 -0
  461. /package/lib/{accounts → browser/accounts}/bulkUserSubscription.d.ts +0 -0
  462. /package/lib/{accounts → browser/accounts}/bulkUserSubscription.js +0 -0
  463. /package/lib/{accounts → browser/accounts}/fetch.d.ts +0 -0
  464. /package/lib/{accounts → browser/accounts}/fetch.js +0 -0
  465. /package/lib/{accounts → browser/accounts}/oneShotUserAccountSubscriber.d.ts +0 -0
  466. /package/lib/{accounts → browser/accounts}/oneShotUserAccountSubscriber.js +0 -0
  467. /package/lib/{accounts → browser/accounts}/pollingDriftClientAccountSubscriber.d.ts +0 -0
  468. /package/lib/{accounts → browser/accounts}/pollingDriftClientAccountSubscriber.js +0 -0
  469. /package/lib/{accounts → browser/accounts}/pollingInsuranceFundStakeAccountSubscriber.d.ts +0 -0
  470. /package/lib/{accounts → browser/accounts}/pollingInsuranceFundStakeAccountSubscriber.js +0 -0
  471. /package/lib/{accounts → browser/accounts}/pollingOracleAccountSubscriber.d.ts +0 -0
  472. /package/lib/{accounts → browser/accounts}/pollingOracleAccountSubscriber.js +0 -0
  473. /package/lib/{accounts → browser/accounts}/pollingTokenAccountSubscriber.d.ts +0 -0
  474. /package/lib/{accounts → browser/accounts}/pollingTokenAccountSubscriber.js +0 -0
  475. /package/lib/{accounts → browser/accounts}/pollingUserAccountSubscriber.d.ts +0 -0
  476. /package/lib/{accounts → browser/accounts}/pollingUserAccountSubscriber.js +0 -0
  477. /package/lib/{accounts → browser/accounts}/pollingUserStatsAccountSubscriber.d.ts +0 -0
  478. /package/lib/{accounts → browser/accounts}/pollingUserStatsAccountSubscriber.js +0 -0
  479. /package/lib/{accounts → browser/accounts}/testBulkAccountLoader.d.ts +0 -0
  480. /package/lib/{accounts → browser/accounts}/testBulkAccountLoader.js +0 -0
  481. /package/lib/{accounts → browser/accounts}/types.js +0 -0
  482. /package/lib/{accounts → browser/accounts}/utils.d.ts +0 -0
  483. /package/lib/{accounts → browser/accounts}/utils.js +0 -0
  484. /package/lib/{accounts → browser/accounts}/webSocketAccountSubscriber.js +0 -0
  485. /package/lib/{accounts → browser/accounts}/webSocketDriftClientAccountSubscriber.js +0 -0
  486. /package/lib/{accounts → browser/accounts}/webSocketInsuranceFundStakeAccountSubscriber.d.ts +0 -0
  487. /package/lib/{accounts → browser/accounts}/webSocketInsuranceFundStakeAccountSubscriber.js +0 -0
  488. /package/lib/{accounts → browser/accounts}/webSocketProgramAccountSubscriber.js +0 -0
  489. /package/lib/{accounts → browser/accounts}/webSocketUserAccountSubscriber.d.ts +0 -0
  490. /package/lib/{accounts → browser/accounts}/webSocketUserAccountSubscriber.js +0 -0
  491. /package/lib/{accounts → browser/accounts}/webSocketUserStatsAccountSubsriber.d.ts +0 -0
  492. /package/lib/{accounts → browser/accounts}/webSocketUserStatsAccountSubsriber.js +0 -0
  493. /package/lib/{addresses → browser/addresses}/marketAddresses.d.ts +0 -0
  494. /package/lib/{addresses → browser/addresses}/marketAddresses.js +0 -0
  495. /package/lib/{adminClient.d.ts → browser/adminClient.d.ts} +0 -0
  496. /package/lib/{adminClient.js → browser/adminClient.js} +0 -0
  497. /package/lib/{assert → browser/assert}/assert.d.ts +0 -0
  498. /package/lib/{assert → browser/assert}/assert.js +0 -0
  499. /package/lib/{auctionSubscriber → browser/auctionSubscriber}/auctionSubscriber.d.ts +0 -0
  500. /package/lib/{auctionSubscriber → browser/auctionSubscriber}/auctionSubscriber.js +0 -0
  501. /package/lib/{auctionSubscriber → browser/auctionSubscriber}/types.js +0 -0
  502. /package/lib/{bankrun → browser/bankrun}/bankrunConnection.js +0 -0
  503. /package/lib/{blockhashSubscriber → browser/blockhashSubscriber}/BlockhashSubscriber.d.ts +0 -0
  504. /package/lib/{blockhashSubscriber → browser/blockhashSubscriber}/BlockhashSubscriber.js +0 -0
  505. /package/lib/{blockhashSubscriber → browser/blockhashSubscriber}/index.d.ts +0 -0
  506. /package/lib/{blockhashSubscriber → browser/blockhashSubscriber}/index.js +0 -0
  507. /package/lib/{blockhashSubscriber → browser/blockhashSubscriber}/types.d.ts +0 -0
  508. /package/lib/{blockhashSubscriber → browser/blockhashSubscriber}/types.js +0 -0
  509. /package/lib/{clock → browser/clock}/clockSubscriber.d.ts +0 -0
  510. /package/lib/{clock → browser/clock}/clockSubscriber.js +0 -0
  511. /package/lib/{config.d.ts → browser/config.d.ts} +0 -0
  512. /package/lib/{config.js → browser/config.js} +0 -0
  513. /package/lib/{constants → browser/constants}/numericConstants.d.ts +0 -0
  514. /package/lib/{constants → browser/constants}/numericConstants.js +0 -0
  515. /package/lib/{constants → browser/constants}/perpMarkets.d.ts +0 -0
  516. /package/lib/{constants → browser/constants}/perpMarkets.js +0 -0
  517. /package/lib/{constants → browser/constants}/spotMarkets.d.ts +0 -0
  518. /package/lib/{constants → browser/constants}/spotMarkets.js +0 -0
  519. /package/lib/{constants → browser/constants}/txConstants.d.ts +0 -0
  520. /package/lib/{constants → browser/constants}/txConstants.js +0 -0
  521. /package/lib/{decode → browser/decode}/phoenix.js +0 -0
  522. /package/lib/{decode → browser/decode}/user.js +0 -0
  523. /package/lib/{dlob → browser/dlob}/DLOB.d.ts +0 -0
  524. /package/lib/{dlob → browser/dlob}/DLOB.js +0 -0
  525. /package/lib/{dlob → browser/dlob}/DLOBApiClient.d.ts +0 -0
  526. /package/lib/{dlob → browser/dlob}/DLOBApiClient.js +0 -0
  527. /package/lib/{dlob → browser/dlob}/DLOBNode.d.ts +0 -0
  528. /package/lib/{dlob → browser/dlob}/DLOBNode.js +0 -0
  529. /package/lib/{dlob → browser/dlob}/DLOBOrders.js +0 -0
  530. /package/lib/{dlob → browser/dlob}/DLOBSubscriber.d.ts +0 -0
  531. /package/lib/{dlob → browser/dlob}/DLOBSubscriber.js +0 -0
  532. /package/lib/{dlob → browser/dlob}/NodeList.d.ts +0 -0
  533. /package/lib/{dlob → browser/dlob}/NodeList.js +0 -0
  534. /package/lib/{dlob → browser/dlob}/dlobIdl.json +0 -0
  535. /package/lib/{dlob → browser/dlob}/orderBookLevels.d.ts +0 -0
  536. /package/lib/{dlob → browser/dlob}/orderBookLevels.js +0 -0
  537. /package/lib/{dlob → browser/dlob}/types.d.ts +0 -0
  538. /package/lib/{dlob → browser/dlob}/types.js +0 -0
  539. /package/lib/{driftClientConfig.js → browser/driftClientConfig.js} +0 -0
  540. /package/lib/{events → browser/events}/eventList.d.ts +0 -0
  541. /package/lib/{events → browser/events}/eventList.js +0 -0
  542. /package/lib/{events → browser/events}/eventSubscriber.d.ts +0 -0
  543. /package/lib/{events → browser/events}/eventSubscriber.js +0 -0
  544. /package/lib/{events → browser/events}/eventsServerLogProvider.d.ts +0 -0
  545. /package/lib/{events → browser/events}/eventsServerLogProvider.js +0 -0
  546. /package/lib/{events → browser/events}/fetchLogs.d.ts +0 -0
  547. /package/lib/{events → browser/events}/fetchLogs.js +0 -0
  548. /package/lib/{events → browser/events}/parse.d.ts +0 -0
  549. /package/lib/{events → browser/events}/parse.js +0 -0
  550. /package/lib/{events → browser/events}/pollingLogProvider.d.ts +0 -0
  551. /package/lib/{events → browser/events}/pollingLogProvider.js +0 -0
  552. /package/lib/{events → browser/events}/sort.d.ts +0 -0
  553. /package/lib/{events → browser/events}/sort.js +0 -0
  554. /package/lib/{events → browser/events}/txEventCache.d.ts +0 -0
  555. /package/lib/{events → browser/events}/txEventCache.js +0 -0
  556. /package/lib/{events → browser/events}/types.d.ts +0 -0
  557. /package/lib/{events → browser/events}/types.js +0 -0
  558. /package/lib/{events → browser/events}/webSocketLogProvider.d.ts +0 -0
  559. /package/lib/{events → browser/events}/webSocketLogProvider.js +0 -0
  560. /package/lib/{factory → browser/factory}/bigNum.d.ts +0 -0
  561. /package/lib/{factory → browser/factory}/bigNum.js +0 -0
  562. /package/lib/{factory → browser/factory}/oracleClient.d.ts +0 -0
  563. /package/lib/{factory → browser/factory}/oracleClient.js +0 -0
  564. /package/lib/{idl → browser/idl}/openbook.json +0 -0
  565. /package/lib/{idl → browser/idl}/pyth_solana_receiver.json +0 -0
  566. /package/lib/{idl → browser/idl}/switchboard.json +0 -0
  567. /package/lib/{idl → browser/idl}/switchboard_on_demand_30.json +0 -0
  568. /package/lib/{idl → browser/idl}/token_faucet.json +0 -0
  569. /package/lib/{index.d.ts → browser/index.d.ts} +0 -0
  570. /package/lib/{index.js → browser/index.js} +0 -0
  571. /package/lib/{jupiter → browser/jupiter}/jupiterClient.d.ts +0 -0
  572. /package/lib/{jupiter → browser/jupiter}/jupiterClient.js +0 -0
  573. /package/lib/{keypair.d.ts → browser/keypair.d.ts} +0 -0
  574. /package/lib/{keypair.js → browser/keypair.js} +0 -0
  575. /package/lib/{marinade → browser/marinade}/index.d.ts +0 -0
  576. /package/lib/{marinade → browser/marinade}/index.js +0 -0
  577. /package/lib/{marinade → browser/marinade}/types.d.ts +0 -0
  578. /package/lib/{marinade → browser/marinade}/types.js +0 -0
  579. /package/lib/{math → browser/math}/amm.d.ts +0 -0
  580. /package/lib/{math → browser/math}/amm.js +0 -0
  581. /package/lib/{math → browser/math}/auction.d.ts +0 -0
  582. /package/lib/{math → browser/math}/auction.js +0 -0
  583. /package/lib/{math → browser/math}/bankruptcy.d.ts +0 -0
  584. /package/lib/{math → browser/math}/bankruptcy.js +0 -0
  585. /package/lib/{math → browser/math}/conversion.d.ts +0 -0
  586. /package/lib/{math → browser/math}/conversion.js +0 -0
  587. /package/lib/{math → browser/math}/exchangeStatus.d.ts +0 -0
  588. /package/lib/{math → browser/math}/exchangeStatus.js +0 -0
  589. /package/lib/{math → browser/math}/fuel.d.ts +0 -0
  590. /package/lib/{math → browser/math}/fuel.js +0 -0
  591. /package/lib/{math → browser/math}/funding.d.ts +0 -0
  592. /package/lib/{math → browser/math}/funding.js +0 -0
  593. /package/lib/{math → browser/math}/insurance.d.ts +0 -0
  594. /package/lib/{math → browser/math}/insurance.js +0 -0
  595. /package/lib/{math → browser/math}/margin.d.ts +0 -0
  596. /package/lib/{math → browser/math}/margin.js +0 -0
  597. /package/lib/{math → browser/math}/market.d.ts +0 -0
  598. /package/lib/{math → browser/math}/market.js +0 -0
  599. /package/lib/{math → browser/math}/oracles.js +0 -0
  600. /package/lib/{math → browser/math}/orders.d.ts +0 -0
  601. /package/lib/{math → browser/math}/orders.js +0 -0
  602. /package/lib/{math → browser/math}/position.d.ts +0 -0
  603. /package/lib/{math → browser/math}/position.js +0 -0
  604. /package/lib/{math → browser/math}/repeg.d.ts +0 -0
  605. /package/lib/{math → browser/math}/repeg.js +0 -0
  606. /package/lib/{math → browser/math}/spotBalance.d.ts +0 -0
  607. /package/lib/{math → browser/math}/spotBalance.js +0 -0
  608. /package/lib/{math → browser/math}/spotMarket.d.ts +0 -0
  609. /package/lib/{math → browser/math}/spotMarket.js +0 -0
  610. /package/lib/{math → browser/math}/spotPosition.d.ts +0 -0
  611. /package/lib/{math → browser/math}/spotPosition.js +0 -0
  612. /package/lib/{math → browser/math}/state.d.ts +0 -0
  613. /package/lib/{math → browser/math}/state.js +0 -0
  614. /package/lib/{math → browser/math}/superStake.d.ts +0 -0
  615. /package/lib/{math → browser/math}/superStake.js +0 -0
  616. /package/lib/{math → browser/math}/tiers.d.ts +0 -0
  617. /package/lib/{math → browser/math}/tiers.js +0 -0
  618. /package/lib/{math → browser/math}/trade.d.ts +0 -0
  619. /package/lib/{math → browser/math}/trade.js +0 -0
  620. /package/lib/{math → browser/math}/utils.d.ts +0 -0
  621. /package/lib/{math → browser/math}/utils.js +0 -0
  622. /package/lib/{memcmp.d.ts → browser/memcmp.d.ts} +0 -0
  623. /package/lib/{memcmp.js → browser/memcmp.js} +0 -0
  624. /package/lib/{openbook → browser/openbook}/openbookV2FulfillmentConfigMap.d.ts +0 -0
  625. /package/lib/{openbook → browser/openbook}/openbookV2FulfillmentConfigMap.js +0 -0
  626. /package/lib/{openbook → browser/openbook}/openbookV2Subscriber.d.ts +0 -0
  627. /package/lib/{openbook → browser/openbook}/openbookV2Subscriber.js +0 -0
  628. /package/lib/{oracles → browser/oracles}/oracleClientCache.d.ts +0 -0
  629. /package/lib/{oracles → browser/oracles}/oracleClientCache.js +0 -0
  630. /package/lib/{oracles → browser/oracles}/prelaunchOracleClient.js +0 -0
  631. /package/lib/{oracles → browser/oracles}/pythClient.js +0 -0
  632. /package/lib/{oracles → browser/oracles}/pythPullClient.js +0 -0
  633. /package/lib/{oracles → browser/oracles}/quoteAssetOracleClient.js +0 -0
  634. /package/lib/{oracles → browser/oracles}/strictOraclePrice.d.ts +0 -0
  635. /package/lib/{oracles → browser/oracles}/strictOraclePrice.js +0 -0
  636. /package/lib/{oracles → browser/oracles}/switchboardClient.js +0 -0
  637. /package/lib/{oracles → browser/oracles}/switchboardOnDemandClient.js +0 -0
  638. /package/lib/{oracles → browser/oracles}/types.js +0 -0
  639. /package/lib/{orderParams.d.ts → browser/orderParams.d.ts} +0 -0
  640. /package/lib/{orderParams.js → browser/orderParams.js} +0 -0
  641. /package/lib/{orderSubscriber → browser/orderSubscriber}/PollingSubscription.d.ts +0 -0
  642. /package/lib/{orderSubscriber → browser/orderSubscriber}/PollingSubscription.js +0 -0
  643. /package/lib/{orderSubscriber → browser/orderSubscriber}/WebsocketSubscription.d.ts +0 -0
  644. /package/lib/{orderSubscriber → browser/orderSubscriber}/WebsocketSubscription.js +0 -0
  645. /package/lib/{orderSubscriber → browser/orderSubscriber}/index.d.ts +0 -0
  646. /package/lib/{orderSubscriber → browser/orderSubscriber}/index.js +0 -0
  647. /package/lib/{orderSubscriber → browser/orderSubscriber}/types.js +0 -0
  648. /package/lib/{phoenix → browser/phoenix}/phoenixFulfillmentConfigMap.d.ts +0 -0
  649. /package/lib/{phoenix → browser/phoenix}/phoenixFulfillmentConfigMap.js +0 -0
  650. /package/lib/{phoenix → browser/phoenix}/phoenixSubscriber.d.ts +0 -0
  651. /package/lib/{phoenix → browser/phoenix}/phoenixSubscriber.js +0 -0
  652. /package/lib/{priorityFee → browser/priorityFee}/averageOverSlotsStrategy.d.ts +0 -0
  653. /package/lib/{priorityFee → browser/priorityFee}/averageOverSlotsStrategy.js +0 -0
  654. /package/lib/{priorityFee → browser/priorityFee}/averageStrategy.d.ts +0 -0
  655. /package/lib/{priorityFee → browser/priorityFee}/averageStrategy.js +0 -0
  656. /package/lib/{priorityFee → browser/priorityFee}/driftPriorityFeeMethod.d.ts +0 -0
  657. /package/lib/{priorityFee → browser/priorityFee}/driftPriorityFeeMethod.js +0 -0
  658. /package/lib/{priorityFee → browser/priorityFee}/ewmaStrategy.d.ts +0 -0
  659. /package/lib/{priorityFee → browser/priorityFee}/ewmaStrategy.js +0 -0
  660. /package/lib/{priorityFee → browser/priorityFee}/heliusPriorityFeeMethod.d.ts +0 -0
  661. /package/lib/{priorityFee → browser/priorityFee}/heliusPriorityFeeMethod.js +0 -0
  662. /package/lib/{priorityFee → browser/priorityFee}/index.d.ts +0 -0
  663. /package/lib/{priorityFee → browser/priorityFee}/index.js +0 -0
  664. /package/lib/{priorityFee → browser/priorityFee}/maxOverSlotsStrategy.d.ts +0 -0
  665. /package/lib/{priorityFee → browser/priorityFee}/maxOverSlotsStrategy.js +0 -0
  666. /package/lib/{priorityFee → browser/priorityFee}/maxStrategy.d.ts +0 -0
  667. /package/lib/{priorityFee → browser/priorityFee}/maxStrategy.js +0 -0
  668. /package/lib/{priorityFee → browser/priorityFee}/priorityFeeSubscriber.d.ts +0 -0
  669. /package/lib/{priorityFee → browser/priorityFee}/priorityFeeSubscriber.js +0 -0
  670. /package/lib/{priorityFee → browser/priorityFee}/priorityFeeSubscriberMap.d.ts +0 -0
  671. /package/lib/{priorityFee → browser/priorityFee}/priorityFeeSubscriberMap.js +0 -0
  672. /package/lib/{priorityFee → browser/priorityFee}/solanaPriorityFeeMethod.d.ts +0 -0
  673. /package/lib/{priorityFee → browser/priorityFee}/solanaPriorityFeeMethod.js +0 -0
  674. /package/lib/{priorityFee → browser/priorityFee}/types.d.ts +0 -0
  675. /package/lib/{priorityFee → browser/priorityFee}/types.js +0 -0
  676. /package/lib/{serum → browser/serum}/serumFulfillmentConfigMap.d.ts +0 -0
  677. /package/lib/{serum → browser/serum}/serumFulfillmentConfigMap.js +0 -0
  678. /package/lib/{serum → browser/serum}/serumSubscriber.d.ts +0 -0
  679. /package/lib/{serum → browser/serum}/serumSubscriber.js +0 -0
  680. /package/lib/{serum → browser/serum}/types.d.ts +0 -0
  681. /package/lib/{serum → browser/serum}/types.js +0 -0
  682. /package/lib/{slot → browser/slot}/SlotSubscriber.d.ts +0 -0
  683. /package/lib/{slot → browser/slot}/SlotSubscriber.js +0 -0
  684. /package/lib/{testClient.d.ts → browser/testClient.d.ts} +0 -0
  685. /package/lib/{testClient.js → browser/testClient.js} +0 -0
  686. /package/lib/{token → browser/token}/index.js +0 -0
  687. /package/lib/{tokenFaucet.d.ts → browser/tokenFaucet.d.ts} +0 -0
  688. /package/lib/{tokenFaucet.js → browser/tokenFaucet.js} +0 -0
  689. /package/lib/{tx → browser/tx}/baseTxSender.js +0 -0
  690. /package/lib/{tx → browser/tx}/blockhashFetcher/baseBlockhashFetcher.d.ts +0 -0
  691. /package/lib/{tx → browser/tx}/blockhashFetcher/baseBlockhashFetcher.js +0 -0
  692. /package/lib/{tx → browser/tx}/blockhashFetcher/cachedBlockhashFetcher.d.ts +0 -0
  693. /package/lib/{tx → browser/tx}/blockhashFetcher/cachedBlockhashFetcher.js +0 -0
  694. /package/lib/{tx → browser/tx}/blockhashFetcher/types.d.ts +0 -0
  695. /package/lib/{tx → browser/tx}/blockhashFetcher/types.js +0 -0
  696. /package/lib/{tx → browser/tx}/fastSingleTxSender.js +0 -0
  697. /package/lib/{tx → browser/tx}/forwardOnlyTxSender.js +0 -0
  698. /package/lib/{tx → browser/tx}/priorityFeeCalculator.d.ts +0 -0
  699. /package/lib/{tx → browser/tx}/priorityFeeCalculator.js +0 -0
  700. /package/lib/{tx → browser/tx}/reportTransactionError.d.ts +0 -0
  701. /package/lib/{tx → browser/tx}/reportTransactionError.js +0 -0
  702. /package/lib/{tx → browser/tx}/retryTxSender.js +0 -0
  703. /package/lib/{tx → browser/tx}/txHandler.d.ts +0 -0
  704. /package/lib/{tx → browser/tx}/txHandler.js +0 -0
  705. /package/lib/{tx → browser/tx}/txParamProcessor.d.ts +0 -0
  706. /package/lib/{tx → browser/tx}/txParamProcessor.js +0 -0
  707. /package/lib/{tx → browser/tx}/types.js +0 -0
  708. /package/lib/{tx → browser/tx}/utils.d.ts +0 -0
  709. /package/lib/{tx → browser/tx}/utils.js +0 -0
  710. /package/lib/{tx → browser/tx}/whileValidTxSender.js +0 -0
  711. /package/lib/{types.js → browser/types.js} +0 -0
  712. /package/lib/{user.d.ts → browser/user.d.ts} +0 -0
  713. /package/lib/{userConfig.js → browser/userConfig.js} +0 -0
  714. /package/lib/{userMap → browser/userMap}/PollingSubscription.d.ts +0 -0
  715. /package/lib/{userMap → browser/userMap}/PollingSubscription.js +0 -0
  716. /package/lib/{userMap → browser/userMap}/WebsocketSubscription.js +0 -0
  717. /package/lib/{userMap → browser/userMap}/userMap.d.ts +0 -0
  718. /package/lib/{userMap → browser/userMap}/userMapConfig.js +0 -0
  719. /package/lib/{userMap → browser/userMap}/userStatsMap.d.ts +0 -0
  720. /package/lib/{userMap → browser/userMap}/userStatsMap.js +0 -0
  721. /package/lib/{userName.d.ts → browser/userName.d.ts} +0 -0
  722. /package/lib/{userName.js → browser/userName.js} +0 -0
  723. /package/lib/{userStats.d.ts → browser/userStats.d.ts} +0 -0
  724. /package/lib/{userStatsConfig.js → browser/userStatsConfig.js} +0 -0
  725. /package/lib/{util → browser/util}/TransactionConfirmationManager.d.ts +0 -0
  726. /package/lib/{util → browser/util}/TransactionConfirmationManager.js +0 -0
  727. /package/lib/{util → browser/util}/chainClock.d.ts +0 -0
  728. /package/lib/{util → browser/util}/chainClock.js +0 -0
  729. /package/lib/{util → browser/util}/computeUnits.d.ts +0 -0
  730. /package/lib/{util → browser/util}/computeUnits.js +0 -0
  731. /package/lib/{util → browser/util}/promiseTimeout.d.ts +0 -0
  732. /package/lib/{util → browser/util}/promiseTimeout.js +0 -0
  733. /package/lib/{util → browser/util}/pythPullOracleUtils.d.ts +0 -0
  734. /package/lib/{util → browser/util}/pythPullOracleUtils.js +0 -0
  735. /package/lib/{util → browser/util}/tps.d.ts +0 -0
  736. /package/lib/{util → browser/util}/tps.js +0 -0
  737. /package/lib/{wallet.d.ts → browser/wallet.d.ts} +0 -0
  738. /package/lib/{wallet.js → browser/wallet.js} +0 -0
@@ -0,0 +1,83 @@
1
+ /// <reference types="bn.js" />
2
+ import { SpotMarketAccount, SpotBalanceType, MarginCategory } from '../types';
3
+ import { BN } from '@coral-xyz/anchor';
4
+ import { OraclePriceData } from '../oracles/types';
5
+ import { StrictOraclePrice } from '../oracles/strictOraclePrice';
6
+ /**
7
+ * Calculates the balance of a given token amount including any accumulated interest. This
8
+ * is the same as `SpotPosition.scaledBalance`.
9
+ *
10
+ * @param {BN} tokenAmount - the amount of tokens
11
+ * @param {SpotMarketAccount} spotMarket - the spot market account
12
+ * @param {SpotBalanceType} balanceType - the balance type ('deposit' or 'borrow')
13
+ * @return {BN} the calculated balance, scaled by `SPOT_MARKET_BALANCE_PRECISION`
14
+ */
15
+ export declare function getBalance(tokenAmount: BN, spotMarket: SpotMarketAccount, balanceType: SpotBalanceType): BN;
16
+ /**
17
+ * Calculates the spot token amount including any accumulated interest.
18
+ *
19
+ * @param {BN} balanceAmount - The balance amount, typically from `SpotPosition.scaledBalance`
20
+ * @param {SpotMarketAccount} spotMarket - The spot market account details
21
+ * @param {SpotBalanceType} balanceType - The balance type to be used for calculation
22
+ * @returns {BN} The calculated token amount, scaled by `SpotMarketConfig.precision`
23
+ */
24
+ export declare function getTokenAmount(balanceAmount: BN, spotMarket: SpotMarketAccount, balanceType: SpotBalanceType): BN;
25
+ /**
26
+ * Returns the signed (positive for deposit,negative for borrow) token amount based on the balance type.
27
+ *
28
+ * @param {BN} tokenAmount - The token amount to convert (from `getTokenAmount`)
29
+ * @param {SpotBalanceType} balanceType - The balance type to determine the sign of the token amount.
30
+ * @returns {BN} - The signed token amount, scaled by `SpotMarketConfig.precision`
31
+ */
32
+ export declare function getSignedTokenAmount(tokenAmount: BN, balanceType: SpotBalanceType): BN;
33
+ /**
34
+ * Calculates the value of a given token amount using the worst of the provided oracle price and its TWAP.
35
+ *
36
+ * @param {BN} tokenAmount - The amount of tokens to calculate the value for (from `getTokenAmount`)
37
+ * @param {number} spotDecimals - The number of decimals in the token.
38
+ * @param {StrictOraclePrice} strictOraclePrice - Contains oracle price and 5min twap.
39
+ * @return {BN} The calculated value of the given token amount, scaled by `PRICE_PRECISION`
40
+ */
41
+ export declare function getStrictTokenValue(tokenAmount: BN, spotDecimals: number, strictOraclePrice: StrictOraclePrice): BN;
42
+ /**
43
+ * Calculates the value of a given token amount in relation to an oracle price data
44
+ *
45
+ * @param {BN} tokenAmount - The amount of tokens to calculate the value for (from `getTokenAmount`)
46
+ * @param {number} spotDecimals - The number of decimal places of the token.
47
+ * @param {OraclePriceData} oraclePriceData - The oracle price data (typically a token/USD oracle).
48
+ * @return {BN} The value of the token based on the oracle, scaled by `PRICE_PRECISION`
49
+ */
50
+ export declare function getTokenValue(tokenAmount: BN, spotDecimals: number, oraclePriceData: Pick<OraclePriceData, 'price'>): BN;
51
+ export declare function calculateAssetWeight(balanceAmount: BN, oraclePrice: BN, spotMarket: SpotMarketAccount, marginCategory: MarginCategory): BN;
52
+ export declare function calculateScaledInitialAssetWeight(spotMarket: SpotMarketAccount, oraclePrice: BN): BN;
53
+ export declare function calculateLiabilityWeight(size: BN, spotMarket: SpotMarketAccount, marginCategory: MarginCategory): BN;
54
+ export declare function calculateUtilization(bank: SpotMarketAccount, delta?: BN): BN;
55
+ /**
56
+ * calculates max borrow amount where rate would stay below targetBorrowRate
57
+ * @param spotMarketAccount
58
+ * @param targetBorrowRate
59
+ * @returns : Precision: TOKEN DECIMALS
60
+ */
61
+ export declare function calculateSpotMarketBorrowCapacity(spotMarketAccount: SpotMarketAccount, targetBorrowRate: BN): {
62
+ totalCapacity: BN;
63
+ remainingCapacity: BN;
64
+ };
65
+ export declare function calculateInterestRate(bank: SpotMarketAccount, delta?: BN, currentUtilization?: BN): BN;
66
+ export declare function calculateDepositRate(bank: SpotMarketAccount, delta?: BN, currentUtilization?: BN): BN;
67
+ export declare function calculateBorrowRate(bank: SpotMarketAccount, delta?: BN, currentUtilization?: BN): BN;
68
+ export declare function calculateInterestAccumulated(bank: SpotMarketAccount, now: BN): {
69
+ borrowInterest: BN;
70
+ depositInterest: BN;
71
+ };
72
+ export declare function calculateTokenUtilizationLimits(depositTokenAmount: BN, borrowTokenAmount: BN, spotMarket: SpotMarketAccount): {
73
+ minDepositTokensForUtilization: BN;
74
+ maxBorrowTokensForUtilization: BN;
75
+ };
76
+ export declare function calculateWithdrawLimit(spotMarket: SpotMarketAccount, now: BN): {
77
+ borrowLimit: BN;
78
+ withdrawLimit: BN;
79
+ minDepositAmount: BN;
80
+ maxBorrowAmount: BN;
81
+ currentDepositAmount: any;
82
+ currentBorrowAmount: any;
83
+ };
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateWithdrawLimit = exports.calculateTokenUtilizationLimits = exports.calculateInterestAccumulated = exports.calculateBorrowRate = exports.calculateDepositRate = exports.calculateInterestRate = exports.calculateSpotMarketBorrowCapacity = exports.calculateUtilization = exports.calculateLiabilityWeight = exports.calculateScaledInitialAssetWeight = exports.calculateAssetWeight = exports.getTokenValue = exports.getStrictTokenValue = exports.getSignedTokenAmount = exports.getTokenAmount = exports.getBalance = void 0;
4
+ const types_1 = require("../types");
5
+ const anchor_1 = require("@coral-xyz/anchor");
6
+ const numericConstants_1 = require("../constants/numericConstants");
7
+ const margin_1 = require("./margin");
8
+ const numericConstants_2 = require("../constants/numericConstants");
9
+ const utils_1 = require("./utils");
10
+ /**
11
+ * Calculates the balance of a given token amount including any accumulated interest. This
12
+ * is the same as `SpotPosition.scaledBalance`.
13
+ *
14
+ * @param {BN} tokenAmount - the amount of tokens
15
+ * @param {SpotMarketAccount} spotMarket - the spot market account
16
+ * @param {SpotBalanceType} balanceType - the balance type ('deposit' or 'borrow')
17
+ * @return {BN} the calculated balance, scaled by `SPOT_MARKET_BALANCE_PRECISION`
18
+ */
19
+ function getBalance(tokenAmount, spotMarket, balanceType) {
20
+ const precisionIncrease = numericConstants_1.TEN.pow(new anchor_1.BN(19 - spotMarket.decimals));
21
+ const cumulativeInterest = (0, types_1.isVariant)(balanceType, 'deposit')
22
+ ? spotMarket.cumulativeDepositInterest
23
+ : spotMarket.cumulativeBorrowInterest;
24
+ let balance = tokenAmount.mul(precisionIncrease).div(cumulativeInterest);
25
+ if (!balance.eq(numericConstants_1.ZERO) && (0, types_1.isVariant)(balanceType, 'borrow')) {
26
+ balance = balance.add(numericConstants_1.ONE);
27
+ }
28
+ return balance;
29
+ }
30
+ exports.getBalance = getBalance;
31
+ /**
32
+ * Calculates the spot token amount including any accumulated interest.
33
+ *
34
+ * @param {BN} balanceAmount - The balance amount, typically from `SpotPosition.scaledBalance`
35
+ * @param {SpotMarketAccount} spotMarket - The spot market account details
36
+ * @param {SpotBalanceType} balanceType - The balance type to be used for calculation
37
+ * @returns {BN} The calculated token amount, scaled by `SpotMarketConfig.precision`
38
+ */
39
+ function getTokenAmount(balanceAmount, spotMarket, balanceType) {
40
+ const precisionDecrease = numericConstants_1.TEN.pow(new anchor_1.BN(19 - spotMarket.decimals));
41
+ if ((0, types_1.isVariant)(balanceType, 'deposit')) {
42
+ return balanceAmount
43
+ .mul(spotMarket.cumulativeDepositInterest)
44
+ .div(precisionDecrease);
45
+ }
46
+ else {
47
+ return (0, utils_1.divCeil)(balanceAmount.mul(spotMarket.cumulativeBorrowInterest), precisionDecrease);
48
+ }
49
+ }
50
+ exports.getTokenAmount = getTokenAmount;
51
+ /**
52
+ * Returns the signed (positive for deposit,negative for borrow) token amount based on the balance type.
53
+ *
54
+ * @param {BN} tokenAmount - The token amount to convert (from `getTokenAmount`)
55
+ * @param {SpotBalanceType} balanceType - The balance type to determine the sign of the token amount.
56
+ * @returns {BN} - The signed token amount, scaled by `SpotMarketConfig.precision`
57
+ */
58
+ function getSignedTokenAmount(tokenAmount, balanceType) {
59
+ if ((0, types_1.isVariant)(balanceType, 'deposit')) {
60
+ return tokenAmount;
61
+ }
62
+ else {
63
+ return tokenAmount.abs().neg();
64
+ }
65
+ }
66
+ exports.getSignedTokenAmount = getSignedTokenAmount;
67
+ /**
68
+ * Calculates the value of a given token amount using the worst of the provided oracle price and its TWAP.
69
+ *
70
+ * @param {BN} tokenAmount - The amount of tokens to calculate the value for (from `getTokenAmount`)
71
+ * @param {number} spotDecimals - The number of decimals in the token.
72
+ * @param {StrictOraclePrice} strictOraclePrice - Contains oracle price and 5min twap.
73
+ * @return {BN} The calculated value of the given token amount, scaled by `PRICE_PRECISION`
74
+ */
75
+ function getStrictTokenValue(tokenAmount, spotDecimals, strictOraclePrice) {
76
+ if (tokenAmount.eq(numericConstants_1.ZERO)) {
77
+ return numericConstants_1.ZERO;
78
+ }
79
+ let price;
80
+ if (tokenAmount.gte(numericConstants_1.ZERO)) {
81
+ price = strictOraclePrice.min();
82
+ }
83
+ else {
84
+ price = strictOraclePrice.max();
85
+ }
86
+ const precisionDecrease = numericConstants_1.TEN.pow(new anchor_1.BN(spotDecimals));
87
+ return tokenAmount.mul(price).div(precisionDecrease);
88
+ }
89
+ exports.getStrictTokenValue = getStrictTokenValue;
90
+ /**
91
+ * Calculates the value of a given token amount in relation to an oracle price data
92
+ *
93
+ * @param {BN} tokenAmount - The amount of tokens to calculate the value for (from `getTokenAmount`)
94
+ * @param {number} spotDecimals - The number of decimal places of the token.
95
+ * @param {OraclePriceData} oraclePriceData - The oracle price data (typically a token/USD oracle).
96
+ * @return {BN} The value of the token based on the oracle, scaled by `PRICE_PRECISION`
97
+ */
98
+ function getTokenValue(tokenAmount, spotDecimals, oraclePriceData) {
99
+ if (tokenAmount.eq(numericConstants_1.ZERO)) {
100
+ return numericConstants_1.ZERO;
101
+ }
102
+ const precisionDecrease = numericConstants_1.TEN.pow(new anchor_1.BN(spotDecimals));
103
+ return tokenAmount.mul(oraclePriceData.price).div(precisionDecrease);
104
+ }
105
+ exports.getTokenValue = getTokenValue;
106
+ function calculateAssetWeight(balanceAmount, oraclePrice, spotMarket, marginCategory) {
107
+ const sizePrecision = numericConstants_1.TEN.pow(new anchor_1.BN(spotMarket.decimals));
108
+ let sizeInAmmReservePrecision;
109
+ if (sizePrecision.gt(numericConstants_1.AMM_RESERVE_PRECISION)) {
110
+ sizeInAmmReservePrecision = balanceAmount.div(sizePrecision.div(numericConstants_1.AMM_RESERVE_PRECISION));
111
+ }
112
+ else {
113
+ sizeInAmmReservePrecision = balanceAmount
114
+ .mul(numericConstants_1.AMM_RESERVE_PRECISION)
115
+ .div(sizePrecision);
116
+ }
117
+ let assetWeight;
118
+ switch (marginCategory) {
119
+ case 'Initial':
120
+ assetWeight = (0, margin_1.calculateSizeDiscountAssetWeight)(sizeInAmmReservePrecision, new anchor_1.BN(spotMarket.imfFactor), calculateScaledInitialAssetWeight(spotMarket, oraclePrice));
121
+ break;
122
+ case 'Maintenance':
123
+ assetWeight = (0, margin_1.calculateSizeDiscountAssetWeight)(sizeInAmmReservePrecision, new anchor_1.BN(spotMarket.imfFactor), new anchor_1.BN(spotMarket.maintenanceAssetWeight));
124
+ break;
125
+ default:
126
+ assetWeight = calculateScaledInitialAssetWeight(spotMarket, oraclePrice);
127
+ break;
128
+ }
129
+ return assetWeight;
130
+ }
131
+ exports.calculateAssetWeight = calculateAssetWeight;
132
+ function calculateScaledInitialAssetWeight(spotMarket, oraclePrice) {
133
+ if (spotMarket.scaleInitialAssetWeightStart.eq(numericConstants_1.ZERO)) {
134
+ return new anchor_1.BN(spotMarket.initialAssetWeight);
135
+ }
136
+ const deposits = getTokenAmount(spotMarket.depositBalance, spotMarket, types_1.SpotBalanceType.DEPOSIT);
137
+ const depositsValue = getTokenValue(deposits, spotMarket.decimals, {
138
+ price: oraclePrice,
139
+ });
140
+ if (depositsValue.lt(spotMarket.scaleInitialAssetWeightStart)) {
141
+ return new anchor_1.BN(spotMarket.initialAssetWeight);
142
+ }
143
+ else {
144
+ return new anchor_1.BN(spotMarket.initialAssetWeight)
145
+ .mul(spotMarket.scaleInitialAssetWeightStart)
146
+ .div(depositsValue);
147
+ }
148
+ }
149
+ exports.calculateScaledInitialAssetWeight = calculateScaledInitialAssetWeight;
150
+ function calculateLiabilityWeight(size, spotMarket, marginCategory) {
151
+ const sizePrecision = numericConstants_1.TEN.pow(new anchor_1.BN(spotMarket.decimals));
152
+ let sizeInAmmReservePrecision;
153
+ if (sizePrecision.gt(numericConstants_1.AMM_RESERVE_PRECISION)) {
154
+ sizeInAmmReservePrecision = size.div(sizePrecision.div(numericConstants_1.AMM_RESERVE_PRECISION));
155
+ }
156
+ else {
157
+ sizeInAmmReservePrecision = size
158
+ .mul(numericConstants_1.AMM_RESERVE_PRECISION)
159
+ .div(sizePrecision);
160
+ }
161
+ let liabilityWeight;
162
+ switch (marginCategory) {
163
+ case 'Initial':
164
+ liabilityWeight = (0, margin_1.calculateSizePremiumLiabilityWeight)(sizeInAmmReservePrecision, new anchor_1.BN(spotMarket.imfFactor), new anchor_1.BN(spotMarket.initialLiabilityWeight), numericConstants_1.SPOT_MARKET_WEIGHT_PRECISION);
165
+ break;
166
+ case 'Maintenance':
167
+ liabilityWeight = (0, margin_1.calculateSizePremiumLiabilityWeight)(sizeInAmmReservePrecision, new anchor_1.BN(spotMarket.imfFactor), new anchor_1.BN(spotMarket.maintenanceLiabilityWeight), numericConstants_1.SPOT_MARKET_WEIGHT_PRECISION);
168
+ break;
169
+ default:
170
+ liabilityWeight = new anchor_1.BN(spotMarket.initialLiabilityWeight);
171
+ break;
172
+ }
173
+ return liabilityWeight;
174
+ }
175
+ exports.calculateLiabilityWeight = calculateLiabilityWeight;
176
+ function calculateUtilization(bank, delta = numericConstants_1.ZERO) {
177
+ let tokenDepositAmount = getTokenAmount(bank.depositBalance, bank, types_1.SpotBalanceType.DEPOSIT);
178
+ let tokenBorrowAmount = getTokenAmount(bank.borrowBalance, bank, types_1.SpotBalanceType.BORROW);
179
+ if (delta.gt(numericConstants_1.ZERO)) {
180
+ tokenDepositAmount = tokenDepositAmount.add(delta);
181
+ }
182
+ else if (delta.lt(numericConstants_1.ZERO)) {
183
+ tokenBorrowAmount = tokenBorrowAmount.add(delta.abs());
184
+ }
185
+ let utilization;
186
+ if (tokenBorrowAmount.eq(numericConstants_1.ZERO) && tokenDepositAmount.eq(numericConstants_1.ZERO)) {
187
+ utilization = numericConstants_1.ZERO;
188
+ }
189
+ else if (tokenDepositAmount.eq(numericConstants_1.ZERO)) {
190
+ utilization = numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION;
191
+ }
192
+ else {
193
+ utilization = tokenBorrowAmount
194
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
195
+ .div(tokenDepositAmount);
196
+ }
197
+ return utilization;
198
+ }
199
+ exports.calculateUtilization = calculateUtilization;
200
+ /**
201
+ * calculates max borrow amount where rate would stay below targetBorrowRate
202
+ * @param spotMarketAccount
203
+ * @param targetBorrowRate
204
+ * @returns : Precision: TOKEN DECIMALS
205
+ */
206
+ function calculateSpotMarketBorrowCapacity(spotMarketAccount, targetBorrowRate) {
207
+ const currentBorrowRate = calculateBorrowRate(spotMarketAccount);
208
+ const tokenDepositAmount = getTokenAmount(spotMarketAccount.depositBalance, spotMarketAccount, types_1.SpotBalanceType.DEPOSIT);
209
+ const tokenBorrowAmount = getTokenAmount(spotMarketAccount.borrowBalance, spotMarketAccount, types_1.SpotBalanceType.BORROW);
210
+ let targetUtilization;
211
+ // target utilization past mid point
212
+ if (targetBorrowRate.gte(new anchor_1.BN(spotMarketAccount.optimalBorrowRate))) {
213
+ const borrowRateSlope = new anchor_1.BN(spotMarketAccount.maxBorrowRate - spotMarketAccount.optimalBorrowRate)
214
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
215
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION.sub(new anchor_1.BN(spotMarketAccount.optimalUtilization)));
216
+ const surplusTargetUtilization = targetBorrowRate
217
+ .sub(new anchor_1.BN(spotMarketAccount.optimalBorrowRate))
218
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
219
+ .div(borrowRateSlope);
220
+ targetUtilization = surplusTargetUtilization.add(new anchor_1.BN(spotMarketAccount.optimalUtilization));
221
+ }
222
+ else {
223
+ const borrowRateSlope = new anchor_1.BN(spotMarketAccount.optimalBorrowRate)
224
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
225
+ .div(new anchor_1.BN(spotMarketAccount.optimalUtilization));
226
+ targetUtilization = targetBorrowRate
227
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
228
+ .div(borrowRateSlope);
229
+ }
230
+ const totalCapacity = tokenDepositAmount
231
+ .mul(targetUtilization)
232
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION);
233
+ let remainingCapacity;
234
+ if (currentBorrowRate.gte(targetBorrowRate)) {
235
+ remainingCapacity = numericConstants_1.ZERO;
236
+ }
237
+ else {
238
+ remainingCapacity = anchor_1.BN.max(numericConstants_1.ZERO, totalCapacity.sub(tokenBorrowAmount));
239
+ }
240
+ if (spotMarketAccount.maxTokenBorrowsFraction > 0) {
241
+ const maxTokenBorrows = spotMarketAccount.maxTokenDeposits
242
+ .mul(new anchor_1.BN(spotMarketAccount.maxTokenBorrowsFraction))
243
+ .divn(10000);
244
+ remainingCapacity = anchor_1.BN.min(remainingCapacity, anchor_1.BN.max(numericConstants_1.ZERO, maxTokenBorrows.sub(tokenBorrowAmount)));
245
+ }
246
+ return { totalCapacity, remainingCapacity };
247
+ }
248
+ exports.calculateSpotMarketBorrowCapacity = calculateSpotMarketBorrowCapacity;
249
+ function calculateInterestRate(bank, delta = numericConstants_1.ZERO, currentUtilization = null) {
250
+ const utilization = currentUtilization || calculateUtilization(bank, delta);
251
+ let interestRate;
252
+ if (utilization.gt(new anchor_1.BN(bank.optimalUtilization))) {
253
+ const surplusUtilization = utilization.sub(new anchor_1.BN(bank.optimalUtilization));
254
+ const borrowRateSlope = new anchor_1.BN(bank.maxBorrowRate - bank.optimalBorrowRate)
255
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
256
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION.sub(new anchor_1.BN(bank.optimalUtilization)));
257
+ interestRate = new anchor_1.BN(bank.optimalBorrowRate).add(surplusUtilization
258
+ .mul(borrowRateSlope)
259
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION));
260
+ }
261
+ else {
262
+ const borrowRateSlope = new anchor_1.BN(bank.optimalBorrowRate)
263
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
264
+ .div(new anchor_1.BN(bank.optimalUtilization));
265
+ interestRate = utilization
266
+ .mul(borrowRateSlope)
267
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION);
268
+ }
269
+ return anchor_1.BN.max(interestRate, new anchor_1.BN(bank.minBorrowRate).mul(numericConstants_2.PERCENTAGE_PRECISION.divn(200)));
270
+ }
271
+ exports.calculateInterestRate = calculateInterestRate;
272
+ function calculateDepositRate(bank, delta = numericConstants_1.ZERO, currentUtilization = null) {
273
+ // positive delta => adding to deposit
274
+ // negative delta => adding to borrow
275
+ const utilization = currentUtilization || calculateUtilization(bank, delta);
276
+ const borrowRate = calculateBorrowRate(bank, delta, utilization);
277
+ const depositRate = borrowRate
278
+ .mul(numericConstants_2.PERCENTAGE_PRECISION.sub(new anchor_1.BN(bank.insuranceFund.totalFactor)))
279
+ .mul(utilization)
280
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
281
+ .div(numericConstants_2.PERCENTAGE_PRECISION);
282
+ return depositRate;
283
+ }
284
+ exports.calculateDepositRate = calculateDepositRate;
285
+ function calculateBorrowRate(bank, delta = numericConstants_1.ZERO, currentUtilization = null) {
286
+ return calculateInterestRate(bank, delta, currentUtilization);
287
+ }
288
+ exports.calculateBorrowRate = calculateBorrowRate;
289
+ function calculateInterestAccumulated(bank, now) {
290
+ const interestRate = calculateInterestRate(bank);
291
+ const timeSinceLastUpdate = now.sub(bank.lastInterestTs);
292
+ const modifiedBorrowRate = interestRate.mul(timeSinceLastUpdate);
293
+ const utilization = calculateUtilization(bank);
294
+ const modifiedDepositRate = modifiedBorrowRate
295
+ .mul(utilization)
296
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION);
297
+ const borrowInterest = bank.cumulativeBorrowInterest
298
+ .mul(modifiedBorrowRate)
299
+ .div(numericConstants_1.ONE_YEAR)
300
+ .div(numericConstants_1.SPOT_MARKET_RATE_PRECISION)
301
+ .add(numericConstants_1.ONE);
302
+ const depositInterest = bank.cumulativeDepositInterest
303
+ .mul(modifiedDepositRate)
304
+ .div(numericConstants_1.ONE_YEAR)
305
+ .div(numericConstants_1.SPOT_MARKET_RATE_PRECISION);
306
+ return { borrowInterest, depositInterest };
307
+ }
308
+ exports.calculateInterestAccumulated = calculateInterestAccumulated;
309
+ function calculateTokenUtilizationLimits(depositTokenAmount, borrowTokenAmount, spotMarket) {
310
+ // Calculates the allowable minimum deposit and maximum borrow amounts for immediate withdrawal based on market utilization.
311
+ // First, it determines a maximum withdrawal utilization from the market's target and historic utilization.
312
+ // Then, it deduces corresponding deposit/borrow amounts.
313
+ // Note: For deposit sizes below the guard threshold, withdrawals aren't blocked.
314
+ const maxWithdrawUtilization = anchor_1.BN.max(new anchor_1.BN(spotMarket.optimalUtilization), spotMarket.utilizationTwap.add(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION.sub(spotMarket.utilizationTwap).div(new anchor_1.BN(2))));
315
+ let minDepositTokensForUtilization = borrowTokenAmount
316
+ .mul(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION)
317
+ .div(maxWithdrawUtilization);
318
+ // don't block withdraws for deposit sizes below guard threshold
319
+ minDepositTokensForUtilization = anchor_1.BN.min(minDepositTokensForUtilization, depositTokenAmount.sub(spotMarket.withdrawGuardThreshold));
320
+ let maxBorrowTokensForUtilization = maxWithdrawUtilization
321
+ .mul(depositTokenAmount)
322
+ .div(numericConstants_1.SPOT_MARKET_UTILIZATION_PRECISION);
323
+ maxBorrowTokensForUtilization = anchor_1.BN.max(spotMarket.withdrawGuardThreshold, maxBorrowTokensForUtilization);
324
+ return {
325
+ minDepositTokensForUtilization,
326
+ maxBorrowTokensForUtilization,
327
+ };
328
+ }
329
+ exports.calculateTokenUtilizationLimits = calculateTokenUtilizationLimits;
330
+ function calculateWithdrawLimit(spotMarket, now) {
331
+ const marketDepositTokenAmount = getTokenAmount(spotMarket.depositBalance, spotMarket, types_1.SpotBalanceType.DEPOSIT);
332
+ const marketBorrowTokenAmount = getTokenAmount(spotMarket.borrowBalance, spotMarket, types_1.SpotBalanceType.BORROW);
333
+ const twentyFourHours = new anchor_1.BN(60 * 60 * 24);
334
+ const sinceLast = now.sub(spotMarket.lastTwapTs);
335
+ const sinceStart = anchor_1.BN.max(numericConstants_1.ZERO, twentyFourHours.sub(sinceLast));
336
+ const borrowTokenTwapLive = spotMarket.borrowTokenTwap
337
+ .mul(sinceStart)
338
+ .add(marketBorrowTokenAmount.mul(sinceLast))
339
+ .div(sinceLast.add(sinceStart));
340
+ const depositTokenTwapLive = spotMarket.depositTokenTwap
341
+ .mul(sinceStart)
342
+ .add(marketDepositTokenAmount.mul(sinceLast))
343
+ .div(sinceLast.add(sinceStart));
344
+ const lesserDepositAmount = anchor_1.BN.min(marketDepositTokenAmount, depositTokenTwapLive);
345
+ const maxBorrowTokensTwap = anchor_1.BN.max(spotMarket.withdrawGuardThreshold, anchor_1.BN.min(anchor_1.BN.max(marketDepositTokenAmount.div(new anchor_1.BN(6)), borrowTokenTwapLive.add(lesserDepositAmount.div(new anchor_1.BN(10)))), lesserDepositAmount.sub(lesserDepositAmount.div(new anchor_1.BN(5))))); // between ~15-80% utilization with friction on twap
346
+ const minDepositTokensTwap = depositTokenTwapLive.sub(anchor_1.BN.max(depositTokenTwapLive.div(new anchor_1.BN(4)), anchor_1.BN.min(spotMarket.withdrawGuardThreshold, depositTokenTwapLive)));
347
+ const { minDepositTokensForUtilization, maxBorrowTokensForUtilization } = calculateTokenUtilizationLimits(marketDepositTokenAmount, marketBorrowTokenAmount, spotMarket);
348
+ const minDepositTokens = anchor_1.BN.max(minDepositTokensForUtilization, minDepositTokensTwap);
349
+ let maxBorrowTokens = anchor_1.BN.min(maxBorrowTokensForUtilization, maxBorrowTokensTwap);
350
+ const withdrawLimit = anchor_1.BN.max(marketDepositTokenAmount.sub(minDepositTokens), numericConstants_1.ZERO);
351
+ let borrowLimit = maxBorrowTokens.sub(marketBorrowTokenAmount);
352
+ borrowLimit = anchor_1.BN.min(borrowLimit, marketDepositTokenAmount.sub(marketBorrowTokenAmount));
353
+ if (spotMarket.maxTokenBorrowsFraction > 0) {
354
+ const maxTokenBorrowsByFraction = spotMarket.maxTokenDeposits
355
+ .mul(new anchor_1.BN(spotMarket.maxTokenBorrowsFraction))
356
+ .divn(10000);
357
+ const trueMaxBorrowTokensAvailable = maxTokenBorrowsByFraction.sub(marketBorrowTokenAmount);
358
+ maxBorrowTokens = anchor_1.BN.min(maxBorrowTokens, trueMaxBorrowTokensAvailable);
359
+ borrowLimit = anchor_1.BN.min(borrowLimit, maxBorrowTokens);
360
+ }
361
+ if (withdrawLimit.eq(numericConstants_1.ZERO)) {
362
+ borrowLimit = numericConstants_1.ZERO;
363
+ }
364
+ return {
365
+ borrowLimit,
366
+ withdrawLimit,
367
+ maxBorrowAmount: maxBorrowTokens,
368
+ minDepositAmount: minDepositTokens,
369
+ currentDepositAmount: marketDepositTokenAmount,
370
+ currentBorrowAmount: marketBorrowTokenAmount,
371
+ };
372
+ }
373
+ exports.calculateWithdrawLimit = calculateWithdrawLimit;
@@ -0,0 +1,11 @@
1
+ /// <reference types="bn.js" />
2
+ import { BN } from '@coral-xyz/anchor';
3
+ import { MarginCategory, SpotBalanceType, SpotMarketAccount } from '../types';
4
+ export declare function castNumberToSpotPrecision(value: number | BN, spotMarket: SpotMarketAccount): BN;
5
+ export declare function calculateSpotMarketMarginRatio(market: SpotMarketAccount, oraclePrice: BN, marginCategory: MarginCategory, size: BN, balanceType: SpotBalanceType, customMarginRatio?: number): number;
6
+ /**
7
+ * Returns the maximum remaining deposit that can be made to the spot market. If the maxTokenDeposits on the market is zero then there is no limit and this function will also return zero. (so that needs to be checked)
8
+ * @param market
9
+ * @returns
10
+ */
11
+ export declare function calculateMaxRemainingDeposit(market: SpotMarketAccount): BN;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateMaxRemainingDeposit = exports.calculateSpotMarketMarginRatio = exports.castNumberToSpotPrecision = void 0;
4
+ const anchor_1 = require("@coral-xyz/anchor");
5
+ const types_1 = require("../types");
6
+ const spotBalance_1 = require("./spotBalance");
7
+ const numericConstants_1 = require("../constants/numericConstants");
8
+ const utils_1 = require("./utils");
9
+ function castNumberToSpotPrecision(value, spotMarket) {
10
+ if (typeof value === 'number') {
11
+ return (0, utils_1.numberToSafeBN)(value, new anchor_1.BN(Math.pow(10, spotMarket.decimals)));
12
+ }
13
+ else {
14
+ return value.mul(new anchor_1.BN(Math.pow(10, spotMarket.decimals)));
15
+ }
16
+ }
17
+ exports.castNumberToSpotPrecision = castNumberToSpotPrecision;
18
+ function calculateSpotMarketMarginRatio(market, oraclePrice, marginCategory, size, balanceType, customMarginRatio = 0) {
19
+ let marginRatio;
20
+ if ((0, types_1.isVariant)(balanceType, 'deposit')) {
21
+ const assetWeight = (0, spotBalance_1.calculateAssetWeight)(size, oraclePrice, market, marginCategory);
22
+ marginRatio = numericConstants_1.MARGIN_PRECISION.sub(assetWeight).toNumber();
23
+ }
24
+ else {
25
+ const liabilityWeight = (0, spotBalance_1.calculateLiabilityWeight)(size, market, marginCategory);
26
+ marginRatio = liabilityWeight.sub(numericConstants_1.MARGIN_PRECISION).toNumber();
27
+ }
28
+ if (marginCategory === 'Initial') {
29
+ // use lowest leverage between max allowed and optional user custom max
30
+ return Math.max(marginRatio, customMarginRatio);
31
+ }
32
+ return marginRatio;
33
+ }
34
+ exports.calculateSpotMarketMarginRatio = calculateSpotMarketMarginRatio;
35
+ /**
36
+ * Returns the maximum remaining deposit that can be made to the spot market. If the maxTokenDeposits on the market is zero then there is no limit and this function will also return zero. (so that needs to be checked)
37
+ * @param market
38
+ * @returns
39
+ */
40
+ function calculateMaxRemainingDeposit(market) {
41
+ const marketMaxTokenDeposits = market.maxTokenDeposits;
42
+ if (marketMaxTokenDeposits.eq(numericConstants_1.ZERO)) {
43
+ // If the maxTokenDeposits is set to zero then that means there is no limit. Return the largest number we can to represent infinite available deposit.
44
+ return numericConstants_1.ZERO;
45
+ }
46
+ const totalDepositsTokenAmount = (0, spotBalance_1.getTokenAmount)(market.depositBalance, market, types_1.SpotBalanceType.DEPOSIT);
47
+ return marketMaxTokenDeposits.sub(totalDepositsTokenAmount);
48
+ }
49
+ exports.calculateMaxRemainingDeposit = calculateMaxRemainingDeposit;
@@ -0,0 +1,19 @@
1
+ /// <reference types="bn.js" />
2
+ import { MarginCategory, SpotMarketAccount, SpotPosition } from '../types';
3
+ import { BN } from '@coral-xyz/anchor';
4
+ import { StrictOraclePrice } from '../oracles/strictOraclePrice';
5
+ export declare function isSpotPositionAvailable(position: SpotPosition): boolean;
6
+ export type OrderFillSimulation = {
7
+ tokenAmount: BN;
8
+ ordersValue: BN;
9
+ tokenValue: BN;
10
+ weight: BN;
11
+ weightedTokenValue: BN;
12
+ freeCollateralContribution: any;
13
+ };
14
+ export declare function getWorstCaseTokenAmounts(spotPosition: SpotPosition, spotMarketAccount: SpotMarketAccount, strictOraclePrice: StrictOraclePrice, marginCategory: MarginCategory, customMarginRatio?: number): OrderFillSimulation;
15
+ export declare function calculateWeightedTokenValue(tokenAmount: BN, tokenValue: BN, oraclePrice: BN, spotMarket: SpotMarketAccount, marginCategory: MarginCategory, customMarginRatio?: number): {
16
+ weight: BN;
17
+ weightedTokenValue: BN;
18
+ };
19
+ export declare function simulateOrderFill(tokenAmount: BN, tokenValue: BN, openOrders: BN, strictOraclePrice: StrictOraclePrice, spotMarket: SpotMarketAccount, marginCategory: MarginCategory, customMarginRatio?: number): OrderFillSimulation;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.simulateOrderFill = exports.calculateWeightedTokenValue = exports.getWorstCaseTokenAmounts = exports.isSpotPositionAvailable = void 0;
4
+ const numericConstants_1 = require("../constants/numericConstants");
5
+ const anchor_1 = require("@coral-xyz/anchor");
6
+ const spotBalance_1 = require("./spotBalance");
7
+ function isSpotPositionAvailable(position) {
8
+ return position.scaledBalance.eq(numericConstants_1.ZERO) && position.openOrders === 0;
9
+ }
10
+ exports.isSpotPositionAvailable = isSpotPositionAvailable;
11
+ function getWorstCaseTokenAmounts(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, customMarginRatio) {
12
+ const tokenAmount = (0, spotBalance_1.getSignedTokenAmount)((0, spotBalance_1.getTokenAmount)(spotPosition.scaledBalance, spotMarketAccount, spotPosition.balanceType), spotPosition.balanceType);
13
+ const tokenValue = (0, spotBalance_1.getStrictTokenValue)(tokenAmount, spotMarketAccount.decimals, strictOraclePrice);
14
+ if (spotPosition.openBids.eq(numericConstants_1.ZERO) && spotPosition.openAsks.eq(numericConstants_1.ZERO)) {
15
+ const { weight, weightedTokenValue } = calculateWeightedTokenValue(tokenAmount, tokenValue, strictOraclePrice.current, spotMarketAccount, marginCategory, customMarginRatio);
16
+ return {
17
+ tokenAmount,
18
+ ordersValue: numericConstants_1.ZERO,
19
+ tokenValue,
20
+ weight,
21
+ weightedTokenValue,
22
+ freeCollateralContribution: weightedTokenValue,
23
+ };
24
+ }
25
+ const bidsSimulation = simulateOrderFill(tokenAmount, tokenValue, spotPosition.openBids, strictOraclePrice, spotMarketAccount, marginCategory, customMarginRatio);
26
+ const asksSimulation = simulateOrderFill(tokenAmount, tokenValue, spotPosition.openAsks, strictOraclePrice, spotMarketAccount, marginCategory, customMarginRatio);
27
+ if (asksSimulation.freeCollateralContribution.lt(bidsSimulation.freeCollateralContribution)) {
28
+ return asksSimulation;
29
+ }
30
+ else {
31
+ return bidsSimulation;
32
+ }
33
+ }
34
+ exports.getWorstCaseTokenAmounts = getWorstCaseTokenAmounts;
35
+ function calculateWeightedTokenValue(tokenAmount, tokenValue, oraclePrice, spotMarket, marginCategory, customMarginRatio) {
36
+ let weight;
37
+ if (tokenValue.gte(numericConstants_1.ZERO)) {
38
+ weight = (0, spotBalance_1.calculateAssetWeight)(tokenAmount, oraclePrice, spotMarket, marginCategory);
39
+ }
40
+ else {
41
+ weight = (0, spotBalance_1.calculateLiabilityWeight)(tokenAmount.abs(), spotMarket, marginCategory);
42
+ }
43
+ if (marginCategory === 'Initial' &&
44
+ customMarginRatio &&
45
+ spotMarket.marketIndex !== numericConstants_1.QUOTE_SPOT_MARKET_INDEX) {
46
+ const userCustomAssetWeight = tokenValue.gte(numericConstants_1.ZERO)
47
+ ? anchor_1.BN.max(numericConstants_1.ZERO, numericConstants_1.SPOT_MARKET_WEIGHT_PRECISION.subn(customMarginRatio))
48
+ : numericConstants_1.SPOT_MARKET_WEIGHT_PRECISION.addn(customMarginRatio);
49
+ weight = tokenValue.gte(numericConstants_1.ZERO)
50
+ ? anchor_1.BN.min(weight, userCustomAssetWeight)
51
+ : anchor_1.BN.max(weight, userCustomAssetWeight);
52
+ }
53
+ return {
54
+ weight: weight,
55
+ weightedTokenValue: tokenValue
56
+ .mul(weight)
57
+ .div(numericConstants_1.SPOT_MARKET_WEIGHT_PRECISION),
58
+ };
59
+ }
60
+ exports.calculateWeightedTokenValue = calculateWeightedTokenValue;
61
+ function simulateOrderFill(tokenAmount, tokenValue, openOrders, strictOraclePrice, spotMarket, marginCategory, customMarginRatio) {
62
+ const ordersValue = (0, spotBalance_1.getTokenValue)(openOrders.neg(), spotMarket.decimals, {
63
+ price: strictOraclePrice.max(),
64
+ });
65
+ const tokenAmountAfterFill = tokenAmount.add(openOrders);
66
+ const tokenValueAfterFill = tokenValue.add(ordersValue.neg());
67
+ const { weight, weightedTokenValue: weightedTokenValueAfterFill } = calculateWeightedTokenValue(tokenAmountAfterFill, tokenValueAfterFill, strictOraclePrice.current, spotMarket, marginCategory, customMarginRatio);
68
+ const freeCollateralContribution = weightedTokenValueAfterFill.add(ordersValue);
69
+ return {
70
+ tokenAmount: tokenAmountAfterFill,
71
+ ordersValue: ordersValue,
72
+ tokenValue: tokenValueAfterFill,
73
+ weight,
74
+ weightedTokenValue: weightedTokenValueAfterFill,
75
+ freeCollateralContribution,
76
+ };
77
+ }
78
+ exports.simulateOrderFill = simulateOrderFill;
@@ -0,0 +1,5 @@
1
+ /// <reference types="bn.js" />
2
+ import { StateAccount } from '../types';
3
+ import { BN } from '../';
4
+ export declare function calculateInitUserFee(stateAccount: StateAccount): BN;
5
+ export declare function getMaxNumberOfSubAccounts(stateAccount: StateAccount): BN;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMaxNumberOfSubAccounts = exports.calculateInitUserFee = void 0;
4
+ const __1 = require("../");
5
+ function calculateInitUserFee(stateAccount) {
6
+ const maxInitFee = new __1.BN(stateAccount.maxInitializeUserFee)
7
+ .mul(__1.LAMPORTS_PRECISION)
8
+ .divn(100);
9
+ const targetUtilization = __1.PERCENTAGE_PRECISION.muln(8).divn(10);
10
+ const accountSpaceUtilization = stateAccount.numberOfSubAccounts
11
+ .addn(1)
12
+ .mul(__1.PERCENTAGE_PRECISION)
13
+ .div(getMaxNumberOfSubAccounts(stateAccount));
14
+ if (accountSpaceUtilization.gt(targetUtilization)) {
15
+ return maxInitFee
16
+ .mul(accountSpaceUtilization.sub(targetUtilization))
17
+ .div(__1.PERCENTAGE_PRECISION.sub(targetUtilization));
18
+ }
19
+ else {
20
+ return __1.ZERO;
21
+ }
22
+ }
23
+ exports.calculateInitUserFee = calculateInitUserFee;
24
+ function getMaxNumberOfSubAccounts(stateAccount) {
25
+ if (stateAccount.maxNumberOfSubAccounts <= 5) {
26
+ return new __1.BN(stateAccount.maxNumberOfSubAccounts);
27
+ }
28
+ return new __1.BN(stateAccount.maxNumberOfSubAccounts).muln(100);
29
+ }
30
+ exports.getMaxNumberOfSubAccounts = getMaxNumberOfSubAccounts;