@velocity-exchange/sdk 0.3.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1127) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/accounts/basicUserAccountSubscriber.d.ts +18 -0
  3. package/lib/browser/accounts/basicUserAccountSubscriber.js +18 -0
  4. package/lib/browser/accounts/basicUserStatsAccountSubscriber.d.ts +18 -0
  5. package/lib/browser/accounts/basicUserStatsAccountSubscriber.js +18 -0
  6. package/lib/browser/accounts/bulkAccountLoader.d.ts +52 -0
  7. package/lib/browser/accounts/bulkAccountLoader.js +51 -0
  8. package/lib/browser/accounts/bulkUserStatsSubscription.d.ts +9 -2
  9. package/lib/browser/accounts/bulkUserStatsSubscription.js +9 -2
  10. package/lib/browser/accounts/bulkUserSubscription.d.ts +8 -2
  11. package/lib/browser/accounts/bulkUserSubscription.js +8 -2
  12. package/lib/browser/accounts/customizedCadenceBulkAccountLoader.d.ts +37 -0
  13. package/lib/browser/accounts/customizedCadenceBulkAccountLoader.js +37 -0
  14. package/lib/browser/accounts/fetch.d.ts +59 -2
  15. package/lib/browser/accounts/fetch.js +57 -2
  16. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +30 -0
  17. package/lib/browser/accounts/grpcAccountSubscriber.js +30 -0
  18. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +16 -0
  19. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.js +16 -0
  20. package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +60 -1
  21. package/lib/browser/accounts/grpcMultiAccountSubscriber.js +118 -37
  22. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +32 -0
  23. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.js +40 -12
  24. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +33 -0
  25. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +33 -0
  26. package/lib/browser/accounts/grpcUserAccountSubscriber.d.ts +15 -0
  27. package/lib/browser/accounts/grpcUserAccountSubscriber.js +15 -0
  28. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.d.ts +15 -0
  29. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.js +15 -0
  30. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.d.ts +41 -0
  31. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +41 -0
  32. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +116 -0
  33. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +152 -1
  34. package/lib/browser/accounts/laserProgramAccountSubscriber.d.ts +34 -0
  35. package/lib/browser/accounts/laserProgramAccountSubscriber.js +34 -0
  36. package/lib/browser/accounts/oneShotUserAccountSubscriber.d.ts +19 -0
  37. package/lib/browser/accounts/oneShotUserAccountSubscriber.js +19 -0
  38. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.d.ts +19 -0
  39. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.js +19 -0
  40. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +31 -0
  41. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +31 -0
  42. package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +19 -0
  43. package/lib/browser/accounts/pollingOracleAccountSubscriber.js +21 -2
  44. package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +22 -0
  45. package/lib/browser/accounts/pollingTokenAccountSubscriber.js +22 -0
  46. package/lib/browser/accounts/pollingUserAccountSubscriber.d.ts +32 -0
  47. package/lib/browser/accounts/pollingUserAccountSubscriber.js +32 -0
  48. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +22 -0
  49. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +22 -0
  50. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +83 -0
  51. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +84 -1
  52. package/lib/browser/accounts/testBulkAccountLoader.d.ts +8 -0
  53. package/lib/browser/accounts/testBulkAccountLoader.js +8 -0
  54. package/lib/browser/accounts/types.d.ts +149 -0
  55. package/lib/browser/accounts/types.js +13 -0
  56. package/lib/browser/accounts/utils.d.ts +18 -0
  57. package/lib/browser/accounts/utils.js +32 -16
  58. package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +41 -0
  59. package/lib/browser/accounts/webSocketAccountSubscriber.js +41 -0
  60. package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +31 -0
  61. package/lib/browser/accounts/webSocketAccountSubscriberV2.js +31 -23
  62. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +27 -0
  63. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +27 -0
  64. package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +36 -0
  65. package/lib/browser/accounts/webSocketProgramAccountSubscriber.js +36 -0
  66. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +21 -0
  67. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.js +25 -0
  68. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +21 -0
  69. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.js +21 -0
  70. package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +26 -0
  71. package/lib/browser/accounts/webSocketUserAccountSubscriber.js +26 -0
  72. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  73. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.js +20 -0
  74. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +121 -0
  75. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +123 -2
  76. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +96 -0
  77. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +108 -0
  78. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +28 -0
  79. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.js +33 -0
  80. package/lib/browser/addresses/marketAddresses.d.ts +10 -0
  81. package/lib/browser/addresses/marketAddresses.js +10 -0
  82. package/lib/browser/addresses/pda.d.ts +214 -2
  83. package/lib/browser/addresses/pda.js +217 -5
  84. package/lib/browser/adminClient.d.ts +2171 -4
  85. package/lib/browser/adminClient.js +2215 -4
  86. package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +15 -0
  87. package/lib/browser/auctionSubscriber/auctionSubscriber.js +15 -0
  88. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +19 -0
  89. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +19 -0
  90. package/lib/browser/auctionSubscriber/index.d.ts +6 -0
  91. package/lib/browser/auctionSubscriber/index.js +6 -0
  92. package/lib/browser/auctionSubscriber/types.d.ts +7 -0
  93. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +33 -0
  94. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +33 -0
  95. package/lib/browser/blockhashSubscriber/index.d.ts +5 -0
  96. package/lib/browser/blockhashSubscriber/index.js +5 -0
  97. package/lib/browser/blockhashSubscriber/types.d.ts +5 -0
  98. package/lib/browser/clock/clockSubscriber.d.ts +24 -0
  99. package/lib/browser/clock/clockSubscriber.js +22 -0
  100. package/lib/browser/config.d.ts +58 -4
  101. package/lib/browser/config.js +94 -28
  102. package/lib/browser/constants/numericConstants.d.ts +67 -0
  103. package/lib/browser/constants/numericConstants.js +68 -1
  104. package/lib/browser/constants/perpMarkets.d.ts +10 -0
  105. package/lib/browser/constants/perpMarkets.js +40 -908
  106. package/lib/browser/constants/spotMarkets.d.ts +13 -0
  107. package/lib/browser/constants/spotMarkets.js +16 -742
  108. package/lib/browser/constants/txConstants.d.ts +1 -0
  109. package/lib/browser/constants/txConstants.js +1 -0
  110. package/lib/browser/core/VelocityCore.d.ts +285 -8
  111. package/lib/browser/core/VelocityCore.js +281 -8
  112. package/lib/browser/core/instructions/deposit.d.ts +22 -0
  113. package/lib/browser/core/instructions/deposit.js +22 -0
  114. package/lib/browser/core/instructions/fill.d.ts +17 -0
  115. package/lib/browser/core/instructions/fill.js +17 -0
  116. package/lib/browser/core/instructions/funding.d.ts +12 -0
  117. package/lib/browser/core/instructions/funding.js +12 -0
  118. package/lib/browser/core/instructions/liquidation.d.ts +18 -0
  119. package/lib/browser/core/instructions/liquidation.js +18 -0
  120. package/lib/browser/core/instructions/orders.d.ts +28 -0
  121. package/lib/browser/core/instructions/orders.js +28 -0
  122. package/lib/browser/core/instructions/perpOrders.d.ts +106 -0
  123. package/lib/browser/core/instructions/perpOrders.js +106 -0
  124. package/lib/browser/core/instructions/settlement.d.ts +14 -0
  125. package/lib/browser/core/instructions/settlement.js +14 -0
  126. package/lib/browser/core/instructions/trigger.d.ts +15 -0
  127. package/lib/browser/core/instructions/trigger.js +15 -0
  128. package/lib/browser/core/instructions/withdraw.d.ts +21 -0
  129. package/lib/browser/core/instructions/withdraw.js +21 -0
  130. package/lib/browser/core/remainingAccounts.d.ts +47 -3
  131. package/lib/browser/core/remainingAccounts.js +20 -0
  132. package/lib/browser/core/signedMsg.d.ts +38 -0
  133. package/lib/browser/core/signedMsg.js +33 -0
  134. package/lib/browser/decode/customCoder.d.ts +39 -3
  135. package/lib/browser/decode/customCoder.js +45 -3
  136. package/lib/browser/decode/user.d.ts +22 -0
  137. package/lib/browser/decode/user.js +27 -1
  138. package/lib/browser/dlob/DLOB.d.ts +502 -53
  139. package/lib/browser/dlob/DLOB.js +540 -98
  140. package/lib/browser/dlob/DLOBNode.d.ts +86 -4
  141. package/lib/browser/dlob/DLOBNode.js +37 -4
  142. package/lib/browser/dlob/DLOBSubscriber.d.ts +39 -12
  143. package/lib/browser/dlob/DLOBSubscriber.js +42 -12
  144. package/lib/browser/dlob/NodeList.d.ts +69 -0
  145. package/lib/browser/dlob/NodeList.js +66 -0
  146. package/lib/browser/dlob/orderBookLevels.d.ts +106 -13
  147. package/lib/browser/dlob/orderBookLevels.js +84 -14
  148. package/lib/browser/dlob/types.d.ts +15 -0
  149. package/lib/browser/events/eventList.d.ts +14 -0
  150. package/lib/browser/events/eventList.js +14 -0
  151. package/lib/browser/events/eventSubscriber.d.ts +87 -10
  152. package/lib/browser/events/eventSubscriber.js +93 -8
  153. package/lib/browser/events/eventsServerLogProvider.d.ts +22 -0
  154. package/lib/browser/events/eventsServerLogProvider.js +27 -0
  155. package/lib/browser/events/fetchLogs.d.ts +31 -0
  156. package/lib/browser/events/fetchLogs.js +46 -1
  157. package/lib/browser/events/parse.d.ts +23 -0
  158. package/lib/browser/events/parse.js +23 -0
  159. package/lib/browser/events/pollingLogProvider.d.ts +24 -0
  160. package/lib/browser/events/pollingLogProvider.js +24 -0
  161. package/lib/browser/events/sort.d.ts +11 -0
  162. package/lib/browser/events/sort.js +12 -0
  163. package/lib/browser/events/txEventCache.d.ts +13 -3
  164. package/lib/browser/events/txEventCache.js +19 -7
  165. package/lib/browser/events/types.d.ts +118 -2
  166. package/lib/browser/events/types.js +11 -0
  167. package/lib/browser/events/webSocketLogProvider.d.ts +23 -0
  168. package/lib/browser/events/webSocketLogProvider.js +28 -0
  169. package/lib/browser/factory/oracleClient.js +2 -2
  170. package/lib/browser/idl/velocity.d.ts +150 -7
  171. package/lib/browser/idl/velocity.json +151 -8
  172. package/lib/browser/keypair.d.ts +8 -0
  173. package/lib/browser/keypair.js +8 -0
  174. package/lib/browser/marginCalculation.d.ts +134 -2
  175. package/lib/browser/marginCalculation.js +121 -0
  176. package/lib/browser/math/amm.d.ts +348 -29
  177. package/lib/browser/math/amm.js +310 -32
  178. package/lib/browser/math/auction.d.ts +95 -19
  179. package/lib/browser/math/auction.js +118 -28
  180. package/lib/browser/math/bankruptcy.d.ts +46 -0
  181. package/lib/browser/math/bankruptcy.js +89 -1
  182. package/lib/browser/math/builder.d.ts +64 -8
  183. package/lib/browser/math/builder.js +71 -9
  184. package/lib/browser/math/conversion.d.ts +21 -0
  185. package/lib/browser/math/conversion.js +21 -0
  186. package/lib/browser/math/exchangeStatus.d.ts +91 -0
  187. package/lib/browser/math/exchangeStatus.js +106 -3
  188. package/lib/browser/math/funding.d.ts +57 -20
  189. package/lib/browser/math/funding.js +63 -23
  190. package/lib/browser/math/insurance.d.ts +62 -0
  191. package/lib/browser/math/insurance.js +62 -0
  192. package/lib/browser/math/liquidation.d.ts +127 -11
  193. package/lib/browser/math/liquidation.js +182 -19
  194. package/lib/browser/math/margin.d.ts +79 -13
  195. package/lib/browser/math/margin.js +80 -14
  196. package/lib/browser/math/market.d.ts +135 -15
  197. package/lib/browser/math/market.js +145 -17
  198. package/lib/browser/math/oracles.d.ts +113 -0
  199. package/lib/browser/math/oracles.js +118 -1
  200. package/lib/browser/math/orders.d.ts +115 -10
  201. package/lib/browser/math/orders.js +130 -19
  202. package/lib/browser/math/position.d.ts +80 -33
  203. package/lib/browser/math/position.js +80 -33
  204. package/lib/browser/math/repeg.d.ts +48 -10
  205. package/lib/browser/math/repeg.js +48 -10
  206. package/lib/browser/math/spotBalance.d.ts +200 -5
  207. package/lib/browser/math/spotBalance.js +239 -10
  208. package/lib/browser/math/spotMarket.d.ts +36 -3
  209. package/lib/browser/math/spotMarket.js +36 -3
  210. package/lib/browser/math/spotPosition.d.ts +72 -0
  211. package/lib/browser/math/spotPosition.js +62 -0
  212. package/lib/browser/math/state.d.ts +31 -0
  213. package/lib/browser/math/state.js +31 -0
  214. package/lib/browser/math/superStake.d.ts +126 -2
  215. package/lib/browser/math/superStake.js +123 -3
  216. package/lib/browser/math/tiers.d.ts +29 -0
  217. package/lib/browser/math/tiers.js +29 -0
  218. package/lib/browser/math/trade.d.ts +102 -51
  219. package/lib/browser/math/trade.js +101 -55
  220. package/lib/browser/math/utils.d.ts +71 -9
  221. package/lib/browser/math/utils.js +71 -9
  222. package/lib/browser/memcmp.d.ts +94 -0
  223. package/lib/browser/memcmp.js +103 -2
  224. package/lib/browser/oracles/oracleClientCache.d.ts +16 -0
  225. package/lib/browser/oracles/oracleClientCache.js +16 -0
  226. package/lib/browser/oracles/oracleId.d.ts +31 -0
  227. package/lib/browser/oracles/oracleId.js +39 -8
  228. package/lib/browser/oracles/prelaunchOracleClient.d.ts +20 -0
  229. package/lib/browser/oracles/prelaunchOracleClient.js +20 -0
  230. package/lib/browser/oracles/pythClient.d.ts +31 -0
  231. package/lib/browser/oracles/pythClient.js +32 -1
  232. package/lib/browser/oracles/pythLazerClient.d.ts +34 -0
  233. package/lib/browser/oracles/pythLazerClient.js +35 -1
  234. package/lib/browser/oracles/quoteAssetOracleClient.d.ts +18 -0
  235. package/lib/browser/oracles/quoteAssetOracleClient.js +18 -0
  236. package/lib/browser/oracles/strictOraclePrice.d.ts +21 -0
  237. package/lib/browser/oracles/strictOraclePrice.js +21 -0
  238. package/lib/browser/oracles/types.d.ts +45 -0
  239. package/lib/browser/oracles/utils.d.ts +20 -0
  240. package/lib/browser/oracles/utils.js +20 -0
  241. package/lib/browser/orderParams.d.ts +42 -4
  242. package/lib/browser/orderParams.js +42 -4
  243. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +56 -0
  244. package/lib/browser/orderSubscriber/OrderSubscriber.js +59 -0
  245. package/lib/browser/orderSubscriber/PollingSubscription.d.ts +11 -0
  246. package/lib/browser/orderSubscriber/PollingSubscription.js +11 -0
  247. package/lib/browser/orderSubscriber/WebsocketSubscription.d.ts +18 -0
  248. package/lib/browser/orderSubscriber/WebsocketSubscription.js +18 -0
  249. package/lib/browser/orderSubscriber/grpcSubscription.d.ts +16 -0
  250. package/lib/browser/orderSubscriber/grpcSubscription.js +16 -0
  251. package/lib/browser/orderSubscriber/types.d.ts +9 -0
  252. package/lib/browser/priorityFee/averageOverSlotsStrategy.d.ts +1 -0
  253. package/lib/browser/priorityFee/averageOverSlotsStrategy.js +1 -0
  254. package/lib/browser/priorityFee/averageStrategy.d.ts +1 -0
  255. package/lib/browser/priorityFee/averageStrategy.js +1 -0
  256. package/lib/browser/priorityFee/ewmaStrategy.d.ts +10 -0
  257. package/lib/browser/priorityFee/ewmaStrategy.js +10 -0
  258. package/lib/browser/priorityFee/heliusPriorityFeeMethod.d.ts +13 -0
  259. package/lib/browser/priorityFee/heliusPriorityFeeMethod.js +9 -2
  260. package/lib/browser/priorityFee/maxOverSlotsStrategy.d.ts +1 -0
  261. package/lib/browser/priorityFee/maxOverSlotsStrategy.js +1 -0
  262. package/lib/browser/priorityFee/maxStrategy.d.ts +1 -0
  263. package/lib/browser/priorityFee/maxStrategy.js +1 -0
  264. package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +39 -0
  265. package/lib/browser/priorityFee/priorityFeeSubscriber.js +39 -0
  266. package/lib/browser/priorityFee/priorityFeeSubscriberMap.d.ts +20 -1
  267. package/lib/browser/priorityFee/priorityFeeSubscriberMap.js +21 -2
  268. package/lib/browser/priorityFee/solanaPriorityFeeMethod.d.ts +12 -0
  269. package/lib/browser/priorityFee/solanaPriorityFeeMethod.js +10 -0
  270. package/lib/browser/priorityFee/types.d.ts +32 -0
  271. package/lib/browser/priorityFee/types.js +5 -0
  272. package/lib/browser/priorityFee/velocityPriorityFeeMethod.d.ts +11 -0
  273. package/lib/browser/priorityFee/velocityPriorityFeeMethod.js +8 -0
  274. package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
  275. package/lib/browser/slot/SlotSubscriber.d.ts +18 -0
  276. package/lib/browser/slot/SlotSubscriber.js +16 -0
  277. package/lib/browser/slot/SlothashSubscriber.d.ts +26 -0
  278. package/lib/browser/slot/SlothashSubscriber.js +25 -1
  279. package/lib/browser/tx/baseTxSender.d.ts +163 -0
  280. package/lib/browser/tx/baseTxSender.js +174 -6
  281. package/lib/browser/tx/blockhashFetcher/baseBlockhashFetcher.d.ts +12 -0
  282. package/lib/browser/tx/blockhashFetcher/baseBlockhashFetcher.js +12 -0
  283. package/lib/browser/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts +15 -0
  284. package/lib/browser/tx/blockhashFetcher/cachedBlockhashFetcher.js +15 -0
  285. package/lib/browser/tx/blockhashFetcher/types.d.ts +4 -0
  286. package/lib/browser/tx/fastSingleTxSender.d.ts +47 -0
  287. package/lib/browser/tx/fastSingleTxSender.js +48 -1
  288. package/lib/browser/tx/forwardOnlyTxSender.d.ts +48 -0
  289. package/lib/browser/tx/forwardOnlyTxSender.js +48 -0
  290. package/lib/browser/tx/reportTransactionError.d.ts +18 -6
  291. package/lib/browser/tx/reportTransactionError.js +18 -6
  292. package/lib/browser/tx/retryTxSender.d.ts +40 -0
  293. package/lib/browser/tx/retryTxSender.js +39 -0
  294. package/lib/browser/tx/txHandler.d.ts +146 -35
  295. package/lib/browser/tx/txHandler.js +132 -32
  296. package/lib/browser/tx/txParamProcessor.d.ts +47 -0
  297. package/lib/browser/tx/txParamProcessor.js +47 -0
  298. package/lib/browser/tx/types.d.ts +46 -0
  299. package/lib/browser/tx/types.js +5 -0
  300. package/lib/browser/tx/utils.d.ts +26 -0
  301. package/lib/browser/tx/utils.js +26 -0
  302. package/lib/browser/tx/whileValidTxSender.d.ts +82 -0
  303. package/lib/browser/tx/whileValidTxSender.js +81 -0
  304. package/lib/browser/types.d.ts +785 -13
  305. package/lib/browser/types.js +126 -9
  306. package/lib/browser/user.d.ts +660 -84
  307. package/lib/browser/user.js +816 -97
  308. package/lib/browser/userMap/PollingSubscription.d.ts +10 -0
  309. package/lib/browser/userMap/PollingSubscription.js +14 -2
  310. package/lib/browser/userMap/WebsocketSubscription.d.ts +9 -0
  311. package/lib/browser/userMap/WebsocketSubscription.js +9 -0
  312. package/lib/browser/userMap/grpcSubscription.d.ts +8 -0
  313. package/lib/browser/userMap/grpcSubscription.js +8 -0
  314. package/lib/browser/userMap/referrerMap.d.ts +72 -2
  315. package/lib/browser/userMap/referrerMap.js +84 -2
  316. package/lib/browser/userMap/revenueShareEscrowMap.d.ts +37 -10
  317. package/lib/browser/userMap/revenueShareEscrowMap.js +38 -11
  318. package/lib/browser/userMap/userMap.d.ts +81 -3
  319. package/lib/browser/userMap/userMap.js +81 -4
  320. package/lib/browser/userMap/userMapConfig.d.ts +23 -0
  321. package/lib/browser/userMap/userStatsMap.d.ts +22 -0
  322. package/lib/browser/userMap/userStatsMap.js +22 -0
  323. package/lib/browser/userName.d.ts +16 -0
  324. package/lib/browser/userName.js +16 -0
  325. package/lib/browser/userStats.d.ts +28 -1
  326. package/lib/browser/userStats.js +28 -1
  327. package/lib/browser/util/TransactionConfirmationManager.d.ts +33 -0
  328. package/lib/browser/util/TransactionConfirmationManager.js +33 -0
  329. package/lib/browser/util/chainClock.d.ts +24 -0
  330. package/lib/browser/util/chainClock.js +20 -0
  331. package/lib/browser/util/computeUnits.d.ts +32 -0
  332. package/lib/browser/util/computeUnits.js +32 -0
  333. package/lib/browser/util/digest.d.ts +17 -0
  334. package/lib/browser/util/digest.js +17 -0
  335. package/lib/browser/util/ed25519Utils.d.ts +12 -2
  336. package/lib/browser/util/ed25519Utils.js +12 -2
  337. package/lib/browser/util/promiseTimeout.d.ts +9 -0
  338. package/lib/browser/util/promiseTimeout.js +9 -0
  339. package/lib/browser/velocityClient.d.ts +3363 -220
  340. package/lib/browser/velocityClient.js +3514 -275
  341. package/lib/browser/wallet.d.ts +37 -0
  342. package/lib/browser/wallet.js +37 -0
  343. package/lib/node/accounts/basicUserAccountSubscriber.d.ts +18 -0
  344. package/lib/node/accounts/basicUserAccountSubscriber.d.ts.map +1 -1
  345. package/lib/node/accounts/basicUserAccountSubscriber.js +18 -0
  346. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts +18 -0
  347. package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts.map +1 -1
  348. package/lib/node/accounts/basicUserStatsAccountSubscriber.js +18 -0
  349. package/lib/node/accounts/bulkAccountLoader.d.ts +52 -0
  350. package/lib/node/accounts/bulkAccountLoader.d.ts.map +1 -1
  351. package/lib/node/accounts/bulkAccountLoader.js +51 -0
  352. package/lib/node/accounts/bulkUserStatsSubscription.d.ts +9 -2
  353. package/lib/node/accounts/bulkUserStatsSubscription.d.ts.map +1 -1
  354. package/lib/node/accounts/bulkUserStatsSubscription.js +9 -2
  355. package/lib/node/accounts/bulkUserSubscription.d.ts +8 -2
  356. package/lib/node/accounts/bulkUserSubscription.d.ts.map +1 -1
  357. package/lib/node/accounts/bulkUserSubscription.js +8 -2
  358. package/lib/node/accounts/customizedCadenceBulkAccountLoader.d.ts +37 -0
  359. package/lib/node/accounts/customizedCadenceBulkAccountLoader.d.ts.map +1 -1
  360. package/lib/node/accounts/customizedCadenceBulkAccountLoader.js +37 -0
  361. package/lib/node/accounts/fetch.d.ts +59 -2
  362. package/lib/node/accounts/fetch.d.ts.map +1 -1
  363. package/lib/node/accounts/fetch.js +57 -2
  364. package/lib/node/accounts/grpcAccountSubscriber.d.ts +30 -0
  365. package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
  366. package/lib/node/accounts/grpcAccountSubscriber.js +30 -0
  367. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +16 -0
  368. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  369. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.js +16 -0
  370. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +60 -1
  371. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
  372. package/lib/node/accounts/grpcMultiAccountSubscriber.js +118 -37
  373. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +32 -0
  374. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
  375. package/lib/node/accounts/grpcMultiUserAccountSubscriber.js +40 -12
  376. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +33 -0
  377. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
  378. package/lib/node/accounts/grpcProgramAccountSubscriber.js +33 -0
  379. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts +15 -0
  380. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts.map +1 -1
  381. package/lib/node/accounts/grpcUserAccountSubscriber.js +15 -0
  382. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts +15 -0
  383. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts.map +1 -1
  384. package/lib/node/accounts/grpcUserStatsAccountSubscriber.js +15 -0
  385. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts +41 -0
  386. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
  387. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +41 -0
  388. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +116 -0
  389. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  390. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +152 -1
  391. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts +34 -0
  392. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
  393. package/lib/node/accounts/laserProgramAccountSubscriber.js +34 -0
  394. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts +19 -0
  395. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
  396. package/lib/node/accounts/oneShotUserAccountSubscriber.js +19 -0
  397. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts +19 -0
  398. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
  399. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.js +19 -0
  400. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +31 -0
  401. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  402. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +31 -0
  403. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +19 -0
  404. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
  405. package/lib/node/accounts/pollingOracleAccountSubscriber.js +21 -2
  406. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +22 -0
  407. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
  408. package/lib/node/accounts/pollingTokenAccountSubscriber.js +22 -0
  409. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +32 -0
  410. package/lib/node/accounts/pollingUserAccountSubscriber.d.ts.map +1 -1
  411. package/lib/node/accounts/pollingUserAccountSubscriber.js +32 -0
  412. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +22 -0
  413. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
  414. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +22 -0
  415. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +83 -0
  416. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
  417. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +84 -1
  418. package/lib/node/accounts/testBulkAccountLoader.d.ts +8 -0
  419. package/lib/node/accounts/testBulkAccountLoader.d.ts.map +1 -1
  420. package/lib/node/accounts/testBulkAccountLoader.js +8 -0
  421. package/lib/node/accounts/types.d.ts +149 -0
  422. package/lib/node/accounts/types.d.ts.map +1 -1
  423. package/lib/node/accounts/types.js +13 -0
  424. package/lib/node/accounts/utils.d.ts +18 -0
  425. package/lib/node/accounts/utils.d.ts.map +1 -1
  426. package/lib/node/accounts/utils.js +32 -16
  427. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +41 -0
  428. package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
  429. package/lib/node/accounts/webSocketAccountSubscriber.js +41 -0
  430. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +31 -0
  431. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
  432. package/lib/node/accounts/webSocketAccountSubscriberV2.js +31 -23
  433. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +27 -0
  434. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  435. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +27 -0
  436. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +36 -0
  437. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
  438. package/lib/node/accounts/webSocketProgramAccountSubscriber.js +36 -0
  439. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +21 -0
  440. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
  441. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.js +25 -0
  442. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +21 -0
  443. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
  444. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.js +21 -0
  445. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +26 -0
  446. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
  447. package/lib/node/accounts/webSocketUserAccountSubscriber.js +26 -0
  448. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  449. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
  450. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +20 -0
  451. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +121 -0
  452. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
  453. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +123 -2
  454. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +96 -0
  455. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  456. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +108 -0
  457. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +28 -0
  458. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
  459. package/lib/node/accounts/websocketProgramUserAccountSubscriber.js +33 -0
  460. package/lib/node/addresses/marketAddresses.d.ts +10 -0
  461. package/lib/node/addresses/marketAddresses.d.ts.map +1 -1
  462. package/lib/node/addresses/marketAddresses.js +10 -0
  463. package/lib/node/addresses/pda.d.ts +214 -2
  464. package/lib/node/addresses/pda.d.ts.map +1 -1
  465. package/lib/node/addresses/pda.js +217 -5
  466. package/lib/node/adminClient.d.ts +2171 -4
  467. package/lib/node/adminClient.d.ts.map +1 -1
  468. package/lib/node/adminClient.js +2215 -4
  469. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +15 -0
  470. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  471. package/lib/node/auctionSubscriber/auctionSubscriber.js +15 -0
  472. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +19 -0
  473. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  474. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +19 -0
  475. package/lib/node/auctionSubscriber/index.d.ts +6 -0
  476. package/lib/node/auctionSubscriber/index.d.ts.map +1 -1
  477. package/lib/node/auctionSubscriber/index.js +6 -0
  478. package/lib/node/auctionSubscriber/types.d.ts +7 -0
  479. package/lib/node/auctionSubscriber/types.d.ts.map +1 -1
  480. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +33 -0
  481. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
  482. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +33 -0
  483. package/lib/node/blockhashSubscriber/index.d.ts +5 -0
  484. package/lib/node/blockhashSubscriber/index.d.ts.map +1 -1
  485. package/lib/node/blockhashSubscriber/index.js +5 -0
  486. package/lib/node/blockhashSubscriber/types.d.ts +5 -0
  487. package/lib/node/blockhashSubscriber/types.d.ts.map +1 -1
  488. package/lib/node/clock/clockSubscriber.d.ts +24 -0
  489. package/lib/node/clock/clockSubscriber.d.ts.map +1 -1
  490. package/lib/node/clock/clockSubscriber.js +22 -0
  491. package/lib/node/config.d.ts +58 -4
  492. package/lib/node/config.d.ts.map +1 -1
  493. package/lib/node/config.js +94 -28
  494. package/lib/node/constants/numericConstants.d.ts +67 -0
  495. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  496. package/lib/node/constants/numericConstants.js +68 -1
  497. package/lib/node/constants/perpMarkets.d.ts +10 -0
  498. package/lib/node/constants/perpMarkets.d.ts.map +1 -1
  499. package/lib/node/constants/perpMarkets.js +40 -908
  500. package/lib/node/constants/spotMarkets.d.ts +13 -0
  501. package/lib/node/constants/spotMarkets.d.ts.map +1 -1
  502. package/lib/node/constants/spotMarkets.js +16 -742
  503. package/lib/node/constants/txConstants.d.ts +1 -0
  504. package/lib/node/constants/txConstants.d.ts.map +1 -1
  505. package/lib/node/constants/txConstants.js +1 -0
  506. package/lib/node/core/VelocityCore.d.ts +285 -8
  507. package/lib/node/core/VelocityCore.d.ts.map +1 -1
  508. package/lib/node/core/VelocityCore.js +281 -8
  509. package/lib/node/core/instructions/deposit.d.ts +22 -0
  510. package/lib/node/core/instructions/deposit.d.ts.map +1 -1
  511. package/lib/node/core/instructions/deposit.js +22 -0
  512. package/lib/node/core/instructions/fill.d.ts +17 -0
  513. package/lib/node/core/instructions/fill.d.ts.map +1 -1
  514. package/lib/node/core/instructions/fill.js +17 -0
  515. package/lib/node/core/instructions/funding.d.ts +12 -0
  516. package/lib/node/core/instructions/funding.d.ts.map +1 -1
  517. package/lib/node/core/instructions/funding.js +12 -0
  518. package/lib/node/core/instructions/liquidation.d.ts +18 -0
  519. package/lib/node/core/instructions/liquidation.d.ts.map +1 -1
  520. package/lib/node/core/instructions/liquidation.js +18 -0
  521. package/lib/node/core/instructions/orders.d.ts +28 -0
  522. package/lib/node/core/instructions/orders.d.ts.map +1 -1
  523. package/lib/node/core/instructions/orders.js +28 -0
  524. package/lib/node/core/instructions/perpOrders.d.ts +106 -0
  525. package/lib/node/core/instructions/perpOrders.d.ts.map +1 -1
  526. package/lib/node/core/instructions/perpOrders.js +106 -0
  527. package/lib/node/core/instructions/settlement.d.ts +14 -0
  528. package/lib/node/core/instructions/settlement.d.ts.map +1 -1
  529. package/lib/node/core/instructions/settlement.js +14 -0
  530. package/lib/node/core/instructions/trigger.d.ts +15 -0
  531. package/lib/node/core/instructions/trigger.d.ts.map +1 -1
  532. package/lib/node/core/instructions/trigger.js +15 -0
  533. package/lib/node/core/instructions/withdraw.d.ts +21 -0
  534. package/lib/node/core/instructions/withdraw.d.ts.map +1 -1
  535. package/lib/node/core/instructions/withdraw.js +21 -0
  536. package/lib/node/core/remainingAccounts.d.ts +47 -3
  537. package/lib/node/core/remainingAccounts.d.ts.map +1 -1
  538. package/lib/node/core/remainingAccounts.js +20 -0
  539. package/lib/node/core/signedMsg.d.ts +38 -0
  540. package/lib/node/core/signedMsg.d.ts.map +1 -1
  541. package/lib/node/core/signedMsg.js +33 -0
  542. package/lib/node/decode/customCoder.d.ts +39 -3
  543. package/lib/node/decode/customCoder.d.ts.map +1 -1
  544. package/lib/node/decode/customCoder.js +45 -3
  545. package/lib/node/decode/user.d.ts +22 -0
  546. package/lib/node/decode/user.d.ts.map +1 -1
  547. package/lib/node/decode/user.js +27 -1
  548. package/lib/node/dlob/DLOB.d.ts +502 -53
  549. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  550. package/lib/node/dlob/DLOB.js +540 -98
  551. package/lib/node/dlob/DLOBNode.d.ts +86 -4
  552. package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
  553. package/lib/node/dlob/DLOBNode.js +37 -4
  554. package/lib/node/dlob/DLOBSubscriber.d.ts +39 -12
  555. package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
  556. package/lib/node/dlob/DLOBSubscriber.js +42 -12
  557. package/lib/node/dlob/NodeList.d.ts +69 -0
  558. package/lib/node/dlob/NodeList.d.ts.map +1 -1
  559. package/lib/node/dlob/NodeList.js +66 -0
  560. package/lib/node/dlob/orderBookLevels.d.ts +106 -13
  561. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  562. package/lib/node/dlob/orderBookLevels.js +84 -14
  563. package/lib/node/dlob/types.d.ts +15 -0
  564. package/lib/node/dlob/types.d.ts.map +1 -1
  565. package/lib/node/events/eventList.d.ts +14 -0
  566. package/lib/node/events/eventList.d.ts.map +1 -1
  567. package/lib/node/events/eventList.js +14 -0
  568. package/lib/node/events/eventSubscriber.d.ts +87 -10
  569. package/lib/node/events/eventSubscriber.d.ts.map +1 -1
  570. package/lib/node/events/eventSubscriber.js +93 -8
  571. package/lib/node/events/eventsServerLogProvider.d.ts +22 -0
  572. package/lib/node/events/eventsServerLogProvider.d.ts.map +1 -1
  573. package/lib/node/events/eventsServerLogProvider.js +27 -0
  574. package/lib/node/events/fetchLogs.d.ts +31 -0
  575. package/lib/node/events/fetchLogs.d.ts.map +1 -1
  576. package/lib/node/events/fetchLogs.js +46 -1
  577. package/lib/node/events/parse.d.ts +23 -0
  578. package/lib/node/events/parse.d.ts.map +1 -1
  579. package/lib/node/events/parse.js +23 -0
  580. package/lib/node/events/pollingLogProvider.d.ts +24 -0
  581. package/lib/node/events/pollingLogProvider.d.ts.map +1 -1
  582. package/lib/node/events/pollingLogProvider.js +24 -0
  583. package/lib/node/events/sort.d.ts +11 -0
  584. package/lib/node/events/sort.d.ts.map +1 -1
  585. package/lib/node/events/sort.js +12 -0
  586. package/lib/node/events/txEventCache.d.ts +13 -3
  587. package/lib/node/events/txEventCache.d.ts.map +1 -1
  588. package/lib/node/events/txEventCache.js +19 -7
  589. package/lib/node/events/types.d.ts +118 -2
  590. package/lib/node/events/types.d.ts.map +1 -1
  591. package/lib/node/events/types.js +11 -0
  592. package/lib/node/events/webSocketLogProvider.d.ts +23 -0
  593. package/lib/node/events/webSocketLogProvider.d.ts.map +1 -1
  594. package/lib/node/events/webSocketLogProvider.js +28 -0
  595. package/lib/node/factory/oracleClient.js +2 -2
  596. package/lib/node/idl/velocity.d.ts +150 -7
  597. package/lib/node/idl/velocity.d.ts.map +1 -1
  598. package/lib/node/idl/velocity.json +151 -8
  599. package/lib/node/keypair.d.ts +8 -0
  600. package/lib/node/keypair.d.ts.map +1 -1
  601. package/lib/node/keypair.js +8 -0
  602. package/lib/node/marginCalculation.d.ts +134 -2
  603. package/lib/node/marginCalculation.d.ts.map +1 -1
  604. package/lib/node/marginCalculation.js +121 -0
  605. package/lib/node/math/amm.d.ts +348 -29
  606. package/lib/node/math/amm.d.ts.map +1 -1
  607. package/lib/node/math/amm.js +310 -32
  608. package/lib/node/math/auction.d.ts +95 -19
  609. package/lib/node/math/auction.d.ts.map +1 -1
  610. package/lib/node/math/auction.js +118 -28
  611. package/lib/node/math/bankruptcy.d.ts +46 -0
  612. package/lib/node/math/bankruptcy.d.ts.map +1 -1
  613. package/lib/node/math/bankruptcy.js +89 -1
  614. package/lib/node/math/builder.d.ts +64 -8
  615. package/lib/node/math/builder.d.ts.map +1 -1
  616. package/lib/node/math/builder.js +71 -9
  617. package/lib/node/math/conversion.d.ts +21 -0
  618. package/lib/node/math/conversion.d.ts.map +1 -1
  619. package/lib/node/math/conversion.js +21 -0
  620. package/lib/node/math/exchangeStatus.d.ts +91 -0
  621. package/lib/node/math/exchangeStatus.d.ts.map +1 -1
  622. package/lib/node/math/exchangeStatus.js +106 -3
  623. package/lib/node/math/funding.d.ts +57 -20
  624. package/lib/node/math/funding.d.ts.map +1 -1
  625. package/lib/node/math/funding.js +63 -23
  626. package/lib/node/math/insurance.d.ts +62 -0
  627. package/lib/node/math/insurance.d.ts.map +1 -1
  628. package/lib/node/math/insurance.js +62 -0
  629. package/lib/node/math/liquidation.d.ts +127 -11
  630. package/lib/node/math/liquidation.d.ts.map +1 -1
  631. package/lib/node/math/liquidation.js +182 -19
  632. package/lib/node/math/margin.d.ts +79 -13
  633. package/lib/node/math/margin.d.ts.map +1 -1
  634. package/lib/node/math/margin.js +80 -14
  635. package/lib/node/math/market.d.ts +135 -15
  636. package/lib/node/math/market.d.ts.map +1 -1
  637. package/lib/node/math/market.js +145 -17
  638. package/lib/node/math/oracles.d.ts +113 -0
  639. package/lib/node/math/oracles.d.ts.map +1 -1
  640. package/lib/node/math/oracles.js +118 -1
  641. package/lib/node/math/orders.d.ts +115 -10
  642. package/lib/node/math/orders.d.ts.map +1 -1
  643. package/lib/node/math/orders.js +130 -19
  644. package/lib/node/math/position.d.ts +80 -33
  645. package/lib/node/math/position.d.ts.map +1 -1
  646. package/lib/node/math/position.js +80 -33
  647. package/lib/node/math/repeg.d.ts +48 -10
  648. package/lib/node/math/repeg.d.ts.map +1 -1
  649. package/lib/node/math/repeg.js +48 -10
  650. package/lib/node/math/spotBalance.d.ts +200 -5
  651. package/lib/node/math/spotBalance.d.ts.map +1 -1
  652. package/lib/node/math/spotBalance.js +239 -10
  653. package/lib/node/math/spotMarket.d.ts +36 -3
  654. package/lib/node/math/spotMarket.d.ts.map +1 -1
  655. package/lib/node/math/spotMarket.js +36 -3
  656. package/lib/node/math/spotPosition.d.ts +72 -0
  657. package/lib/node/math/spotPosition.d.ts.map +1 -1
  658. package/lib/node/math/spotPosition.js +62 -0
  659. package/lib/node/math/state.d.ts +31 -0
  660. package/lib/node/math/state.d.ts.map +1 -1
  661. package/lib/node/math/state.js +31 -0
  662. package/lib/node/math/superStake.d.ts +126 -2
  663. package/lib/node/math/superStake.d.ts.map +1 -1
  664. package/lib/node/math/superStake.js +123 -3
  665. package/lib/node/math/tiers.d.ts +29 -0
  666. package/lib/node/math/tiers.d.ts.map +1 -1
  667. package/lib/node/math/tiers.js +29 -0
  668. package/lib/node/math/trade.d.ts +102 -51
  669. package/lib/node/math/trade.d.ts.map +1 -1
  670. package/lib/node/math/trade.js +101 -55
  671. package/lib/node/math/utils.d.ts +71 -9
  672. package/lib/node/math/utils.d.ts.map +1 -1
  673. package/lib/node/math/utils.js +71 -9
  674. package/lib/node/memcmp.d.ts +94 -0
  675. package/lib/node/memcmp.d.ts.map +1 -1
  676. package/lib/node/memcmp.js +103 -2
  677. package/lib/node/oracles/oracleClientCache.d.ts +16 -0
  678. package/lib/node/oracles/oracleClientCache.d.ts.map +1 -1
  679. package/lib/node/oracles/oracleClientCache.js +16 -0
  680. package/lib/node/oracles/oracleId.d.ts +31 -0
  681. package/lib/node/oracles/oracleId.d.ts.map +1 -1
  682. package/lib/node/oracles/oracleId.js +39 -8
  683. package/lib/node/oracles/prelaunchOracleClient.d.ts +20 -0
  684. package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
  685. package/lib/node/oracles/prelaunchOracleClient.js +20 -0
  686. package/lib/node/oracles/pythClient.d.ts +31 -0
  687. package/lib/node/oracles/pythClient.d.ts.map +1 -1
  688. package/lib/node/oracles/pythClient.js +32 -1
  689. package/lib/node/oracles/pythLazerClient.d.ts +34 -0
  690. package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
  691. package/lib/node/oracles/pythLazerClient.js +35 -1
  692. package/lib/node/oracles/quoteAssetOracleClient.d.ts +18 -0
  693. package/lib/node/oracles/quoteAssetOracleClient.d.ts.map +1 -1
  694. package/lib/node/oracles/quoteAssetOracleClient.js +18 -0
  695. package/lib/node/oracles/strictOraclePrice.d.ts +21 -0
  696. package/lib/node/oracles/strictOraclePrice.d.ts.map +1 -1
  697. package/lib/node/oracles/strictOraclePrice.js +21 -0
  698. package/lib/node/oracles/types.d.ts +45 -0
  699. package/lib/node/oracles/types.d.ts.map +1 -1
  700. package/lib/node/oracles/utils.d.ts +20 -0
  701. package/lib/node/oracles/utils.d.ts.map +1 -1
  702. package/lib/node/oracles/utils.js +20 -0
  703. package/lib/node/orderParams.d.ts +42 -4
  704. package/lib/node/orderParams.d.ts.map +1 -1
  705. package/lib/node/orderParams.js +42 -4
  706. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +56 -0
  707. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  708. package/lib/node/orderSubscriber/OrderSubscriber.js +59 -0
  709. package/lib/node/orderSubscriber/PollingSubscription.d.ts +11 -0
  710. package/lib/node/orderSubscriber/PollingSubscription.d.ts.map +1 -1
  711. package/lib/node/orderSubscriber/PollingSubscription.js +11 -0
  712. package/lib/node/orderSubscriber/WebsocketSubscription.d.ts +18 -0
  713. package/lib/node/orderSubscriber/WebsocketSubscription.d.ts.map +1 -1
  714. package/lib/node/orderSubscriber/WebsocketSubscription.js +18 -0
  715. package/lib/node/orderSubscriber/grpcSubscription.d.ts +16 -0
  716. package/lib/node/orderSubscriber/grpcSubscription.d.ts.map +1 -1
  717. package/lib/node/orderSubscriber/grpcSubscription.js +16 -0
  718. package/lib/node/orderSubscriber/types.d.ts +9 -0
  719. package/lib/node/orderSubscriber/types.d.ts.map +1 -1
  720. package/lib/node/priorityFee/averageOverSlotsStrategy.d.ts +1 -0
  721. package/lib/node/priorityFee/averageOverSlotsStrategy.d.ts.map +1 -1
  722. package/lib/node/priorityFee/averageOverSlotsStrategy.js +1 -0
  723. package/lib/node/priorityFee/averageStrategy.d.ts +1 -0
  724. package/lib/node/priorityFee/averageStrategy.d.ts.map +1 -1
  725. package/lib/node/priorityFee/averageStrategy.js +1 -0
  726. package/lib/node/priorityFee/ewmaStrategy.d.ts +10 -0
  727. package/lib/node/priorityFee/ewmaStrategy.d.ts.map +1 -1
  728. package/lib/node/priorityFee/ewmaStrategy.js +10 -0
  729. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts +13 -0
  730. package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts.map +1 -1
  731. package/lib/node/priorityFee/heliusPriorityFeeMethod.js +9 -2
  732. package/lib/node/priorityFee/maxOverSlotsStrategy.d.ts +1 -0
  733. package/lib/node/priorityFee/maxOverSlotsStrategy.d.ts.map +1 -1
  734. package/lib/node/priorityFee/maxOverSlotsStrategy.js +1 -0
  735. package/lib/node/priorityFee/maxStrategy.d.ts +1 -0
  736. package/lib/node/priorityFee/maxStrategy.d.ts.map +1 -1
  737. package/lib/node/priorityFee/maxStrategy.js +1 -0
  738. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +39 -0
  739. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
  740. package/lib/node/priorityFee/priorityFeeSubscriber.js +39 -0
  741. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts +20 -1
  742. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts.map +1 -1
  743. package/lib/node/priorityFee/priorityFeeSubscriberMap.js +21 -2
  744. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +12 -0
  745. package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts.map +1 -1
  746. package/lib/node/priorityFee/solanaPriorityFeeMethod.js +10 -0
  747. package/lib/node/priorityFee/types.d.ts +32 -0
  748. package/lib/node/priorityFee/types.d.ts.map +1 -1
  749. package/lib/node/priorityFee/types.js +5 -0
  750. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts +11 -0
  751. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts.map +1 -1
  752. package/lib/node/priorityFee/velocityPriorityFeeMethod.js +8 -0
  753. package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
  754. package/lib/node/pyth/pythLazerSubscriber.js +37 -27
  755. package/lib/node/slot/SlotSubscriber.d.ts +18 -0
  756. package/lib/node/slot/SlotSubscriber.d.ts.map +1 -1
  757. package/lib/node/slot/SlotSubscriber.js +16 -0
  758. package/lib/node/slot/SlothashSubscriber.d.ts +26 -0
  759. package/lib/node/slot/SlothashSubscriber.d.ts.map +1 -1
  760. package/lib/node/slot/SlothashSubscriber.js +25 -1
  761. package/lib/node/tx/baseTxSender.d.ts +163 -0
  762. package/lib/node/tx/baseTxSender.d.ts.map +1 -1
  763. package/lib/node/tx/baseTxSender.js +174 -6
  764. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.d.ts +12 -0
  765. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.d.ts.map +1 -1
  766. package/lib/node/tx/blockhashFetcher/baseBlockhashFetcher.js +12 -0
  767. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts +15 -0
  768. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.d.ts.map +1 -1
  769. package/lib/node/tx/blockhashFetcher/cachedBlockhashFetcher.js +15 -0
  770. package/lib/node/tx/blockhashFetcher/types.d.ts +4 -0
  771. package/lib/node/tx/blockhashFetcher/types.d.ts.map +1 -1
  772. package/lib/node/tx/fastSingleTxSender.d.ts +47 -0
  773. package/lib/node/tx/fastSingleTxSender.d.ts.map +1 -1
  774. package/lib/node/tx/fastSingleTxSender.js +48 -1
  775. package/lib/node/tx/forwardOnlyTxSender.d.ts +48 -0
  776. package/lib/node/tx/forwardOnlyTxSender.d.ts.map +1 -1
  777. package/lib/node/tx/forwardOnlyTxSender.js +48 -0
  778. package/lib/node/tx/reportTransactionError.d.ts +18 -6
  779. package/lib/node/tx/reportTransactionError.d.ts.map +1 -1
  780. package/lib/node/tx/reportTransactionError.js +18 -6
  781. package/lib/node/tx/retryTxSender.d.ts +40 -0
  782. package/lib/node/tx/retryTxSender.d.ts.map +1 -1
  783. package/lib/node/tx/retryTxSender.js +39 -0
  784. package/lib/node/tx/txHandler.d.ts +146 -35
  785. package/lib/node/tx/txHandler.d.ts.map +1 -1
  786. package/lib/node/tx/txHandler.js +132 -32
  787. package/lib/node/tx/txParamProcessor.d.ts +47 -0
  788. package/lib/node/tx/txParamProcessor.d.ts.map +1 -1
  789. package/lib/node/tx/txParamProcessor.js +47 -0
  790. package/lib/node/tx/types.d.ts +46 -0
  791. package/lib/node/tx/types.d.ts.map +1 -1
  792. package/lib/node/tx/types.js +5 -0
  793. package/lib/node/tx/utils.d.ts +26 -0
  794. package/lib/node/tx/utils.d.ts.map +1 -1
  795. package/lib/node/tx/utils.js +26 -0
  796. package/lib/node/tx/whileValidTxSender.d.ts +82 -0
  797. package/lib/node/tx/whileValidTxSender.d.ts.map +1 -1
  798. package/lib/node/tx/whileValidTxSender.js +81 -0
  799. package/lib/node/types.d.ts +785 -13
  800. package/lib/node/types.d.ts.map +1 -1
  801. package/lib/node/types.js +126 -9
  802. package/lib/node/user.d.ts +660 -84
  803. package/lib/node/user.d.ts.map +1 -1
  804. package/lib/node/user.js +816 -97
  805. package/lib/node/userMap/PollingSubscription.d.ts +10 -0
  806. package/lib/node/userMap/PollingSubscription.d.ts.map +1 -1
  807. package/lib/node/userMap/PollingSubscription.js +14 -2
  808. package/lib/node/userMap/WebsocketSubscription.d.ts +9 -0
  809. package/lib/node/userMap/WebsocketSubscription.d.ts.map +1 -1
  810. package/lib/node/userMap/WebsocketSubscription.js +9 -0
  811. package/lib/node/userMap/grpcSubscription.d.ts +8 -0
  812. package/lib/node/userMap/grpcSubscription.d.ts.map +1 -1
  813. package/lib/node/userMap/grpcSubscription.js +8 -0
  814. package/lib/node/userMap/referrerMap.d.ts +72 -2
  815. package/lib/node/userMap/referrerMap.d.ts.map +1 -1
  816. package/lib/node/userMap/referrerMap.js +84 -2
  817. package/lib/node/userMap/revenueShareEscrowMap.d.ts +37 -10
  818. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  819. package/lib/node/userMap/revenueShareEscrowMap.js +38 -11
  820. package/lib/node/userMap/userMap.d.ts +81 -3
  821. package/lib/node/userMap/userMap.d.ts.map +1 -1
  822. package/lib/node/userMap/userMap.js +81 -4
  823. package/lib/node/userMap/userMapConfig.d.ts +23 -0
  824. package/lib/node/userMap/userMapConfig.d.ts.map +1 -1
  825. package/lib/node/userMap/userStatsMap.d.ts +22 -0
  826. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  827. package/lib/node/userMap/userStatsMap.js +22 -0
  828. package/lib/node/userName.d.ts +16 -0
  829. package/lib/node/userName.d.ts.map +1 -1
  830. package/lib/node/userName.js +16 -0
  831. package/lib/node/userStats.d.ts +28 -1
  832. package/lib/node/userStats.d.ts.map +1 -1
  833. package/lib/node/userStats.js +28 -1
  834. package/lib/node/util/TransactionConfirmationManager.d.ts +33 -0
  835. package/lib/node/util/TransactionConfirmationManager.d.ts.map +1 -1
  836. package/lib/node/util/TransactionConfirmationManager.js +33 -0
  837. package/lib/node/util/chainClock.d.ts +24 -0
  838. package/lib/node/util/chainClock.d.ts.map +1 -1
  839. package/lib/node/util/chainClock.js +20 -0
  840. package/lib/node/util/computeUnits.d.ts +32 -0
  841. package/lib/node/util/computeUnits.d.ts.map +1 -1
  842. package/lib/node/util/computeUnits.js +32 -0
  843. package/lib/node/util/digest.d.ts +17 -0
  844. package/lib/node/util/digest.d.ts.map +1 -1
  845. package/lib/node/util/digest.js +17 -0
  846. package/lib/node/util/ed25519Utils.d.ts +12 -2
  847. package/lib/node/util/ed25519Utils.d.ts.map +1 -1
  848. package/lib/node/util/ed25519Utils.js +12 -2
  849. package/lib/node/util/promiseTimeout.d.ts +9 -0
  850. package/lib/node/util/promiseTimeout.d.ts.map +1 -1
  851. package/lib/node/util/promiseTimeout.js +9 -0
  852. package/lib/node/velocityClient.d.ts +3363 -220
  853. package/lib/node/velocityClient.d.ts.map +1 -1
  854. package/lib/node/velocityClient.js +3514 -275
  855. package/lib/node/wallet.d.ts +37 -0
  856. package/lib/node/wallet.d.ts.map +1 -1
  857. package/lib/node/wallet.js +37 -0
  858. package/package.json +8 -3
  859. package/.prettierignore +0 -1
  860. package/CHANGELOG.md +0 -81
  861. package/build-browser.js +0 -58
  862. package/bunfig.toml +0 -3
  863. package/esbuild-shims.js +0 -12
  864. package/scripts/deposit-isolated-positions.ts +0 -110
  865. package/scripts/find-flagged-users.ts +0 -213
  866. package/scripts/grpc-client-test-comparison.ts +0 -372
  867. package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
  868. package/scripts/postbuild.js +0 -95
  869. package/scripts/single-grpc-client-test.ts +0 -284
  870. package/scripts/withdraw-isolated-positions.ts +0 -174
  871. package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
  872. package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
  873. package/src/accounts/basicUserAccountSubscriber.ts +0 -61
  874. package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -69
  875. package/src/accounts/bulkAccountLoader.ts +0 -306
  876. package/src/accounts/bulkUserStatsSubscription.ts +0 -33
  877. package/src/accounts/bulkUserSubscription.ts +0 -33
  878. package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -213
  879. package/src/accounts/fetch.ts +0 -143
  880. package/src/accounts/grpcAccountSubscriber.ts +0 -195
  881. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -57
  882. package/src/accounts/grpcMultiAccountSubscriber.ts +0 -483
  883. package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -290
  884. package/src/accounts/grpcProgramAccountSubscriber.ts +0 -231
  885. package/src/accounts/grpcUserAccountSubscriber.ts +0 -48
  886. package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -50
  887. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -216
  888. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -782
  889. package/src/accounts/laserProgramAccountSubscriber.ts +0 -232
  890. package/src/accounts/oneShotUserAccountSubscriber.ts +0 -69
  891. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -75
  892. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -192
  893. package/src/accounts/pollingOracleAccountSubscriber.ts +0 -132
  894. package/src/accounts/pollingTokenAccountSubscriber.ts +0 -125
  895. package/src/accounts/pollingUserAccountSubscriber.ts +0 -166
  896. package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -158
  897. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -691
  898. package/src/accounts/testBulkAccountLoader.ts +0 -51
  899. package/src/accounts/types.ts +0 -279
  900. package/src/accounts/utils.ts +0 -72
  901. package/src/accounts/webSocketAccountSubscriber.ts +0 -263
  902. package/src/accounts/webSocketAccountSubscriberV2.ts +0 -528
  903. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -144
  904. package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -208
  905. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1022
  906. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1021
  907. package/src/accounts/webSocketUserAccountSubscriber.ts +0 -113
  908. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -111
  909. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -740
  910. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -787
  911. package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -94
  912. package/src/addresses/marketAddresses.ts +0 -18
  913. package/src/addresses/pda.ts +0 -404
  914. package/src/adminClient.ts +0 -5984
  915. package/src/assert/assert.ts +0 -5
  916. package/src/auctionSubscriber/auctionSubscriber.ts +0 -71
  917. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -80
  918. package/src/auctionSubscriber/index.ts +0 -3
  919. package/src/auctionSubscriber/types.ts +0 -23
  920. package/src/bankrun/bankrunConnection.ts +0 -630
  921. package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -127
  922. package/src/blockhashSubscriber/index.ts +0 -1
  923. package/src/blockhashSubscriber/types.ts +0 -12
  924. package/src/clock/clockSubscriber.ts +0 -122
  925. package/src/config.ts +0 -225
  926. package/src/constants/index.ts +0 -9
  927. package/src/constants/numericConstants.ts +0 -124
  928. package/src/constants/perpMarkets.ts +0 -1042
  929. package/src/constants/spotMarkets.ts +0 -874
  930. package/src/constants/txConstants.ts +0 -1
  931. package/src/constituentMap/constituentMap.ts +0 -305
  932. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
  933. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
  934. package/src/core/VelocityCore.ts +0 -328
  935. package/src/core/index.ts +0 -12
  936. package/src/core/instructions/deposit.ts +0 -42
  937. package/src/core/instructions/fill.ts +0 -34
  938. package/src/core/instructions/funding.ts +0 -21
  939. package/src/core/instructions/liquidation.ts +0 -37
  940. package/src/core/instructions/orders.ts +0 -56
  941. package/src/core/instructions/perpOrders.ts +0 -206
  942. package/src/core/instructions/settlement.ts +0 -26
  943. package/src/core/instructions/trigger.ts +0 -26
  944. package/src/core/instructions/withdraw.ts +0 -44
  945. package/src/core/remainingAccounts.ts +0 -276
  946. package/src/core/signedMsg.ts +0 -71
  947. package/src/decode/customCoder.ts +0 -105
  948. package/src/decode/user.ts +0 -379
  949. package/src/dlob/DLOB.ts +0 -2222
  950. package/src/dlob/DLOBNode.ts +0 -213
  951. package/src/dlob/DLOBSubscriber.ts +0 -232
  952. package/src/dlob/NodeList.ts +0 -175
  953. package/src/dlob/orderBookLevels.ts +0 -601
  954. package/src/dlob/types.ts +0 -22
  955. package/src/events/eventList.ts +0 -100
  956. package/src/events/eventSubscriber.ts +0 -440
  957. package/src/events/eventsServerLogProvider.ts +0 -161
  958. package/src/events/fetchLogs.ts +0 -169
  959. package/src/events/parse.ts +0 -248
  960. package/src/events/pollingLogProvider.ts +0 -89
  961. package/src/events/sort.ts +0 -39
  962. package/src/events/txEventCache.ts +0 -80
  963. package/src/events/types.ts +0 -217
  964. package/src/events/webSocketLogProvider.ts +0 -123
  965. package/src/factory/bigNum.ts +0 -709
  966. package/src/factory/oracleClient.ts +0 -73
  967. package/src/idl/pyth.json +0 -142
  968. package/src/idl/pyth.ts +0 -97
  969. package/src/idl/pyth_solana_receiver.json +0 -628
  970. package/src/idl/token_faucet.json +0 -229
  971. package/src/idl/token_faucet.ts +0 -197
  972. package/src/idl/velocity.json +0 -23974
  973. package/src/idl/velocity.ts +0 -23980
  974. package/src/index.ts +0 -150
  975. package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
  976. package/src/isomorphic/README.md +0 -19
  977. package/src/isomorphic/anchor.browser.ts +0 -44
  978. package/src/isomorphic/anchor.node.ts +0 -1
  979. package/src/isomorphic/anchor.ts +0 -1
  980. package/src/isomorphic/anchor29.browser.ts +0 -24
  981. package/src/isomorphic/anchor29.node.ts +0 -1
  982. package/src/isomorphic/anchor29.ts +0 -1
  983. package/src/isomorphic/grpc.browser.ts +0 -4
  984. package/src/isomorphic/grpc.node.ts +0 -130
  985. package/src/isomorphic/grpc.ts +0 -1
  986. package/src/jupiter/jupiterClient.ts +0 -502
  987. package/src/keypair.ts +0 -24
  988. package/src/margin/README.md +0 -138
  989. package/src/marginCalculation.ts +0 -256
  990. package/src/marinade/idl/idl.json +0 -1962
  991. package/src/marinade/index.ts +0 -73
  992. package/src/marinade/types.ts +0 -3925
  993. package/src/math/amm.ts +0 -1423
  994. package/src/math/auction.ts +0 -371
  995. package/src/math/bankruptcy.ts +0 -35
  996. package/src/math/builder.ts +0 -64
  997. package/src/math/conversion.ts +0 -24
  998. package/src/math/exchangeStatus.ts +0 -146
  999. package/src/math/funding.ts +0 -458
  1000. package/src/math/insurance.ts +0 -109
  1001. package/src/math/liquidation.ts +0 -223
  1002. package/src/math/margin.ts +0 -261
  1003. package/src/math/market.ts +0 -356
  1004. package/src/math/oracles.ts +0 -353
  1005. package/src/math/orders.ts +0 -378
  1006. package/src/math/position.ts +0 -334
  1007. package/src/math/repeg.ts +0 -185
  1008. package/src/math/spotBalance.ts +0 -756
  1009. package/src/math/spotMarket.ts +0 -82
  1010. package/src/math/spotPosition.ts +0 -191
  1011. package/src/math/state.ts +0 -40
  1012. package/src/math/superStake.ts +0 -479
  1013. package/src/math/tiers.ts +0 -44
  1014. package/src/math/trade.ts +0 -809
  1015. package/src/math/utils.ts +0 -121
  1016. package/src/memcmp.ts +0 -177
  1017. package/src/oracles/oracleClientCache.ts +0 -25
  1018. package/src/oracles/oracleId.ts +0 -66
  1019. package/src/oracles/prelaunchOracleClient.ts +0 -43
  1020. package/src/oracles/pythClient.ts +0 -94
  1021. package/src/oracles/pythLazerClient.ts +0 -107
  1022. package/src/oracles/quoteAssetOracleClient.ts +0 -25
  1023. package/src/oracles/strictOraclePrice.ts +0 -19
  1024. package/src/oracles/types.ts +0 -37
  1025. package/src/oracles/utils.ts +0 -25
  1026. package/src/orderParams.ts +0 -79
  1027. package/src/orderSubscriber/OrderSubscriber.ts +0 -322
  1028. package/src/orderSubscriber/PollingSubscription.ts +0 -39
  1029. package/src/orderSubscriber/WebsocketSubscription.ts +0 -119
  1030. package/src/orderSubscriber/grpcSubscription.ts +0 -139
  1031. package/src/orderSubscriber/index.ts +0 -7
  1032. package/src/orderSubscriber/types.ts +0 -55
  1033. package/src/priorityFee/averageOverSlotsStrategy.ts +0 -16
  1034. package/src/priorityFee/averageStrategy.ts +0 -12
  1035. package/src/priorityFee/ewmaStrategy.ts +0 -41
  1036. package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -57
  1037. package/src/priorityFee/index.ts +0 -16
  1038. package/src/priorityFee/maxOverSlotsStrategy.ts +0 -17
  1039. package/src/priorityFee/maxStrategy.ts +0 -7
  1040. package/src/priorityFee/priorityFeeSubscriber.ts +0 -289
  1041. package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -115
  1042. package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -34
  1043. package/src/priorityFee/types.ts +0 -64
  1044. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -42
  1045. package/src/pyth/constants.ts +0 -9
  1046. package/src/pyth/index.ts +0 -15
  1047. package/src/pyth/pythLazerSubscriber.ts +0 -365
  1048. package/src/pyth/types.ts +0 -4451
  1049. package/src/pyth/utils.ts +0 -13
  1050. package/src/slot/SlotSubscriber.ts +0 -108
  1051. package/src/slot/SlothashSubscriber.ts +0 -137
  1052. package/src/swap/UnifiedSwapClient.ts +0 -315
  1053. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
  1054. package/src/swift/index.ts +0 -10
  1055. package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
  1056. package/src/swift/swiftOrderSubscriber.ts +0 -351
  1057. package/src/testClient.ts +0 -42
  1058. package/src/titan/titanClient.ts +0 -438
  1059. package/src/token/index.ts +0 -13
  1060. package/src/tokenFaucet.ts +0 -296
  1061. package/src/tx/baseTxSender.ts +0 -471
  1062. package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -19
  1063. package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -90
  1064. package/src/tx/blockhashFetcher/types.ts +0 -5
  1065. package/src/tx/fastSingleTxSender.ts +0 -146
  1066. package/src/tx/forwardOnlyTxSender.ts +0 -145
  1067. package/src/tx/priorityFeeCalculator.ts +0 -117
  1068. package/src/tx/reportTransactionError.ts +0 -164
  1069. package/src/tx/retryTxSender.ts +0 -137
  1070. package/src/tx/txHandler.ts +0 -898
  1071. package/src/tx/txParamProcessor.ts +0 -178
  1072. package/src/tx/types.ts +0 -71
  1073. package/src/tx/utils.ts +0 -107
  1074. package/src/tx/whileValidTxSender.ts +0 -295
  1075. package/src/types.ts +0 -1822
  1076. package/src/user.ts +0 -4557
  1077. package/src/userConfig.ts +0 -38
  1078. package/src/userMap/PollingSubscription.ts +0 -47
  1079. package/src/userMap/WebsocketSubscription.ts +0 -84
  1080. package/src/userMap/grpcSubscription.ts +0 -85
  1081. package/src/userMap/referrerMap.ts +0 -271
  1082. package/src/userMap/revenueShareEscrowMap.ts +0 -315
  1083. package/src/userMap/userMap.ts +0 -706
  1084. package/src/userMap/userMapConfig.ts +0 -69
  1085. package/src/userMap/userStatsMap.ts +0 -371
  1086. package/src/userName.ts +0 -21
  1087. package/src/userStats.ts +0 -132
  1088. package/src/userStatsConfig.ts +0 -35
  1089. package/src/util/TransactionConfirmationManager.ts +0 -300
  1090. package/src/util/chainClock.ts +0 -41
  1091. package/src/util/computeUnits.ts +0 -69
  1092. package/src/util/digest.ts +0 -16
  1093. package/src/util/ed25519Utils.ts +0 -85
  1094. package/src/util/promiseTimeout.ts +0 -14
  1095. package/src/velocityClient.ts +0 -11612
  1096. package/src/velocityClientConfig.ts +0 -119
  1097. package/src/wallet.ts +0 -54
  1098. package/tests/VelocityCore/decode.test.ts +0 -16
  1099. package/tests/VelocityCore/fill_trigger.test.ts +0 -73
  1100. package/tests/VelocityCore/instructions.test.ts +0 -46
  1101. package/tests/VelocityCore/pdas.test.ts +0 -30
  1102. package/tests/VelocityCore/perp_orders.test.ts +0 -205
  1103. package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
  1104. package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
  1105. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
  1106. package/tests/amm/test.ts +0 -2300
  1107. package/tests/auctions/test.ts +0 -81
  1108. package/tests/bn/test.ts +0 -355
  1109. package/tests/ci/verifyConstants.ts +0 -393
  1110. package/tests/decode/test.ts +0 -262
  1111. package/tests/decode/userAccountBufferStrings.ts +0 -102
  1112. package/tests/dlob/helpers.ts +0 -748
  1113. package/tests/dlob/test.ts +0 -6969
  1114. package/tests/events/parseLogsForCuUsage.ts +0 -139
  1115. package/tests/insurance/test.ts +0 -40
  1116. package/tests/spot/test.ts +0 -226
  1117. package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
  1118. package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
  1119. package/tests/tx/priorityFeeCalculator.ts +0 -77
  1120. package/tests/tx/priorityFeeStrategy.ts +0 -95
  1121. package/tests/user/getMarginCalculation.ts +0 -361
  1122. package/tests/user/helpers.ts +0 -184
  1123. package/tests/user/liquidations.ts +0 -129
  1124. package/tests/user/marginCalculations.test.ts +0 -321
  1125. package/tests/user/test.ts +0 -829
  1126. package/tsconfig.browser.json +0 -18
  1127. package/tsconfig.json +0 -36
package/tests/amm/test.ts DELETED
@@ -1,2300 +0,0 @@
1
- import {
2
- BN,
3
- PEG_PRECISION,
4
- PRICE_PRECISION,
5
- AMM_RESERVE_PRECISION,
6
- QUOTE_PRECISION,
7
- PERCENTAGE_PRECISION,
8
- calculateSpread,
9
- calculateSpreadBN,
10
- calculateSpreadFundingBiasScale,
11
- ZERO,
12
- sigNum,
13
- ONE,
14
- calculateLiveOracleStd,
15
- calculateLiveOracleTwap,
16
- calculateInventoryScale,
17
- calculateAllEstimatedFundingRate,
18
- calculateLongShortFundingRateAndLiveTwaps,
19
- getVammL2Generator,
20
- BASE_PRECISION,
21
- PerpMarketAccount,
22
- L2Level,
23
- calculateUpdatedAMM,
24
- calculateMarketOpenBidAsk,
25
- calculateSpreadReserves,
26
- calculatePrice,
27
- BID_ASK_SPREAD_PRECISION,
28
- squareRootBN,
29
- calculateReferencePriceOffset,
30
- calculateInventoryLiquidityRatio,
31
- ContractTier,
32
- isOracleValid,
33
- OracleGuardRails,
34
- getNewOracleConfPct,
35
- MMOraclePriceData,
36
- OraclePriceData,
37
- // calculateReservePrice,
38
- } from '../../src';
39
- import { mockPerpMarkets } from '../dlob/helpers';
40
-
41
- import { assert } from '../../src/assert/assert';
42
- import * as _ from 'lodash';
43
-
44
- class AMMSpreadTerms {
45
- longVolSpread: number;
46
- shortVolSpread: number;
47
- longSpreadwPS: number;
48
- shortSpreadwPS: number;
49
- maxTargetSpread: number;
50
- inventorySpreadScale: number;
51
- longSpreadwInvScale: number;
52
- shortSpreadwInvScale: number;
53
- effectiveLeverage: number;
54
- effectiveLeverageCapped: number;
55
- longSpreadwEL: number;
56
- shortSpreadwEL: number;
57
- revenueRetreatAmount: number;
58
- halfRevenueRetreatAmount: number;
59
- longSpreadwRevRetreat: number;
60
- shortSpreadwRevRetreat: number;
61
- fundingBiasScale: number;
62
- longSpreadwFundingBias: number;
63
- shortSpreadwFundingBias: number;
64
- totalSpread: number;
65
- longSpread: number;
66
- shortSpread: number;
67
- }
68
-
69
- describe('AMM Tests', () => {
70
- it('Spread Maths', () => {
71
- let iscale = calculateInventoryScale(
72
- ZERO,
73
- AMM_RESERVE_PRECISION,
74
- AMM_RESERVE_PRECISION.div(new BN(2)),
75
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
76
- 250,
77
- 30000
78
- );
79
- assert(iscale == 1);
80
-
81
- iscale = calculateInventoryScale(
82
- ONE,
83
- AMM_RESERVE_PRECISION,
84
- AMM_RESERVE_PRECISION.div(new BN(2)),
85
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
86
- 250,
87
- 30000
88
- );
89
- assert(iscale == 1);
90
-
91
- let baa = new BN(1000);
92
- iscale = calculateInventoryScale(
93
- baa,
94
- AMM_RESERVE_PRECISION.add(baa),
95
- AMM_RESERVE_PRECISION.div(new BN(2)),
96
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
97
- 250,
98
- 30000
99
- );
100
- console.log(iscale);
101
- assert(iscale == 1.00024);
102
-
103
- baa = new BN(100000);
104
- iscale = calculateInventoryScale(
105
- baa,
106
- AMM_RESERVE_PRECISION.add(baa),
107
- AMM_RESERVE_PRECISION.div(new BN(2)),
108
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
109
- 250,
110
- 30000
111
- );
112
- console.log(iscale);
113
- assert(iscale == 1.024);
114
-
115
- baa = new BN(1000000);
116
- iscale = calculateInventoryScale(
117
- baa,
118
- AMM_RESERVE_PRECISION.add(baa),
119
- AMM_RESERVE_PRECISION.div(new BN(2)),
120
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
121
- 250,
122
- 30000
123
- );
124
- console.log(iscale);
125
- assert(iscale == 1.24048);
126
-
127
- baa = new BN(10000000); // 2%
128
- iscale = calculateInventoryScale(
129
- baa,
130
- AMM_RESERVE_PRECISION.add(baa),
131
- AMM_RESERVE_PRECISION.div(new BN(2)),
132
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
133
- 250,
134
- 30000
135
- );
136
- console.log(iscale);
137
- assert(iscale == 3.44896);
138
-
139
- baa = new BN(50000000); // 10%
140
- iscale = calculateInventoryScale(
141
- baa,
142
- AMM_RESERVE_PRECISION.add(baa),
143
- AMM_RESERVE_PRECISION.div(new BN(2)),
144
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
145
- 250,
146
- 30000
147
- );
148
- console.log(iscale);
149
- assert(iscale == 14.33332);
150
-
151
- baa = AMM_RESERVE_PRECISION.div(new BN(4)); // 50%
152
- iscale = calculateInventoryScale(
153
- baa,
154
- AMM_RESERVE_PRECISION.add(baa),
155
- AMM_RESERVE_PRECISION.div(new BN(2)),
156
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
157
- 250,
158
- 30000
159
- );
160
- console.log(iscale);
161
- assert(iscale == 120); //100%
162
-
163
- baa = AMM_RESERVE_PRECISION.div(new BN(4)); // 50%
164
- iscale = calculateInventoryScale(
165
- baa,
166
- AMM_RESERVE_PRECISION.add(baa),
167
- AMM_RESERVE_PRECISION.div(new BN(2)),
168
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
169
- 250,
170
- 30000 * 2
171
- );
172
- console.log(iscale);
173
- assert(iscale == 120 * 2); //100%
174
-
175
- baa = AMM_RESERVE_PRECISION.div(new BN(5)); // <50%
176
- iscale = calculateInventoryScale(
177
- baa,
178
- AMM_RESERVE_PRECISION.add(baa),
179
- AMM_RESERVE_PRECISION.div(new BN(2)),
180
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
181
- 250,
182
- 30000 * 2
183
- );
184
- assert(iscale == 160.99984);
185
-
186
- baa = new BN(855329058);
187
- iscale = calculateInventoryScale(
188
- baa,
189
- AMM_RESERVE_PRECISION.add(baa),
190
- AMM_RESERVE_PRECISION.div(new BN(2)),
191
- AMM_RESERVE_PRECISION,
192
- 250,
193
- 30000
194
- ); // >100%
195
- assert(iscale == 120);
196
- assert(250 * iscale == 30000);
197
-
198
- iscale = calculateInventoryScale(
199
- baa,
200
- AMM_RESERVE_PRECISION.add(baa), // ~85%
201
- AMM_RESERVE_PRECISION.div(new BN(2)),
202
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
203
- 250,
204
- 30000
205
- );
206
- assert(iscale == 120);
207
- assert(250 * iscale == 30000);
208
-
209
- baa = new BN(-855329058); // ~85%
210
- iscale = calculateInventoryScale(
211
- baa,
212
- AMM_RESERVE_PRECISION.add(baa),
213
- AMM_RESERVE_PRECISION.div(new BN(2)),
214
- AMM_RESERVE_PRECISION.mul(new BN(3)).div(new BN(2)),
215
- 250,
216
- 30000
217
- );
218
- assert(iscale == 120);
219
- assert(250 * iscale == 30000);
220
-
221
- // 'bonk' scale
222
- iscale = calculateInventoryScale(
223
- new BN('30228000000000000'),
224
- new BN('2496788386034912600'),
225
- new BN('2443167585342470000'),
226
- new BN('2545411471321696000'),
227
- 3500,
228
- 100000
229
- );
230
- console.log(iscale);
231
- console.log((3500 * iscale) / 1e6);
232
- assert(iscale == 18.762285);
233
- assert((3500 * iscale) / 1e6 == 0.06566799749999999); //6.5%
234
- });
235
-
236
- it('Funding Bias Scale', () => {
237
- // values pinned to the program's calculate_spread_funding_bias_scale tests
238
- const twap = new BN(100).mul(PRICE_PRECISION); // $100
239
- // hourly rate matching the funding offset floor f_ref (~10.95%/yr):
240
- // fNorm = 1_250_000 * 1e6 / 1e8 * 24 = 300_000
241
- const saturatingRate = new BN(1_250_000);
242
- const qAmmLong = BASE_PRECISION.neg(); // users net short
243
- const qAmmShort = BASE_PRECISION; // users net long
244
- const one = BID_ASK_SPREAD_PRECISION.toNumber();
245
-
246
- // s = 0 disables
247
- assert(
248
- calculateSpreadFundingBiasScale(qAmmLong, saturatingRate, twap, 0) == one
249
- );
250
-
251
- // f * q >= 0: vAMM receives (or zero rate/inventory), β = 1
252
- assert(
253
- calculateSpreadFundingBiasScale(qAmmShort, saturatingRate, twap, 50) ==
254
- one
255
- );
256
- assert(
257
- calculateSpreadFundingBiasScale(
258
- qAmmLong,
259
- saturatingRate.neg(),
260
- twap,
261
- 50
262
- ) == one
263
- );
264
- assert(
265
- calculateSpreadFundingBiasScale(ZERO, saturatingRate, twap, 50) == one
266
- );
267
- assert(calculateSpreadFundingBiasScale(qAmmLong, ZERO, twap, 50) == one);
268
-
269
- // paying at f_ref: ρ ~= 1, β ~= 1 + s/100
270
- assert(
271
- calculateSpreadFundingBiasScale(qAmmLong, saturatingRate, twap, 50) ==
272
- 1_499_950
273
- );
274
- assert(
275
- calculateSpreadFundingBiasScale(
276
- qAmmShort,
277
- saturatingRate.neg(),
278
- twap,
279
- 50
280
- ) == 1_499_950
281
- );
282
-
283
- // half ramp: β = 1 + s/100 * 0.5
284
- assert(
285
- calculateSpreadFundingBiasScale(
286
- qAmmLong,
287
- saturatingRate.divn(2),
288
- twap,
289
- 50
290
- ) == 1_249_975
291
- );
292
-
293
- // past f_ref the ramp clamps at 1: β = 1 + s/100 exactly
294
- assert(
295
- calculateSpreadFundingBiasScale(
296
- qAmmLong,
297
- saturatingRate.muln(10),
298
- twap,
299
- 100
300
- ) ==
301
- 2 * one
302
- );
303
-
304
- // integration: paying side doubles at s = 100, other side untouched,
305
- // mirrors the program's calculate_spread_funding_bias_tests
306
- const calc = (rate: BN, s: number) =>
307
- calculateSpreadBN(
308
- 1000, // baseSpread
309
- ZERO,
310
- ZERO,
311
- 2000, // maxSpread
312
- AMM_RESERVE_PRECISION.muln(10),
313
- AMM_RESERVE_PRECISION.muln(10),
314
- new BN(34000000),
315
- new BN(-1000), // tiny vAMM-long inventory so σ = λ = 1
316
- new BN(34562304),
317
- QUOTE_PRECISION.muln(10),
318
- ZERO,
319
- AMM_RESERVE_PRECISION.muln(10),
320
- ZERO,
321
- AMM_RESERVE_PRECISION.muln(100000),
322
- ZERO,
323
- ZERO,
324
- ZERO,
325
- ZERO,
326
- ZERO,
327
- 0,
328
- rate,
329
- twap,
330
- s
331
- ) as [number, number];
332
-
333
- const [long0, short0] = calc(saturatingRate.muln(10), 0);
334
- assert(long0 == 500);
335
- assert(short0 == 500);
336
-
337
- const [long1, short1] = calc(saturatingRate.muln(10), 100);
338
- assert(long1 == long0);
339
- assert(short1 == short0 * 2);
340
-
341
- const [long2, short2] = calc(saturatingRate.muln(10).neg(), 100);
342
- assert(long2 == long0);
343
- assert(short2 == short0);
344
- });
345
-
346
- it('Various Spreads', () => {
347
- const baseSpread: number = 0.025 * 1e6;
348
- const lastOracleReservePriceSpreadPct: BN = ZERO;
349
- const lastOracleConfPct: BN = ZERO;
350
- const maxSpread: number = 0.03 * 1e6;
351
- const quoteAssetReserve: BN = new BN(
352
- AMM_RESERVE_PRECISION.toNumber() * 100
353
- );
354
- const terminalQuoteAssetReserve: BN = new BN(
355
- AMM_RESERVE_PRECISION.toNumber() * 100
356
- );
357
- const pegMultiplier: BN = new BN(13.455 * PEG_PRECISION.toNumber());
358
- const baseAssetAmountWithAmm: BN = ZERO;
359
- const reservePrice: BN = new BN(13.455 * PRICE_PRECISION.toNumber());
360
- const totalFeeMinusDistributions: BN = new BN(1);
361
- const netRevenueSinceLastFunding: BN = new BN(
362
- QUOTE_PRECISION.toNumber() * 2
363
- );
364
- const baseAssetReserve: BN = new BN(AMM_RESERVE_PRECISION.toNumber() * 100);
365
- const minBaseAssetReserve: BN = new BN(
366
- AMM_RESERVE_PRECISION.toNumber() * 90
367
- );
368
- const maxBaseAssetReserve: BN = new BN(
369
- AMM_RESERVE_PRECISION.toNumber() * 110
370
- );
371
- const markStd: BN = new BN(0.45 * PRICE_PRECISION.toNumber());
372
- const oracleStd: BN = new BN(0.55 * PRICE_PRECISION.toNumber());
373
- const longIntensity: BN = new BN(QUOTE_PRECISION.toNumber() * 20);
374
- const shortIntensity: BN = new BN(QUOTE_PRECISION.toNumber() * 2);
375
- const volume24H: BN = new BN(QUOTE_PRECISION.toNumber() * 25);
376
-
377
- const spreads = calculateSpreadBN(
378
- baseSpread,
379
- lastOracleReservePriceSpreadPct,
380
- lastOracleConfPct,
381
- maxSpread,
382
- quoteAssetReserve,
383
- terminalQuoteAssetReserve,
384
- pegMultiplier,
385
- baseAssetAmountWithAmm,
386
- reservePrice,
387
- totalFeeMinusDistributions,
388
- netRevenueSinceLastFunding,
389
- baseAssetReserve,
390
- minBaseAssetReserve,
391
- maxBaseAssetReserve,
392
- markStd,
393
- oracleStd,
394
- longIntensity,
395
- shortIntensity,
396
- volume24H,
397
- 0
398
- );
399
- const l1 = spreads[0];
400
- const s1 = spreads[1];
401
-
402
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
403
- // @ts-ignore
404
- const terms1: AMMSpreadTerms = calculateSpreadBN(
405
- baseSpread,
406
- lastOracleReservePriceSpreadPct,
407
- lastOracleConfPct,
408
- maxSpread,
409
- quoteAssetReserve,
410
- terminalQuoteAssetReserve,
411
- pegMultiplier,
412
- baseAssetAmountWithAmm,
413
- reservePrice,
414
- totalFeeMinusDistributions,
415
- netRevenueSinceLastFunding,
416
- baseAssetReserve,
417
- minBaseAssetReserve,
418
- maxBaseAssetReserve,
419
- markStd,
420
- oracleStd,
421
- longIntensity,
422
- shortIntensity,
423
- volume24H,
424
- 0,
425
- ZERO,
426
- ZERO,
427
- 0,
428
- true
429
- );
430
- // console.log(terms1);
431
-
432
- console.log('long/short spread:', l1, s1);
433
- assert(l1 == 12500);
434
- assert(s1 == 12500);
435
- assert(l1 == terms1.longSpread);
436
- assert(s1 == terms1.shortSpread);
437
-
438
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
439
- // @ts-ignore
440
- const terms2: AMMSpreadTerms = calculateSpreadBN(
441
- 300,
442
- new BN(0),
443
- new BN(484),
444
- 47500,
445
- new BN(923807816209694),
446
- new BN(925117623772584),
447
- new BN(13731157),
448
- new BN(-1314027016625),
449
- new BN(13667686),
450
- new BN(115876379475),
451
- new BN(91316628),
452
- new BN(928097825691666),
453
- new BN(907979542352912),
454
- new BN(945977491145601),
455
- new BN(161188), // mark std
456
- new BN(145963), // oracle std
457
- new BN(12358265776),
458
- new BN(72230366233),
459
- new BN(432067603632),
460
- 0,
461
- ZERO,
462
- ZERO,
463
- 0,
464
- true
465
- );
466
-
467
- assert(terms2.effectiveLeverageCapped >= 1.0002);
468
- assert(terms2.inventorySpreadScale == 8.443219);
469
- assert(terms2.longSpread == 150);
470
- assert(terms2.shortSpread == 3960);
471
-
472
- // add spread offset
473
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
474
- // @ts-ignore
475
- const terms3: AMMSpreadTerms = calculateSpreadBN(
476
- 300,
477
- new BN(0),
478
- new BN(484),
479
- 47500,
480
- new BN(923807816209694),
481
- new BN(925117623772584),
482
- new BN(13731157),
483
- new BN(-1314027016625),
484
- new BN(13667686),
485
- new BN(115876379475),
486
- new BN(91316628),
487
- new BN(928097825691666),
488
- new BN(907979542352912),
489
- new BN(945977491145601),
490
- new BN(161188),
491
- new BN(145963), // oracle std
492
- new BN(12358265776),
493
- new BN(72230366233),
494
- new BN(432067603632),
495
- 0,
496
- ZERO,
497
- ZERO,
498
- 0,
499
- true
500
- );
501
-
502
- // console.log(terms3);
503
- assert(terms3.effectiveLeverageCapped >= 1.0002);
504
- assert(terms3.inventorySpreadScale == 8.443219);
505
- assert(terms3.longSpread == 150);
506
- assert(terms3.shortSpread == 3960);
507
- assert(terms3.longSpread + terms3.shortSpread == 3960 + 150);
508
-
509
- // add spread offset
510
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
511
- // @ts-ignore
512
- const terms4: AMMSpreadTerms = calculateSpreadBN(
513
- 300,
514
- new BN(0),
515
- new BN(484),
516
- 47500,
517
- new BN(923807816209694),
518
- new BN(925117623772584),
519
- new BN(13731157),
520
- new BN(-1314027016625),
521
- new BN(13667686),
522
- new BN(115876379475),
523
- new BN(91316628),
524
- new BN(928097825691666),
525
- new BN(907979542352912),
526
- new BN(945977491145601),
527
- new BN(161188),
528
- new BN(1459632439), // oracle std (unchanged)
529
- new BN(12358265776),
530
- new BN(72230366233),
531
- new BN(432067603632),
532
- 0,
533
- ZERO,
534
- ZERO,
535
- 0,
536
- true
537
- );
538
-
539
- assert(terms4.effectiveLeverageCapped >= 1.0002);
540
- assert(terms4.inventorySpreadScale == 1.73492);
541
- assert(terms4.longSpread == 89746);
542
- assert(terms4.shortSpread == 910254);
543
- assert(terms4.longSpread + terms4.shortSpread == 1000000);
544
- });
545
-
546
- it('Corner Case Spreads', () => {
547
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
548
- // @ts-ignore
549
- const terms2: AMMSpreadTerms = calculateSpreadBN(
550
- 1000,
551
- new BN(5555),
552
- new BN(1131),
553
- 20000,
554
- new BN(1009967115003047),
555
- new BN(1009811402660255),
556
- new BN(13460124),
557
- new BN(15328930153),
558
- new BN(13667686),
559
- new BN(1235066973),
560
- new BN(88540713),
561
- new BN(994097717724176),
562
- new BN(974077854655784),
563
- new BN(1014841945381208),
564
- new BN(103320),
565
- new BN(59975),
566
- new BN(768323534),
567
- new BN(243875031),
568
- new BN(130017761029),
569
- 0,
570
- ZERO,
571
- ZERO,
572
- 0,
573
- true
574
- );
575
-
576
- assert(terms2.effectiveLeverageCapped <= 1.000001);
577
- assert(terms2.inventorySpreadScale == 1.0306);
578
- assert(terms2.longSpread == 515);
579
- assert(terms2.shortSpread == 5611);
580
-
581
- const suiExample = {
582
- status: 'active',
583
- contractType: 'perpetual',
584
- contractTier: 'c',
585
- expiryTs: '0',
586
- expiryPrice: '0',
587
- marketIndex: 9,
588
- pubkey: '91NsaUmTNNdLGbYtwmoiYSn9SgWHCsZiChfMYMYZ2nQx',
589
- name: 'SUI-PERP',
590
- amm: {
591
- baseAssetReserve: '234381482764434',
592
- sqrtK: '109260723000000001',
593
- lastFundingRate: '-16416',
594
- lastFundingRateTs: '1705845755',
595
- lastMarkPriceTwap: '1105972',
596
- lastMarkPriceTwap5Min: '1101202',
597
- lastMarkPriceTwapTs: '1705846920',
598
- lastTradeTs: '1705846920',
599
- oracle: '3Qub3HaAJaa2xNY7SUqPKd3vVwTqDfDDkEUMPjXD2c1q',
600
- oracleSource: 'pyth',
601
- historicalOracleData: {
602
- lastOraclePrice: '1099778',
603
- lastOracleDelay: '2',
604
- lastOracleConf: '0',
605
- lastOraclePriceTwap: '1106680',
606
- lastOraclePriceTwap5Min: '1102634',
607
- lastOraclePriceTwapTs: '1705846920',
608
- },
609
- lastOracleReservePriceSpreadPct: '-262785',
610
- lastOracleConfPct: '1359',
611
- fundingPeriod: '3600',
612
- quoteAssetReserve: '50933655038273508156',
613
- pegMultiplier: '4',
614
- cumulativeFundingRateLong: '186069301',
615
- cumulativeFundingRateShort: '186007157',
616
- last24HAvgFundingRate: '35147',
617
- lastFundingRateShort: '-16416',
618
- lastFundingRateLong: '-16416',
619
- totalLiquidationFee: '4889264000',
620
- totalFeeMinusDistributions: '-29523583393',
621
- totalFeeWithdrawn: '5251194706',
622
- totalFee: '7896066035',
623
- totalFeeEarnedPerLp: '77063238',
624
- orderStepSize: '1000000000',
625
- orderTickSize: '100',
626
- maxFillReserveFraction: '100',
627
- maxSlippageRatio: '50',
628
- baseSpread: '5000',
629
- curveUpdateIntensity: '100',
630
- baseAssetAmountWithAmm: '306519581',
631
- baseAssetAmountLong: '223405000000000',
632
- baseAssetAmountShort: '-224167000000000',
633
- quoteAssetAmount: '57945607973',
634
- terminalQuoteAssetReserve: '50933588428309274920',
635
- concentrationCoef: '1207100',
636
- feePool: '[object Object]',
637
- totalExchangeFee: '10110336057',
638
- totalMmFee: '-1870961568',
639
- netRevenueSinceLastFunding: '-141830281',
640
- lastUpdateSlot: '243204071',
641
- lastOracleNormalisedPrice: '1098594',
642
- lastOracleValid: 'true',
643
- lastBidPriceTwap: '1105864',
644
- lastAskPriceTwap: '1106081',
645
- longSpread: '259471',
646
- shortSpread: '3314',
647
- maxSpread: '29500',
648
- ammJitIntensity: '200',
649
- maxOpenInterest: '2000000000000000',
650
- maxBaseAssetReserve: '282922257844734',
651
- minBaseAssetReserve: '194169322578092',
652
- totalSocialLoss: '0',
653
- quoteBreakEvenAmountLong: '-237442196125',
654
- quoteBreakEvenAmountShort: '243508341566',
655
- quoteEntryAmountLong: '-234074123777',
656
- quoteEntryAmountShort: '240215285058',
657
- markStd: '237945',
658
- oracleStd: '8086',
659
- longIntensityCount: '0',
660
- longIntensityVolume: '162204',
661
- shortIntensityCount: '995',
662
- shortIntensityVolume: '2797331131',
663
- volume24H: '91370028405',
664
- minOrderSize: '1000000000',
665
- maxPositionSize: '0',
666
- bidBaseAssetReserve: '234770820775670',
667
- bidQuoteAssetReserve: '50849187948657797529',
668
- askBaseAssetReserve: '205083797418879',
669
- askQuoteAssetReserve: '58209891472312580749',
670
- },
671
- numberOfUsersWithBase: '279',
672
- numberOfUsers: '436',
673
- marginRatioInitial: '1000',
674
- marginRatioMaintenance: '500',
675
- nextFillRecordId: '69433',
676
- nextFundingRateRecordId: '6221',
677
- nextCurveRecordId: '1731',
678
- pnlPool: {
679
- scaledBalance: '61514197782399',
680
- marketIndex: '0',
681
- },
682
- liquidatorFee: '10000',
683
- ifLiquidationFee: '20000',
684
- imfFactor: '450',
685
- unrealizedPnlImfFactor: '450',
686
- unrealizedPnlMaxImbalance: '200000000',
687
- unrealizedPnlInitialAssetWeight: '0',
688
- unrealizedPnlMaintenanceAssetWeight: '10000',
689
- insuranceClaim: {
690
- revenueWithdrawSinceLastSettle: '100000000',
691
- maxRevenueWithdrawPerPeriod: '100000000',
692
- lastRevenueWithdrawTs: '1705846454',
693
- quoteSettledInsurance: '164388488',
694
- quoteMaxInsurance: '1000000000',
695
- },
696
- quoteSpotMarketIndex: '0',
697
- feeAdjustment: '0',
698
- };
699
-
700
- const reservePrice = calculatePrice(
701
- new BN(suiExample.amm.baseAssetReserve),
702
- new BN(suiExample.amm.quoteAssetReserve),
703
- new BN(suiExample.amm.pegMultiplier)
704
- );
705
- console.log('reservePrice', reservePrice.toString());
706
- assert(reservePrice.eq(new BN('869243')));
707
-
708
- const reservePriceMod = calculatePrice(
709
- new BN(suiExample.amm.baseAssetReserve),
710
- new BN(suiExample.amm.quoteAssetReserve),
711
- new BN(suiExample.amm.pegMultiplier).add(ONE)
712
- );
713
- console.log('reservePriceMod', reservePriceMod.toString());
714
- assert(reservePriceMod.eq(new BN('1086554')));
715
-
716
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
717
- // @ts-ignore
718
- const termsSuiExample: AMMSpreadTerms = calculateSpreadBN(
719
- Number(suiExample.amm.baseSpread.toString()),
720
- new BN(suiExample.amm.lastOracleReservePriceSpreadPct),
721
- new BN(suiExample.amm.lastOracleConfPct),
722
- Number(suiExample.amm.maxSpread.toString()),
723
- new BN(suiExample.amm.quoteAssetReserve),
724
- new BN(suiExample.amm.terminalQuoteAssetReserve),
725
- new BN(suiExample.amm.pegMultiplier),
726
- new BN(suiExample.amm.baseAssetAmountWithAmm),
727
- reservePrice, // reserve price
728
- new BN(suiExample.amm.totalFeeMinusDistributions),
729
- new BN(suiExample.amm.netRevenueSinceLastFunding),
730
- new BN(suiExample.amm.baseAssetReserve),
731
- new BN(suiExample.amm.minBaseAssetReserve),
732
- new BN(suiExample.amm.maxBaseAssetReserve),
733
- new BN(suiExample.amm.markStd),
734
- new BN(suiExample.amm.oracleStd),
735
- new BN(suiExample.amm.longIntensityVolume),
736
- new BN(suiExample.amm.shortIntensityVolume),
737
- new BN(suiExample.amm.volume24H),
738
- 0,
739
- ZERO,
740
- ZERO,
741
- 0,
742
- true
743
- );
744
-
745
- assert(termsSuiExample.effectiveLeverageCapped <= 1.000001);
746
- assert(termsSuiExample.inventorySpreadScale == 1.00007);
747
- assert(
748
- termsSuiExample.longSpread == 269813,
749
- `SUI long spread got ${termsSuiExample.longSpread}`
750
- );
751
- assert(
752
- termsSuiExample.shortSpread == 3925,
753
- `SUI short spread got ${termsSuiExample.shortSpread}`
754
- );
755
-
756
- // reset amm reserves/peg to balanced values s.t. liquidity/price is the same
757
- // to avoid error prone int math
758
-
759
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
760
- // @ts-ignore
761
- const termsSuiExampleMod1: AMMSpreadTerms = calculateSpreadBN(
762
- Number(suiExample.amm.baseSpread.toString()),
763
- ZERO,
764
- new BN(suiExample.amm.lastOracleConfPct),
765
- Number(suiExample.amm.maxSpread.toString()),
766
- new BN(suiExample.amm.quoteAssetReserve),
767
- new BN(suiExample.amm.terminalQuoteAssetReserve),
768
- new BN(suiExample.amm.pegMultiplier),
769
- new BN(suiExample.amm.baseAssetAmountWithAmm),
770
- reservePriceMod, // reserve price
771
- new BN(suiExample.amm.totalFeeMinusDistributions),
772
- new BN(suiExample.amm.netRevenueSinceLastFunding),
773
- new BN(suiExample.amm.baseAssetReserve),
774
- new BN(suiExample.amm.minBaseAssetReserve),
775
- new BN(suiExample.amm.maxBaseAssetReserve),
776
- new BN(suiExample.amm.markStd),
777
- new BN(suiExample.amm.oracleStd),
778
- new BN(suiExample.amm.longIntensityVolume),
779
- new BN(suiExample.amm.shortIntensityVolume),
780
- new BN(suiExample.amm.volume24H),
781
- 0,
782
- ZERO,
783
- ZERO,
784
- 0,
785
- true
786
- );
787
- console.log(termsSuiExampleMod1);
788
-
789
- // todo: add sdk recenter function?
790
-
791
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
792
- // @ts-ignore
793
- const termsSuiExampleMod2: AMMSpreadTerms = calculateSpreadBN(
794
- Number(suiExample.amm.baseSpread.toString()),
795
- ZERO,
796
- new BN(suiExample.amm.lastOracleConfPct),
797
- Number(suiExample.amm.maxSpread.toString()),
798
- new BN(suiExample.amm.sqrtK),
799
- new BN(suiExample.amm.terminalQuoteAssetReserve),
800
- reservePriceMod, // peg
801
- new BN(suiExample.amm.baseAssetAmountWithAmm),
802
- reservePriceMod, // reserve price
803
- new BN(suiExample.amm.totalFeeMinusDistributions),
804
- new BN(suiExample.amm.netRevenueSinceLastFunding),
805
- new BN(suiExample.amm.sqrtK),
806
- new BN(suiExample.amm.sqrtK),
807
- new BN(suiExample.amm.maxBaseAssetReserve),
808
- new BN(suiExample.amm.markStd),
809
- new BN(suiExample.amm.oracleStd),
810
- new BN(suiExample.amm.longIntensityVolume),
811
- new BN(suiExample.amm.shortIntensityVolume),
812
- new BN(suiExample.amm.volume24H),
813
- 0,
814
- ZERO,
815
- ZERO,
816
- 0,
817
- true
818
- );
819
-
820
- console.log(termsSuiExampleMod2);
821
- assert(
822
- _.isEqual(
823
- termsSuiExampleMod2.maxTargetSpread,
824
- termsSuiExampleMod1.maxTargetSpread
825
- )
826
- );
827
- assert(
828
- _.isEqual(
829
- termsSuiExampleMod2.shortSpreadwPS,
830
- termsSuiExampleMod1.shortSpreadwPS
831
- )
832
- );
833
- assert(
834
- _.isEqual(
835
- termsSuiExampleMod2.longSpreadwPS,
836
- termsSuiExampleMod1.longSpreadwPS
837
- )
838
- );
839
-
840
- // note: effectiveLeverage as currently implemented is sensitive to peg change
841
- });
842
-
843
- it('Spread Reserves (with offset)', () => {
844
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
845
- const mockMarket1 = myMockPerpMarkets[0];
846
- const mockAmm = mockMarket1.amm;
847
- const mockMarketStats = mockMarket1.marketStats;
848
- const now = new BN(new Date().getTime() / 1000); //todo
849
-
850
- const oraclePriceData = {
851
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
852
- slot: new BN(68 + 1),
853
- confidence: new BN(1),
854
- hasSufficientNumberOfDataPoints: true,
855
- isMMOracleActive: true,
856
- } as MMOraclePriceData;
857
-
858
- const reserves = calculateSpreadReserves(
859
- mockAmm,
860
- mockMarketStats,
861
- oraclePriceData,
862
- now
863
- );
864
- assert(reserves[0].baseAssetReserve.eq(new BN('1000000000')));
865
- assert(reserves[0].quoteAssetReserve.eq(new BN('12000000000')));
866
- assert(reserves[1].baseAssetReserve.eq(new BN('1000000000')));
867
- assert(reserves[1].quoteAssetReserve.eq(new BN('12000000000')));
868
-
869
- mockAmm.baseAssetReserve = new BN(1000000000);
870
- mockAmm.quoteAssetReserve = new BN(1000000000);
871
- mockAmm.sqrtK = new BN(1000000000);
872
-
873
- mockAmm.baseAssetAmountWithAmm = new BN(0);
874
- mockAmm.pegMultiplier = new BN(13.553 * PEG_PRECISION.toNumber());
875
- mockAmm.ammJitIntensity = 200;
876
- mockAmm.curveUpdateIntensity = 200;
877
- mockAmm.baseSpread = 2500;
878
- mockAmm.maxSpread = 25000;
879
-
880
- mockMarketStats.last24HAvgFundingRate = new BN(7590328523);
881
-
882
- mockMarketStats.lastMarkPriceTwap = new BN(
883
- (oraclePriceData.price.toNumber() / 1e6 - 0.01) * 1e6
884
- );
885
- mockMarketStats.historicalOracleData.lastOraclePriceTwap = new BN(
886
- (oraclePriceData.price.toNumber() / 1e6 + 0.015) * 1e6
887
- );
888
-
889
- mockMarketStats.historicalOracleData.lastOraclePriceTwap5Min = new BN(
890
- (oraclePriceData.price.toNumber() / 1e6 + 0.005) * 1e6
891
- );
892
- mockMarketStats.lastMarkPriceTwap5Min = new BN(
893
- (oraclePriceData.price.toNumber() / 1e6 - 0.005) * 1e6
894
- );
895
-
896
- console.log('starting rr:');
897
- let reservePrice: BN | undefined = undefined;
898
- if (!reservePrice) {
899
- reservePrice = calculatePrice(
900
- mockAmm.baseAssetReserve,
901
- mockAmm.quoteAssetReserve,
902
- mockAmm.pegMultiplier
903
- );
904
- }
905
-
906
- const targetPrice = oraclePriceData?.price || reservePrice;
907
- const confInterval = oraclePriceData.confidence || ZERO;
908
- const targetMarkSpreadPct = reservePrice
909
- .sub(targetPrice)
910
- .mul(BID_ASK_SPREAD_PRECISION)
911
- .div(reservePrice);
912
-
913
- const confIntervalPct = confInterval
914
- .mul(BID_ASK_SPREAD_PRECISION)
915
- .div(reservePrice);
916
-
917
- // now = now || new BN(new Date().getTime() / 1000); //todo
918
- const liveOracleStd = calculateLiveOracleStd(
919
- mockMarketStats,
920
- oraclePriceData,
921
- now
922
- );
923
- console.log('reservePrice:', reservePrice.toString());
924
- console.log('targetMarkSpreadPct:', targetMarkSpreadPct.toString());
925
- console.log('confIntervalPct:', confIntervalPct.toString());
926
- console.log('liveOracleStd:', liveOracleStd.toString());
927
-
928
- const tt = calculateSpread(mockAmm, mockMarketStats, oraclePriceData, now);
929
- console.log(tt);
930
-
931
- console.log('amm.baseAssetReserve:', mockAmm.baseAssetReserve.toString());
932
- assert(mockAmm.baseAssetReserve.eq(new BN('1000000000')));
933
- const reserves2 = calculateSpreadReserves(
934
- mockAmm,
935
- mockMarketStats,
936
- oraclePriceData,
937
- now
938
- );
939
- console.log(reserves2[0].baseAssetReserve.toString());
940
- console.log(reserves2[0].quoteAssetReserve.toString());
941
-
942
- assert(reserves2[0].baseAssetReserve.eq(new BN('1006289308')));
943
- assert(reserves2[0].quoteAssetReserve.eq(new BN('993750000')));
944
- assert(reserves2[1].baseAssetReserve.eq(new BN('993788819')));
945
- assert(reserves2[1].quoteAssetReserve.eq(new BN('1006250000')));
946
-
947
- // create imbalance for reference price offset
948
- mockAmm.baseAssetReserve = new BN(1000000000 * 1.1);
949
- mockAmm.quoteAssetReserve = new BN(1000000000 / 1.1);
950
- mockAmm.sqrtK = squareRootBN(
951
- mockAmm.baseAssetReserve.mul(mockAmm.quoteAssetReserve)
952
- );
953
-
954
- mockAmm.baseAssetAmountWithAmm = new BN(1000000000 * 0.1);
955
-
956
- const maxOffset = Math.max(
957
- mockAmm.maxSpread / 5,
958
- (PERCENTAGE_PRECISION.toNumber() / 10000) *
959
- (mockAmm.curveUpdateIntensity - 100)
960
- );
961
- const liquidityFraction = calculateInventoryLiquidityRatio(
962
- mockAmm.baseAssetAmountWithAmm,
963
- mockAmm.baseAssetReserve,
964
- mockAmm.minBaseAssetReserve,
965
- mockAmm.maxBaseAssetReserve
966
- );
967
- console.log('liquidityFraction:', liquidityFraction.toString());
968
- assert(liquidityFraction.eq(new BN(1000000))); // full
969
- const liquidityFractionSigned = liquidityFraction.mul(
970
- sigNum(mockAmm.baseAssetAmountWithAmm)
971
- );
972
- const referencePriceOffset = calculateReferencePriceOffset(
973
- reservePrice,
974
- mockMarketStats.last24HAvgFundingRate,
975
- liquidityFractionSigned,
976
- mockMarketStats.historicalOracleData.lastOraclePriceTwap5Min,
977
- mockMarketStats.lastMarkPriceTwap5Min,
978
- mockMarketStats.historicalOracleData.lastOraclePriceTwap,
979
- mockMarketStats.lastMarkPriceTwap,
980
- maxOffset
981
- );
982
- console.log('referencePriceOffset:', referencePriceOffset.toString());
983
- assert(referencePriceOffset.eq(new BN(10000)));
984
- assert(referencePriceOffset.eq(new BN(maxOffset)));
985
-
986
- // mockAmm.curveUpdateIntensity = 100;
987
- const reserves3 = calculateSpreadReserves(
988
- mockAmm,
989
- mockMarketStats,
990
- oraclePriceData,
991
- now
992
- );
993
- console.log(reserves3[0].baseAssetReserve.toString());
994
- console.log(reserves3[0].quoteAssetReserve.toString());
995
-
996
- assert(reserves3[0].baseAssetReserve.eq(new BN('1100068201')));
997
- assert(reserves3[0].quoteAssetReserve.eq(new BN('909034546')));
998
- assert(reserves3[1].baseAssetReserve.eq(new BN('989999998')));
999
- assert(reserves3[1].quoteAssetReserve.eq(new BN('1010101010')));
1000
-
1001
- const p1 = calculatePrice(
1002
- reserves3[0].baseAssetReserve,
1003
- reserves3[0].quoteAssetReserve,
1004
- mockAmm.pegMultiplier
1005
- );
1006
-
1007
- const p2 = calculatePrice(
1008
- reserves3[1].baseAssetReserve,
1009
- reserves3[1].quoteAssetReserve,
1010
- mockAmm.pegMultiplier
1011
- );
1012
-
1013
- assert(p1.eq(new BN(11199437)));
1014
- assert(p2.eq(new BN(13828180)));
1015
-
1016
- mockAmm.curveUpdateIntensity = 110;
1017
- const reserves4 = calculateSpreadReserves(
1018
- mockAmm,
1019
- mockMarketStats,
1020
- oraclePriceData,
1021
- now
1022
- );
1023
-
1024
- assert(reserves4[0].baseAssetReserve.eq(new BN('1100068201')));
1025
- assert(reserves4[0].quoteAssetReserve.eq(new BN('909034546')));
1026
- assert(reserves4[1].baseAssetReserve.eq(new BN('989999998')));
1027
- assert(reserves4[1].quoteAssetReserve.eq(new BN('1010101010')));
1028
-
1029
- const p1RF = calculatePrice(
1030
- reserves4[0].baseAssetReserve,
1031
- reserves4[0].quoteAssetReserve,
1032
- mockAmm.pegMultiplier
1033
- );
1034
-
1035
- const p2RF = calculatePrice(
1036
- reserves4[1].baseAssetReserve,
1037
- reserves4[1].quoteAssetReserve,
1038
- mockAmm.pegMultiplier
1039
- );
1040
-
1041
- assert(p1RF.eq(new BN(11199437)));
1042
- assert(p2RF.eq(new BN(13828180)));
1043
- // no ref price offset at 100
1044
- mockAmm.curveUpdateIntensity = 100;
1045
- const reserves5 = calculateSpreadReserves(
1046
- mockAmm,
1047
- mockMarketStats,
1048
- oraclePriceData,
1049
- now
1050
- );
1051
-
1052
- assert(reserves5[0].baseAssetReserve.eq(new BN('1100068201')));
1053
- assert(reserves5[0].quoteAssetReserve.eq(new BN('909034546')));
1054
- assert(reserves5[1].baseAssetReserve.eq(new BN('989999998')));
1055
- assert(reserves5[1].quoteAssetReserve.eq(new BN('1010101010')));
1056
-
1057
- const p1RFNone = calculatePrice(
1058
- reserves5[0].baseAssetReserve,
1059
- reserves5[0].quoteAssetReserve,
1060
- mockAmm.pegMultiplier
1061
- );
1062
-
1063
- const p2RFNone = calculatePrice(
1064
- reserves5[1].baseAssetReserve,
1065
- reserves5[1].quoteAssetReserve,
1066
- mockAmm.pegMultiplier
1067
- );
1068
-
1069
- assert(p1RFNone.eq(new BN(11199437)));
1070
- assert(p2RFNone.eq(new BN(13828180)));
1071
- assert(p1RF.sub(p1RFNone).eq(new BN(0)));
1072
- assert(p2RF.sub(p2RFNone).eq(new BN(0))); // todo?
1073
- });
1074
- it('Spread Reserves (with negative offset)', () => {
1075
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1076
- const mockMarket1 = myMockPerpMarkets[0];
1077
- const mockAmm = mockMarket1.amm;
1078
- const mockMarketStats = mockMarket1.marketStats;
1079
- const now = new BN(new Date().getTime() / 1000); //todo
1080
-
1081
- const oraclePriceData = {
1082
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
1083
- slot: new BN(68 + 1),
1084
- confidence: new BN(1),
1085
- hasSufficientNumberOfDataPoints: true,
1086
- isMMOracleActive: true,
1087
- } as MMOraclePriceData;
1088
-
1089
- const reserves = calculateSpreadReserves(
1090
- mockAmm,
1091
- mockMarketStats,
1092
- oraclePriceData,
1093
- now
1094
- );
1095
- assert(reserves[0].baseAssetReserve.eq(new BN('1000000000')));
1096
- assert(reserves[0].quoteAssetReserve.eq(new BN('12000000000')));
1097
- assert(reserves[1].baseAssetReserve.eq(new BN('1000000000')));
1098
- assert(reserves[1].quoteAssetReserve.eq(new BN('12000000000')));
1099
-
1100
- mockAmm.baseAssetReserve = new BN(1000000000);
1101
- mockAmm.quoteAssetReserve = new BN(1000000000);
1102
- mockAmm.sqrtK = new BN(1000000000);
1103
-
1104
- mockAmm.baseAssetAmountWithAmm = new BN(0);
1105
- mockAmm.pegMultiplier = new BN(13.553 * PEG_PRECISION.toNumber());
1106
- mockAmm.ammJitIntensity = 200;
1107
- mockAmm.curveUpdateIntensity = 200;
1108
- mockAmm.baseSpread = 2500;
1109
- mockAmm.maxSpread = 25000;
1110
-
1111
- mockMarketStats.last24HAvgFundingRate = new BN(-7590328523);
1112
-
1113
- mockMarketStats.lastMarkPriceTwap = new BN(
1114
- (oraclePriceData.price.toNumber() / 1e6 + 0.01) * 1e6
1115
- );
1116
- mockMarketStats.historicalOracleData.lastOraclePriceTwap = new BN(
1117
- (oraclePriceData.price.toNumber() / 1e6 - 0.015) * 1e6
1118
- );
1119
-
1120
- mockMarketStats.historicalOracleData.lastOraclePriceTwap5Min = new BN(
1121
- (oraclePriceData.price.toNumber() / 1e6 + 0.005) * 1e6
1122
- );
1123
- mockMarketStats.lastMarkPriceTwap5Min = new BN(
1124
- (oraclePriceData.price.toNumber() / 1e6 - 0.005) * 1e6
1125
- );
1126
-
1127
- console.log('starting rr:');
1128
- let reservePrice = undefined;
1129
- if (!reservePrice) {
1130
- reservePrice = calculatePrice(
1131
- mockAmm.baseAssetReserve,
1132
- mockAmm.quoteAssetReserve,
1133
- mockAmm.pegMultiplier
1134
- );
1135
- }
1136
-
1137
- const targetPrice = oraclePriceData?.price || reservePrice;
1138
- const confInterval = oraclePriceData.confidence || ZERO;
1139
- const targetMarkSpreadPct = reservePrice
1140
- .sub(targetPrice)
1141
- .mul(BID_ASK_SPREAD_PRECISION)
1142
- .div(reservePrice);
1143
-
1144
- const confIntervalPct = confInterval
1145
- .mul(BID_ASK_SPREAD_PRECISION)
1146
- .div(reservePrice);
1147
-
1148
- // now = now || new BN(new Date().getTime() / 1000); //todo
1149
- const liveOracleStd = calculateLiveOracleStd(
1150
- mockMarketStats,
1151
- oraclePriceData,
1152
- now
1153
- );
1154
- console.log('reservePrice:', reservePrice.toString());
1155
- console.log('targetMarkSpreadPct:', targetMarkSpreadPct.toString());
1156
- console.log('confIntervalPct:', confIntervalPct.toString());
1157
-
1158
- console.log('liveOracleStd:', liveOracleStd.toString());
1159
-
1160
- const tt = calculateSpread(mockAmm, mockMarketStats, oraclePriceData, now);
1161
- console.log(tt);
1162
-
1163
- console.log('amm.baseAssetReserve:', mockAmm.baseAssetReserve.toString());
1164
- assert(mockAmm.baseAssetReserve.eq(new BN('1000000000')));
1165
- const reserves2 = calculateSpreadReserves(
1166
- mockAmm,
1167
- mockMarketStats,
1168
- oraclePriceData,
1169
- now
1170
- );
1171
- console.log(reserves2[1].baseAssetReserve.toString());
1172
- console.log(reserves2[1].quoteAssetReserve.toString());
1173
-
1174
- assert(reserves2[0].baseAssetReserve.eq(new BN('1006289308')));
1175
- assert(reserves2[0].quoteAssetReserve.eq(new BN('993750000')));
1176
- assert(reserves2[1].baseAssetReserve.eq(new BN('993788819')));
1177
- assert(reserves2[1].quoteAssetReserve.eq(new BN('1006250000')));
1178
-
1179
- // create imbalance for reference price offset
1180
- mockAmm.baseAssetReserve = new BN(1000000000 / 1.1);
1181
- mockAmm.quoteAssetReserve = new BN(1000000000 * 1.1);
1182
- mockAmm.sqrtK = squareRootBN(
1183
- mockAmm.baseAssetReserve.mul(mockAmm.quoteAssetReserve)
1184
- );
1185
-
1186
- mockAmm.baseAssetAmountWithAmm = new BN(-1000000000 * 0.1);
1187
-
1188
- const maxOffset = Math.max(
1189
- mockAmm.maxSpread / 5,
1190
- (PERCENTAGE_PRECISION.toNumber() / 10000) *
1191
- (mockAmm.curveUpdateIntensity - 100)
1192
- );
1193
- const liquidityFraction = calculateInventoryLiquidityRatio(
1194
- mockAmm.baseAssetAmountWithAmm,
1195
- mockAmm.baseAssetReserve,
1196
- mockAmm.minBaseAssetReserve,
1197
- mockAmm.maxBaseAssetReserve
1198
- );
1199
- console.log('liquidityFraction:', liquidityFraction.toString());
1200
- assert(liquidityFraction.eq(new BN(1000000))); // full
1201
- const liquidityFractionSigned = liquidityFraction.mul(
1202
- sigNum(mockAmm.baseAssetAmountWithAmm)
1203
- );
1204
- const referencePriceOffset = calculateReferencePriceOffset(
1205
- reservePrice,
1206
- mockMarketStats.last24HAvgFundingRate,
1207
- liquidityFractionSigned,
1208
- mockMarketStats.historicalOracleData.lastOraclePriceTwap5Min,
1209
- mockMarketStats.lastMarkPriceTwap5Min,
1210
- mockMarketStats.historicalOracleData.lastOraclePriceTwap,
1211
- mockMarketStats.lastMarkPriceTwap,
1212
- maxOffset
1213
- );
1214
- console.log('referencePriceOffset:', referencePriceOffset.toString());
1215
- assert(referencePriceOffset.eq(new BN(-10000))); // neg
1216
-
1217
- // assert(referencePriceOffset.eq(new BN(maxOffset)));
1218
-
1219
- // mockAmm.curveUpdateIntensity = 100;
1220
- const reserves3 = calculateSpreadReserves(
1221
- mockAmm,
1222
- mockMarketStats,
1223
- oraclePriceData,
1224
- now
1225
- );
1226
- console.log(reserves3[0].baseAssetReserve.toString());
1227
- console.log(reserves3[0].quoteAssetReserve.toString());
1228
-
1229
- assert(reserves3[0].baseAssetReserve.eq(new BN('999999998')));
1230
- assert(reserves3[0].quoteAssetReserve.eq(new BN('1000000000')));
1231
- assert(reserves3[1].baseAssetReserve.eq(new BN('909034547')));
1232
- assert(reserves3[1].quoteAssetReserve.eq(new BN('1100068200')));
1233
-
1234
- const p1 = calculatePrice(
1235
- reserves3[0].baseAssetReserve,
1236
- reserves3[0].quoteAssetReserve,
1237
- mockAmm.pegMultiplier
1238
- );
1239
-
1240
- const p2 = calculatePrice(
1241
- reserves3[1].baseAssetReserve,
1242
- reserves3[1].quoteAssetReserve,
1243
- mockAmm.pegMultiplier
1244
- );
1245
-
1246
- assert(p1.eq(new BN(13553000)));
1247
- assert(p2.eq(new BN(16401163)));
1248
-
1249
- mockAmm.curveUpdateIntensity = 110;
1250
- const reserves4 = calculateSpreadReserves(
1251
- mockAmm,
1252
- mockMarketStats,
1253
- oraclePriceData,
1254
- now
1255
- );
1256
-
1257
- assert(reserves4[0].baseAssetReserve.eq(new BN('999999998')));
1258
- assert(reserves4[0].quoteAssetReserve.eq(new BN('1000000000')));
1259
- assert(reserves4[1].baseAssetReserve.eq(new BN('909034547')));
1260
- assert(reserves4[1].quoteAssetReserve.eq(new BN('1100068200')));
1261
-
1262
- const p1RF = calculatePrice(
1263
- reserves4[0].baseAssetReserve,
1264
- reserves4[0].quoteAssetReserve,
1265
- mockAmm.pegMultiplier
1266
- );
1267
-
1268
- const p2RF = calculatePrice(
1269
- reserves4[1].baseAssetReserve,
1270
- reserves4[1].quoteAssetReserve,
1271
- mockAmm.pegMultiplier
1272
- );
1273
-
1274
- assert(p1RF.eq(new BN(13553000)));
1275
- assert(p2RF.eq(new BN(16401163)));
1276
-
1277
- // no ref price offset at 100
1278
- mockAmm.curveUpdateIntensity = 100;
1279
- const reserves5 = calculateSpreadReserves(
1280
- mockAmm,
1281
- mockMarketStats,
1282
- oraclePriceData,
1283
- now
1284
- );
1285
-
1286
- assert(reserves5[0].baseAssetReserve.eq(new BN('999999998')));
1287
- assert(reserves5[0].quoteAssetReserve.eq(new BN('1000000000')));
1288
- assert(reserves5[1].baseAssetReserve.eq(new BN('909034547')));
1289
- assert(reserves5[1].quoteAssetReserve.eq(new BN('1100068200')));
1290
-
1291
- const p1RFNone = calculatePrice(
1292
- reserves5[0].baseAssetReserve,
1293
- reserves5[0].quoteAssetReserve,
1294
- mockAmm.pegMultiplier
1295
- );
1296
-
1297
- const p2RFNone = calculatePrice(
1298
- reserves5[1].baseAssetReserve,
1299
- reserves5[1].quoteAssetReserve,
1300
- mockAmm.pegMultiplier
1301
- );
1302
-
1303
- const rr = p2RF.sub(p2RFNone).mul(PERCENTAGE_PRECISION).div(p2RF);
1304
- assert(p1RFNone.eq(new BN(13553000)));
1305
- assert(p2RFNone.eq(new BN(16401163)));
1306
- assert(p1RF.sub(p1RFNone).eq(new BN(0))); // todo?
1307
- assert(rr.eq(new BN(0)));
1308
- });
1309
-
1310
- it('live update functions', () => {
1311
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1312
- const mockMarket1 = myMockPerpMarkets[0];
1313
- const mockMarketStats = mockMarket1.marketStats;
1314
- const now = new BN(new Date().getTime() / 1000); //todo
1315
- const slot = 999999999;
1316
-
1317
- const oraclePriceData = {
1318
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
1319
- slot: new BN(slot),
1320
- confidence: new BN(1000),
1321
- hasSufficientNumberOfDataPoints: true,
1322
- isMMOracleActive: true,
1323
- } as MMOraclePriceData;
1324
- mockMarketStats.oracleStd = new BN(0.18 * PRICE_PRECISION.toNumber());
1325
- mockMarketStats.fundingPeriod = new BN(3600);
1326
- mockMarketStats.historicalOracleData.lastOraclePriceTwap =
1327
- oraclePriceData.price.mul(new BN(999)).div(new BN(1000));
1328
- mockMarketStats.historicalOracleData.lastOraclePriceTwapTs = now.sub(
1329
- new BN(11)
1330
- );
1331
-
1332
- const liveOracleTwap = calculateLiveOracleTwap(
1333
- mockMarketStats.historicalOracleData,
1334
- oraclePriceData,
1335
- now,
1336
- mockMarketStats.fundingPeriod
1337
- );
1338
- console.log('liveOracleTwap:', liveOracleTwap.toNumber());
1339
- assert(liveOracleTwap.eq(new BN(13539488)));
1340
-
1341
- const liveOracleStd = calculateLiveOracleStd(
1342
- mockMarketStats,
1343
- oraclePriceData,
1344
- now
1345
- );
1346
- assert(liveOracleStd.eq(new BN(13732450)));
1347
-
1348
- mockMarketStats.lastOracleConfPct = new BN(150000);
1349
- const reservePrice = new BN(13.553 * PRICE_PRECISION.toNumber());
1350
- const newConfPct = getNewOracleConfPct(
1351
- mockMarketStats,
1352
- oraclePriceData,
1353
- reservePrice,
1354
- now
1355
- );
1356
- console.log('newConfPct:', newConfPct.toString());
1357
-
1358
- assert(
1359
- now
1360
- .sub(mockMarketStats.historicalOracleData.lastOraclePriceTwapTs)
1361
- .gt(ZERO)
1362
- );
1363
-
1364
- assert(newConfPct.eq(new BN(135000)));
1365
-
1366
- const oracleGuardRails: OracleGuardRails = {
1367
- priceDivergence: {
1368
- markOraclePercentDivergence: PERCENTAGE_PRECISION.divn(10),
1369
- oracleTwap5MinPercentDivergence: PERCENTAGE_PRECISION.divn(10),
1370
- },
1371
- validity: {
1372
- slotsBeforeStaleForAmm: new BN(10),
1373
- slotsBeforeStaleForMargin: new BN(60),
1374
- confidenceIntervalMaxSize: new BN(20000),
1375
- tooVolatileRatio: new BN(5),
1376
- },
1377
- };
1378
-
1379
- // good oracle
1380
- assert(
1381
- isOracleValid(mockMarket1, oraclePriceData, oracleGuardRails, slot + 5)
1382
- );
1383
-
1384
- // conf too high
1385
- assert(
1386
- !isOracleValid(
1387
- mockMarket1,
1388
- {
1389
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
1390
- slot: new BN(slot),
1391
- confidence: new BN(13.553 * PRICE_PRECISION.toNumber() * 0.021),
1392
- hasSufficientNumberOfDataPoints: true,
1393
- isMMOracleActive: true,
1394
- } as MMOraclePriceData,
1395
- oracleGuardRails,
1396
- slot
1397
- )
1398
- );
1399
-
1400
- // not hasSufficientNumberOfDataPoints
1401
- assert(
1402
- !isOracleValid(
1403
- mockMarket1,
1404
- {
1405
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
1406
- slot: new BN(slot),
1407
- confidence: new BN(1),
1408
- hasSufficientNumberOfDataPoints: false,
1409
- isMMOracleActive: true,
1410
- } as MMOraclePriceData,
1411
- oracleGuardRails,
1412
- slot
1413
- )
1414
- );
1415
-
1416
- // negative oracle price
1417
- assert(
1418
- !isOracleValid(
1419
- mockMarket1,
1420
- {
1421
- price: new BN(-1 * PRICE_PRECISION.toNumber()),
1422
- slot: new BN(slot),
1423
- confidence: new BN(1),
1424
- hasSufficientNumberOfDataPoints: true,
1425
- isMMOracleActive: true,
1426
- } as MMOraclePriceData,
1427
- oracleGuardRails,
1428
- slot
1429
- )
1430
- );
1431
-
1432
- // too delayed for amm
1433
- assert(
1434
- !isOracleValid(
1435
- mockMarket1,
1436
- {
1437
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
1438
- slot: new BN(slot),
1439
- confidence: new BN(1),
1440
- hasSufficientNumberOfDataPoints: true,
1441
- isMMOracleActive: true,
1442
- } as MMOraclePriceData,
1443
- oracleGuardRails,
1444
- slot + 100
1445
- )
1446
- );
1447
-
1448
- // im passing stale slot (should not call oracle invalid)
1449
- assert(
1450
- isOracleValid(
1451
- mockMarket1,
1452
- {
1453
- price: new BN(13.553 * PRICE_PRECISION.toNumber()),
1454
- slot: new BN(slot + 100),
1455
- confidence: new BN(1),
1456
- hasSufficientNumberOfDataPoints: true,
1457
- isMMOracleActive: true,
1458
- } as MMOraclePriceData,
1459
- oracleGuardRails,
1460
- slot
1461
- )
1462
- );
1463
-
1464
- // too volatile (more than 5x higher)
1465
- assert(
1466
- !isOracleValid(
1467
- mockMarket1,
1468
- {
1469
- price: new BN(113.553 * PRICE_PRECISION.toNumber()),
1470
- slot: new BN(slot + 5),
1471
- confidence: new BN(1),
1472
- hasSufficientNumberOfDataPoints: true,
1473
- isMMOracleActive: true,
1474
- } as MMOraclePriceData,
1475
- oracleGuardRails,
1476
- slot
1477
- )
1478
- );
1479
-
1480
- // too volatile (more than 1/5 lower)
1481
- assert(
1482
- !isOracleValid(
1483
- mockMarket1,
1484
- {
1485
- price: new BN(0.553 * PRICE_PRECISION.toNumber()),
1486
- slot: new BN(slot + 5),
1487
- confidence: new BN(1),
1488
- hasSufficientNumberOfDataPoints: true,
1489
- isMMOracleActive: true,
1490
- } as MMOraclePriceData,
1491
- oracleGuardRails,
1492
- slot
1493
- )
1494
- );
1495
- });
1496
-
1497
- it('predicted funding rate mock1', () => {
1498
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1499
- const mockMarket1 = myMockPerpMarkets[0];
1500
-
1501
- // make it like RNDR
1502
- const now = new BN(1688878353);
1503
-
1504
- mockMarket1.marketStats.fundingPeriod = new BN(3600);
1505
- mockMarket1.lastFundingRateTs = new BN(1688860817);
1506
-
1507
- const currentMarkPrice = new BN(1.9843 * PRICE_PRECISION.toNumber()); // trading at a premium
1508
- const mmOraclePriceData: MMOraclePriceData = {
1509
- price: new BN(1.9535 * PRICE_PRECISION.toNumber()),
1510
- slot: new BN(0),
1511
- confidence: new BN(1),
1512
- hasSufficientNumberOfDataPoints: true,
1513
- isMMOracleActive: true,
1514
- };
1515
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
1516
- 1.9535 * PRICE_PRECISION.toNumber()
1517
- );
1518
-
1519
- // mockMarket1.amm.pegMultiplier = new BN(1.897573 * 1e3);
1520
-
1521
- mockMarket1.marketStats.lastMarkPriceTwap = new BN(
1522
- 1.945594 * PRICE_PRECISION.toNumber()
1523
- );
1524
- mockMarket1.marketStats.lastBidPriceTwap = new BN(
1525
- 1.941629 * PRICE_PRECISION.toNumber()
1526
- );
1527
- mockMarket1.marketStats.lastAskPriceTwap = new BN(
1528
- 1.94956 * PRICE_PRECISION.toNumber()
1529
- );
1530
- mockMarket1.marketStats.lastMarkPriceTwapTs = new BN(1688877729);
1531
-
1532
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap = new BN(
1533
- 1.942449 * PRICE_PRECISION.toNumber()
1534
- );
1535
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwapTs = new BN(
1536
- 1688878333
1537
- );
1538
-
1539
- const [
1540
- _markTwapLive,
1541
- _oracleTwapLive,
1542
- _lowerboundEst,
1543
- _cappedAltEst,
1544
- _interpEst,
1545
- ] = calculateAllEstimatedFundingRate(
1546
- mockMarket1,
1547
- mmOraclePriceData,
1548
- mmOraclePriceData as unknown as OraclePriceData,
1549
- currentMarkPrice,
1550
- now
1551
- );
1552
-
1553
- const [markTwapLive, oracleTwapLive, est1, est2] =
1554
- calculateLongShortFundingRateAndLiveTwaps(
1555
- mockMarket1,
1556
- mmOraclePriceData,
1557
- mmOraclePriceData as unknown as OraclePriceData,
1558
- currentMarkPrice,
1559
- now
1560
- );
1561
-
1562
- // console.log(markTwapLive.toString());
1563
- // console.log(oracleTwapLive.toString());
1564
- // console.log(est1.toString());
1565
- // console.log(est2.toString());
1566
-
1567
- assert(markTwapLive.eq(new BN('1949826')));
1568
- assert(oracleTwapLive.eq(new BN('1942510')));
1569
- assert(est1.eq(new BN('14858')));
1570
- assert(est2.eq(new BN('14858')));
1571
- });
1572
-
1573
- it('predicted funding rate mock2', () => {
1574
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1575
- const mockMarket1 = myMockPerpMarkets[0];
1576
-
1577
- // make it like OP
1578
- const now = new BN(1688881915);
1579
-
1580
- mockMarket1.marketStats.fundingPeriod = new BN(3600);
1581
- mockMarket1.lastFundingRateTs = new BN(1688864415);
1582
-
1583
- const currentMarkPrice = new BN(1.2242 * PRICE_PRECISION.toNumber()); // trading at a premium
1584
- const mmOraclePriceData: MMOraclePriceData = {
1585
- price: new BN(1.224 * PRICE_PRECISION.toNumber()),
1586
- slot: new BN(0),
1587
- confidence: new BN(1),
1588
- hasSufficientNumberOfDataPoints: true,
1589
- isMMOracleActive: true,
1590
- };
1591
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
1592
- 1.9535 * PRICE_PRECISION.toNumber()
1593
- );
1594
-
1595
- // mockMarket1.amm.pegMultiplier = new BN(1.897573 * 1e3);
1596
-
1597
- mockMarket1.marketStats.lastMarkPriceTwap = new BN(
1598
- 1.218363 * PRICE_PRECISION.toNumber()
1599
- );
1600
- mockMarket1.marketStats.lastBidPriceTwap = new BN(
1601
- 1.218363 * PRICE_PRECISION.toNumber()
1602
- );
1603
- mockMarket1.marketStats.lastAskPriceTwap = new BN(
1604
- 1.218364 * PRICE_PRECISION.toNumber()
1605
- );
1606
- mockMarket1.marketStats.lastMarkPriceTwapTs = new BN(1688878815);
1607
-
1608
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap = new BN(
1609
- 1.220964 * PRICE_PRECISION.toNumber()
1610
- );
1611
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwapTs = new BN(
1612
- 1688879991
1613
- );
1614
-
1615
- const [
1616
- _markTwapLive,
1617
- _oracleTwapLive,
1618
- _lowerboundEst,
1619
- _cappedAltEst,
1620
- _interpEst,
1621
- ] = calculateAllEstimatedFundingRate(
1622
- mockMarket1,
1623
- mmOraclePriceData,
1624
- mmOraclePriceData as unknown as OraclePriceData,
1625
- currentMarkPrice,
1626
- now
1627
- );
1628
-
1629
- // console.log(_markTwapLive.toString());
1630
- // console.log(_oracleTwapLive.toString());
1631
- // console.log(_lowerboundEst.toString());
1632
- // console.log(_cappedAltEst.toString());
1633
- // console.log(_interpEst.toString());
1634
- // console.log('-----');
1635
-
1636
- const [markTwapLive, oracleTwapLive, est1, est2] =
1637
- calculateLongShortFundingRateAndLiveTwaps(
1638
- mockMarket1,
1639
- mmOraclePriceData,
1640
- mmOraclePriceData as unknown as OraclePriceData,
1641
- currentMarkPrice,
1642
- now
1643
- );
1644
-
1645
- console.log(
1646
- 'markTwapLive:',
1647
- mockMarket1.marketStats.lastMarkPriceTwap.toString(),
1648
- '->',
1649
- markTwapLive.toString()
1650
- );
1651
- console.log(
1652
- 'oracTwapLive:',
1653
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap.toString(),
1654
- '->',
1655
- oracleTwapLive.toString()
1656
- );
1657
- console.log('pred funding:', est1.toString(), est2.toString());
1658
-
1659
- assert(markTwapLive.eq(new BN('1222131')));
1660
- assert(oracleTwapLive.eq(new BN('1222586')));
1661
- assert(est1.eq(est2));
1662
- assert(est2.eq(new BN('1247')));
1663
- });
1664
-
1665
- it('predicted funding rate mock clamp', () => {
1666
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1667
- const mockMarket1 = myMockPerpMarkets[0];
1668
-
1669
- // make it like OP
1670
- const now = new BN(1688881915);
1671
-
1672
- mockMarket1.marketStats.fundingPeriod = new BN(3600);
1673
- mockMarket1.lastFundingRateTs = new BN(1688864415);
1674
-
1675
- const currentMarkPrice = new BN(1.2242 * PRICE_PRECISION.toNumber()); // trading at a premium
1676
- const mmOraclePriceData: MMOraclePriceData = {
1677
- price: new BN(1.924 * PRICE_PRECISION.toNumber()),
1678
- slot: new BN(0),
1679
- confidence: new BN(1),
1680
- hasSufficientNumberOfDataPoints: true,
1681
- isMMOracleActive: true,
1682
- } as MMOraclePriceData;
1683
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
1684
- 1.9535 * PRICE_PRECISION.toNumber()
1685
- );
1686
-
1687
- // mockMarket1.amm.pegMultiplier = new BN(1.897573 * 1e3);
1688
-
1689
- mockMarket1.marketStats.lastMarkPriceTwap = new BN(
1690
- 1.218363 * PRICE_PRECISION.toNumber()
1691
- );
1692
- mockMarket1.marketStats.lastBidPriceTwap = new BN(
1693
- 1.218363 * PRICE_PRECISION.toNumber()
1694
- );
1695
- mockMarket1.marketStats.lastAskPriceTwap = new BN(
1696
- 1.218364 * PRICE_PRECISION.toNumber()
1697
- );
1698
- mockMarket1.marketStats.lastMarkPriceTwapTs = new BN(1688878815);
1699
-
1700
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap = new BN(
1701
- 1.820964 * PRICE_PRECISION.toNumber()
1702
- );
1703
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwapTs = new BN(
1704
- 1688879991
1705
- );
1706
- mockMarket1.contractTier = ContractTier.A;
1707
-
1708
- const [
1709
- _markTwapLive,
1710
- _oracleTwapLive,
1711
- _lowerboundEst,
1712
- _cappedAltEst,
1713
- _interpEst,
1714
- ] = calculateAllEstimatedFundingRate(
1715
- mockMarket1,
1716
- mmOraclePriceData,
1717
- mmOraclePriceData as unknown as OraclePriceData,
1718
- currentMarkPrice,
1719
- now
1720
- );
1721
-
1722
- // console.log(_markTwapLive.toString());
1723
- // console.log(_oracleTwapLive.toString());
1724
- // console.log(_lowerboundEst.toString());
1725
- // console.log(_cappedAltEst.toString());
1726
- // console.log(_interpEst.toString());
1727
- // console.log('-----');
1728
-
1729
- let [markTwapLive, oracleTwapLive, est1, est2] =
1730
- calculateLongShortFundingRateAndLiveTwaps(
1731
- mockMarket1,
1732
- mmOraclePriceData,
1733
- mmOraclePriceData as unknown as OraclePriceData,
1734
- currentMarkPrice,
1735
- now
1736
- );
1737
-
1738
- console.log(
1739
- 'markTwapLive:',
1740
- mockMarket1.marketStats.lastMarkPriceTwap.toString(),
1741
- '->',
1742
- markTwapLive.toString()
1743
- );
1744
- console.log(
1745
- 'oracTwapLive:',
1746
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap.toString(),
1747
- '->',
1748
- oracleTwapLive.toString()
1749
- );
1750
- console.log('pred funding:', est1.toString(), est2.toString());
1751
-
1752
- assert(markTwapLive.eq(new BN('1680634')));
1753
- assert(oracleTwapLive.eq(new BN('1876031')));
1754
- assert(est1.eq(est2));
1755
- assert(est2.eq(new BN('-126261')));
1756
-
1757
- mockMarket1.contractTier = ContractTier.C;
1758
-
1759
- [markTwapLive, oracleTwapLive, est1, est2] =
1760
- calculateLongShortFundingRateAndLiveTwaps(
1761
- mockMarket1,
1762
- mmOraclePriceData,
1763
- mmOraclePriceData as unknown as OraclePriceData,
1764
- currentMarkPrice,
1765
- now
1766
- );
1767
-
1768
- console.log(
1769
- 'markTwapLive:',
1770
- mockMarket1.marketStats.lastMarkPriceTwap.toString(),
1771
- '->',
1772
- markTwapLive.toString()
1773
- );
1774
- console.log(
1775
- 'oracTwapLive:',
1776
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap.toString(),
1777
- '->',
1778
- oracleTwapLive.toString()
1779
- );
1780
- console.log('pred funding:', est1.toString(), est2.toString());
1781
-
1782
- assert(markTwapLive.eq(new BN('1680634')));
1783
- assert(oracleTwapLive.eq(new BN('1876031')));
1784
- assert(est1.eq(est2));
1785
- assert(est2.eq(new BN('-208332')));
1786
-
1787
- mockMarket1.contractTier = ContractTier.SPECULATIVE;
1788
-
1789
- [markTwapLive, oracleTwapLive, est1, est2] =
1790
- calculateLongShortFundingRateAndLiveTwaps(
1791
- mockMarket1,
1792
- mmOraclePriceData,
1793
- mmOraclePriceData as unknown as OraclePriceData,
1794
- currentMarkPrice,
1795
- now
1796
- );
1797
-
1798
- console.log(
1799
- 'markTwapLive:',
1800
- mockMarket1.marketStats.lastMarkPriceTwap.toString(),
1801
- '->',
1802
- markTwapLive.toString()
1803
- );
1804
- console.log(
1805
- 'oracTwapLive:',
1806
- mockMarket1.marketStats.historicalOracleData.lastOraclePriceTwap.toString(),
1807
- '->',
1808
- oracleTwapLive.toString()
1809
- );
1810
- console.log('pred funding:', est1.toString(), est2.toString());
1811
-
1812
- assert(markTwapLive.eq(new BN('1680634')));
1813
- assert(oracleTwapLive.eq(new BN('1876031')));
1814
- assert(est1.eq(est2));
1815
- assert(est2.eq(new BN('-416666')));
1816
- });
1817
-
1818
- it('orderbook L2 gen (no topOfBookQuoteAmounts, 10 numOrders, low liquidity)', async () => {
1819
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1820
-
1821
- const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
1822
- const cc = 38104569;
1823
- mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
1824
- mockMarket1.amm.maxBaseAssetReserve = mockMarket1.amm.baseAssetReserve.add(
1825
- new BN(1234835)
1826
- );
1827
- mockMarket1.amm.minBaseAssetReserve =
1828
- mockMarket1.amm.baseAssetReserve.sub(BASE_PRECISION);
1829
- mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
1830
- mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
1831
- mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
1832
-
1833
- const now = new BN(1688881915);
1834
-
1835
- const mmOraclePriceData: MMOraclePriceData = {
1836
- price: new BN(18.624 * PRICE_PRECISION.toNumber()),
1837
- slot: new BN(0),
1838
- confidence: new BN(1),
1839
- hasSufficientNumberOfDataPoints: true,
1840
- isMMOracleActive: true,
1841
- } as MMOraclePriceData;
1842
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
1843
- 18.5535 * PRICE_PRECISION.toNumber()
1844
- );
1845
-
1846
- const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, mmOraclePriceData);
1847
-
1848
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
1849
- updatedAmm.baseAssetReserve,
1850
- updatedAmm.minBaseAssetReserve,
1851
- updatedAmm.maxBaseAssetReserve,
1852
- mockMarket1.orderStepSize
1853
- );
1854
-
1855
- const generator = getVammL2Generator({
1856
- marketAccount: mockMarket1,
1857
- mmOraclePriceData,
1858
- numOrders: 10,
1859
- now,
1860
- topOfBookQuoteAmounts: [],
1861
- });
1862
-
1863
- const bids = Array.from(generator.getL2Bids());
1864
- // console.log(bids);
1865
-
1866
- const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
1867
- return total.add(order.size);
1868
- }, ZERO);
1869
-
1870
- console.log(
1871
- 'totalBidSize:',
1872
- totalBidSize.toString(),
1873
- 'openBids:',
1874
- openBids.toString()
1875
- );
1876
- assert(totalBidSize.sub(openBids).abs().lt(new BN(10))); // smol err
1877
- assert(totalBidSize.sub(openBids).lt(ZERO)); // under estimation
1878
-
1879
- const asks = Array.from(generator.getL2Asks());
1880
- // console.log(asks);
1881
-
1882
- const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
1883
- return total.add(order.size);
1884
- }, ZERO);
1885
- console.log(
1886
- 'totalAskSize:',
1887
- totalAskSize.toString(),
1888
- 'openAsks:',
1889
- openAsks.toString()
1890
- );
1891
- assert(totalAskSize.sub(openAsks.abs()).lte(new BN(5))); // only tiny rounding errors
1892
- });
1893
-
1894
- it('orderbook L2 gen (no topOfBookQuoteAmounts, 10 numOrders)', async () => {
1895
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1896
-
1897
- const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
1898
- const cc = 38104569;
1899
- mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
1900
- mockMarket1.amm.maxBaseAssetReserve = mockMarket1.amm.baseAssetReserve.mul(
1901
- new BN(2)
1902
- );
1903
- mockMarket1.amm.minBaseAssetReserve = mockMarket1.amm.baseAssetReserve.div(
1904
- new BN(2)
1905
- );
1906
- mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
1907
- mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
1908
- mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
1909
-
1910
- const now = new BN(1688881915);
1911
-
1912
- const mmOraclePriceData: MMOraclePriceData = {
1913
- price: new BN(18.624 * PRICE_PRECISION.toNumber()),
1914
- slot: new BN(0),
1915
- confidence: new BN(1),
1916
- hasSufficientNumberOfDataPoints: true,
1917
- isMMOracleActive: true,
1918
- } as MMOraclePriceData;
1919
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
1920
- 18.5535 * PRICE_PRECISION.toNumber()
1921
- );
1922
-
1923
- const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, mmOraclePriceData);
1924
-
1925
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
1926
- updatedAmm.baseAssetReserve,
1927
- updatedAmm.minBaseAssetReserve,
1928
- updatedAmm.maxBaseAssetReserve,
1929
- mockMarket1.orderStepSize
1930
- );
1931
-
1932
- const generator = getVammL2Generator({
1933
- marketAccount: mockMarket1,
1934
- mmOraclePriceData,
1935
- numOrders: 10,
1936
- now,
1937
- topOfBookQuoteAmounts: [],
1938
- });
1939
-
1940
- const bids = Array.from(generator.getL2Bids());
1941
- // console.log(bids);
1942
-
1943
- const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
1944
- return total.add(order.size);
1945
- }, ZERO);
1946
-
1947
- console.log(
1948
- 'totalBidSize:',
1949
- totalBidSize.toString(),
1950
- 'openBids:',
1951
- openBids.toString()
1952
- );
1953
- assert(totalBidSize.eq(openBids));
1954
-
1955
- const asks = Array.from(generator.getL2Asks());
1956
- // console.log(asks);
1957
-
1958
- const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
1959
- return total.add(order.size);
1960
- }, ZERO);
1961
- console.log(
1962
- 'totalAskSize:',
1963
- totalAskSize.toString(),
1964
- 'openAsks:',
1965
- openAsks.toString()
1966
- );
1967
- assert(totalAskSize.sub(openAsks.abs()).lte(new BN(5))); // only tiny rounding errors
1968
- });
1969
-
1970
- it('orderbook L2 gen (4 topOfBookQuoteAmounts, 10 numOrders)', async () => {
1971
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
1972
-
1973
- const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
1974
- const cc = 38104569;
1975
- mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
1976
- mockMarket1.amm.maxBaseAssetReserve = mockMarket1.amm.baseAssetReserve.mul(
1977
- new BN(2)
1978
- );
1979
- mockMarket1.amm.minBaseAssetReserve = mockMarket1.amm.baseAssetReserve.div(
1980
- new BN(2)
1981
- );
1982
- mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
1983
- mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
1984
- mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
1985
-
1986
- const now = new BN(1688881915);
1987
-
1988
- const mmOraclePriceData: MMOraclePriceData = {
1989
- price: new BN(18.624 * PRICE_PRECISION.toNumber()),
1990
- slot: new BN(0),
1991
- confidence: new BN(1),
1992
- hasSufficientNumberOfDataPoints: true,
1993
- isMMOracleActive: true,
1994
- } as MMOraclePriceData;
1995
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
1996
- 18.5535 * PRICE_PRECISION.toNumber()
1997
- );
1998
-
1999
- const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, mmOraclePriceData);
2000
-
2001
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
2002
- updatedAmm.baseAssetReserve,
2003
- updatedAmm.minBaseAssetReserve,
2004
- updatedAmm.maxBaseAssetReserve,
2005
- mockMarket1.orderStepSize
2006
- );
2007
-
2008
- assert(!openAsks.eq(openBids));
2009
-
2010
- const generator = getVammL2Generator({
2011
- marketAccount: mockMarket1,
2012
- mmOraclePriceData,
2013
- numOrders: 10,
2014
- now,
2015
- topOfBookQuoteAmounts: [
2016
- new BN(10).mul(QUOTE_PRECISION),
2017
- new BN(100).mul(QUOTE_PRECISION),
2018
- new BN(1000).mul(QUOTE_PRECISION),
2019
- new BN(10000).mul(QUOTE_PRECISION),
2020
- ],
2021
- });
2022
-
2023
- const bids = Array.from(generator.getL2Bids());
2024
- // console.log(bids);
2025
-
2026
- const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
2027
- return total.add(order.size);
2028
- }, ZERO);
2029
-
2030
- console.log(
2031
- 'totalBidSize:',
2032
- totalBidSize.toString(),
2033
- 'openBids:',
2034
- openBids.toString()
2035
- );
2036
- assert(totalBidSize.eq(openBids));
2037
-
2038
- const asks = Array.from(generator.getL2Asks());
2039
- // console.log(asks);
2040
-
2041
- const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
2042
- return total.add(order.size);
2043
- }, ZERO);
2044
- console.log(
2045
- 'totalAskSize:',
2046
- totalAskSize.toString(),
2047
- 'openAsks:',
2048
- openAsks.toString()
2049
- );
2050
- assert(totalAskSize.sub(openAsks.abs()).lte(new BN(5))); // only tiny rounding errors
2051
- });
2052
-
2053
- it('orderbook L2 gen (4 topOfBookQuoteAmounts, 10 numOrders, low bid liquidity)', async () => {
2054
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
2055
-
2056
- const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
2057
- const cc = 38104569;
2058
- mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
2059
- mockMarket1.amm.maxBaseAssetReserve =
2060
- mockMarket1.amm.baseAssetReserve.add(BASE_PRECISION); // only 1 base
2061
- mockMarket1.amm.minBaseAssetReserve = mockMarket1.amm.baseAssetReserve.div(
2062
- new BN(2)
2063
- );
2064
- mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
2065
- mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
2066
- mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
2067
-
2068
- const now = new BN(1688881915);
2069
-
2070
- const mmOraclePriceData: MMOraclePriceData = {
2071
- price: new BN(18.624 * PRICE_PRECISION.toNumber()),
2072
- slot: new BN(0),
2073
- confidence: new BN(1),
2074
- hasSufficientNumberOfDataPoints: true,
2075
- isMMOracleActive: true,
2076
- } as MMOraclePriceData;
2077
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
2078
- 18.5535 * PRICE_PRECISION.toNumber()
2079
- );
2080
-
2081
- const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, mmOraclePriceData);
2082
-
2083
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
2084
- updatedAmm.baseAssetReserve,
2085
- updatedAmm.minBaseAssetReserve,
2086
- updatedAmm.maxBaseAssetReserve,
2087
- mockMarket1.orderStepSize
2088
- );
2089
-
2090
- assert(!openAsks.eq(openBids));
2091
-
2092
- const generator = getVammL2Generator({
2093
- marketAccount: mockMarket1,
2094
- mmOraclePriceData,
2095
- numOrders: 10,
2096
- now,
2097
- topOfBookQuoteAmounts: [
2098
- new BN(10).mul(QUOTE_PRECISION),
2099
- new BN(100).mul(QUOTE_PRECISION),
2100
- new BN(1000).mul(QUOTE_PRECISION),
2101
- new BN(10000).mul(QUOTE_PRECISION),
2102
- ],
2103
- });
2104
-
2105
- const bids = Array.from(generator.getL2Bids());
2106
- assert(bids.length == 2);
2107
- console.log(bids[0].size.toString());
2108
- console.log(bids[1].size.toString());
2109
-
2110
- const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
2111
- return total.add(order.size);
2112
- }, ZERO);
2113
-
2114
- console.log(
2115
- 'totalBidSize:',
2116
- totalBidSize.toString(),
2117
- 'openBids:',
2118
- openBids.toString()
2119
- );
2120
- assert(totalBidSize.eq(openBids));
2121
-
2122
- const asks = Array.from(generator.getL2Asks());
2123
- // console.log(asks);
2124
-
2125
- const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
2126
- return total.add(order.size);
2127
- }, ZERO);
2128
- console.log(
2129
- 'totalAskSize:',
2130
- totalAskSize.toString(),
2131
- 'openAsks:',
2132
- openAsks.toString()
2133
- );
2134
- assert(totalAskSize.sub(openAsks.abs()).lte(new BN(5))); // only tiny rounding errors
2135
- });
2136
-
2137
- it('orderbook L2 gen (4 topOfBookQuoteAmounts, 10 numOrders, low ask liquidity)', async () => {
2138
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
2139
-
2140
- const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
2141
- const cc = 38104569;
2142
- mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
2143
- mockMarket1.amm.maxBaseAssetReserve = mockMarket1.amm.baseAssetReserve.add(
2144
- BASE_PRECISION.mul(new BN(1000))
2145
- ); // 1000 base
2146
- mockMarket1.amm.minBaseAssetReserve = mockMarket1.amm.baseAssetReserve.sub(
2147
- BASE_PRECISION.div(new BN(2))
2148
- ); // only .5 base
2149
- mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
2150
- mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
2151
- mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
2152
-
2153
- const now = new BN(1688881915);
2154
-
2155
- const mmOraclePriceData: MMOraclePriceData = {
2156
- price: new BN(18.624 * PRICE_PRECISION.toNumber()),
2157
- slot: new BN(0),
2158
- confidence: new BN(1),
2159
- hasSufficientNumberOfDataPoints: true,
2160
- isMMOracleActive: true,
2161
- };
2162
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
2163
- 18.5535 * PRICE_PRECISION.toNumber()
2164
- );
2165
-
2166
- const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, mmOraclePriceData);
2167
-
2168
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
2169
- updatedAmm.baseAssetReserve,
2170
- updatedAmm.minBaseAssetReserve,
2171
- updatedAmm.maxBaseAssetReserve,
2172
- mockMarket1.orderStepSize
2173
- );
2174
-
2175
- assert(!openAsks.eq(openBids));
2176
-
2177
- const generator = getVammL2Generator({
2178
- marketAccount: mockMarket1,
2179
- mmOraclePriceData,
2180
- numOrders: 10,
2181
- now,
2182
- topOfBookQuoteAmounts: [
2183
- new BN(10).mul(QUOTE_PRECISION),
2184
- new BN(100).mul(QUOTE_PRECISION),
2185
- new BN(1000).mul(QUOTE_PRECISION),
2186
- new BN(10000).mul(QUOTE_PRECISION),
2187
- ],
2188
- });
2189
-
2190
- const bids = Array.from(generator.getL2Bids());
2191
-
2192
- const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
2193
- return total.add(order.size);
2194
- }, ZERO);
2195
-
2196
- console.log(
2197
- 'totalBidSize:',
2198
- totalBidSize.toString(),
2199
- 'openBids:',
2200
- openBids.toString()
2201
- );
2202
- assert(totalBidSize.sub(openBids).abs().lt(new BN(5)));
2203
-
2204
- const asks = Array.from(generator.getL2Asks());
2205
- // console.log(asks);
2206
-
2207
- assert(asks.length == 1);
2208
- console.log(asks[0].size.toString());
2209
- const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
2210
- return total.add(order.size);
2211
- }, ZERO);
2212
- console.log(
2213
- 'totalAskSize:',
2214
- totalAskSize.toString(),
2215
- 'openAsks:',
2216
- openAsks.toString()
2217
- );
2218
- assert(totalAskSize.sub(openAsks.abs()).lte(new BN(5))); // only tiny rounding errors
2219
- });
2220
-
2221
- it('orderbook L2 gen (no topOfBookQuoteAmounts, 10 numOrders, no liquidity)', async () => {
2222
- const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
2223
-
2224
- const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
2225
- const cc = 38104569;
2226
- mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
2227
- mockMarket1.marketStats.minOrderSize = new BN(5);
2228
- mockMarket1.amm.maxBaseAssetReserve = mockMarket1.amm.baseAssetReserve.add(
2229
- new BN(9)
2230
- );
2231
- mockMarket1.amm.minBaseAssetReserve = mockMarket1.amm.baseAssetReserve.sub(
2232
- new BN(9)
2233
- );
2234
- mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
2235
- mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
2236
- mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
2237
-
2238
- const now = new BN(1688881915);
2239
-
2240
- const mmOraclePriceData: MMOraclePriceData = {
2241
- price: new BN(18.624 * PRICE_PRECISION.toNumber()),
2242
- slot: new BN(0),
2243
- confidence: new BN(1),
2244
- hasSufficientNumberOfDataPoints: true,
2245
- isMMOracleActive: true,
2246
- } as MMOraclePriceData;
2247
- mockMarket1.marketStats.historicalOracleData.lastOraclePrice = new BN(
2248
- 18.5535 * PRICE_PRECISION.toNumber()
2249
- );
2250
-
2251
- const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, mmOraclePriceData);
2252
-
2253
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
2254
- updatedAmm.baseAssetReserve,
2255
- updatedAmm.minBaseAssetReserve,
2256
- updatedAmm.maxBaseAssetReserve,
2257
- mockMarket1.orderStepSize
2258
- );
2259
-
2260
- const generator = getVammL2Generator({
2261
- marketAccount: mockMarket1,
2262
- mmOraclePriceData,
2263
- numOrders: 10,
2264
- now,
2265
- topOfBookQuoteAmounts: [],
2266
- });
2267
-
2268
- const bids = Array.from(generator.getL2Bids());
2269
- // console.log(bids);
2270
-
2271
- const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
2272
- return total.add(order.size);
2273
- }, ZERO);
2274
-
2275
- console.log(
2276
- 'totalBidSize:',
2277
- totalBidSize.toString(),
2278
- 'openBids:',
2279
- openBids.toString()
2280
- );
2281
- assert(openBids.eq(new BN(9)));
2282
- assert(totalBidSize.eq(ZERO));
2283
-
2284
- const asks = Array.from(generator.getL2Asks());
2285
- // console.log(asks);
2286
-
2287
- const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
2288
- return total.add(order.size);
2289
- }, ZERO);
2290
- console.log(
2291
- 'totalAskSize:',
2292
- totalAskSize.toString(),
2293
- 'openAsks:',
2294
- openAsks.toString()
2295
- );
2296
-
2297
- assert(openAsks.eq(new BN(-9)));
2298
- assert(totalAskSize.eq(ZERO));
2299
- });
2300
- });