@drift-labs/sdk 2.162.0-beta.2 → 2.163.0-beta.10

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 (500) hide show
  1. package/.prettierignore +1 -0
  2. package/.yarn/install-state.gz +0 -0
  3. package/README.md +2 -2
  4. package/VERSION +1 -1
  5. package/bun.lock +47 -79
  6. package/lib/browser/accounts/fetch.d.ts +6 -6
  7. package/lib/browser/accounts/fetch.js +4 -4
  8. package/lib/browser/accounts/grpcAccountSubscriber.d.ts +2 -2
  9. package/lib/browser/accounts/grpcDriftClientAccountSubscriber.d.ts +2 -2
  10. package/lib/browser/accounts/grpcDriftClientAccountSubscriberV2.d.ts +3 -3
  11. package/lib/browser/accounts/grpcDriftClientAccountSubscriberV2.js +2 -2
  12. package/lib/browser/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +2 -2
  13. package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +2 -2
  14. package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -2
  15. package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +2 -2
  16. package/lib/browser/accounts/grpcUserAccountSubscriber.d.ts +2 -2
  17. package/lib/browser/accounts/grpcUserStatsAccountSubscriber.d.ts +2 -2
  18. package/lib/browser/accounts/laserProgramAccountSubscriber.d.ts +2 -2
  19. package/lib/browser/accounts/oneShotUserAccountSubscriber.d.ts +3 -3
  20. package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.d.ts +3 -3
  21. package/lib/browser/accounts/pollingDriftClientAccountSubscriber.d.ts +3 -3
  22. package/lib/browser/accounts/pollingDriftClientAccountSubscriber.js +2 -2
  23. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +3 -3
  24. package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +1 -1
  25. package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +2 -2
  26. package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +2 -2
  27. package/lib/browser/accounts/pollingUserAccountSubscriber.js +2 -2
  28. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +3 -3
  29. package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +1 -1
  30. package/lib/browser/accounts/testBulkAccountLoader.js +3 -5
  31. package/lib/browser/accounts/types.d.ts +11 -14
  32. package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +3 -3
  33. package/lib/browser/accounts/webSocketAccountSubscriber.js +1 -2
  34. package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +3 -3
  35. package/lib/browser/accounts/webSocketDriftClientAccountSubscriber.d.ts +5 -5
  36. package/lib/browser/accounts/webSocketDriftClientAccountSubscriber.js +2 -2
  37. package/lib/browser/accounts/webSocketDriftClientAccountSubscriberV2.d.ts +3 -3
  38. package/lib/browser/accounts/webSocketDriftClientAccountSubscriberV2.js +2 -2
  39. package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +3 -3
  40. package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +3 -3
  41. package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -3
  42. package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -3
  43. package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +3 -3
  44. package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +3 -3
  45. package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +2 -2
  46. package/lib/browser/addresses/pda.d.ts +6 -2
  47. package/lib/browser/addresses/pda.js +7 -12
  48. package/lib/browser/adminClient.d.ts +11 -9
  49. package/lib/browser/adminClient.js +30 -72
  50. package/lib/browser/auctionSubscriber/auctionSubscriber.js +1 -1
  51. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +1 -1
  52. package/lib/browser/config.d.ts +7 -3
  53. package/lib/browser/config.js +9 -7
  54. package/lib/browser/constants/index.d.ts +5 -0
  55. package/lib/browser/constants/index.js +5 -0
  56. package/lib/browser/constants/numericConstants.d.ts +1 -1
  57. package/lib/browser/constants/numericConstants.js +3 -3
  58. package/lib/browser/constants/perpMarkets.js +3 -412
  59. package/lib/browser/constants/spotMarkets.js +7 -91
  60. package/lib/browser/constituentMap/constituentMap.js +2 -2
  61. package/lib/browser/constituentMap/pollingConstituentAccountSubscriber.d.ts +3 -3
  62. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.d.ts +3 -3
  63. package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.js +1 -1
  64. package/lib/browser/decode/customCoder.d.ts +7 -9
  65. package/lib/browser/decode/customCoder.js +17 -28
  66. package/lib/browser/decode/user.js +7 -25
  67. package/lib/browser/dlob/DLOB.d.ts +12 -0
  68. package/lib/browser/dlob/DLOB.js +12 -0
  69. package/lib/browser/dlob/orderBookLevels.js +1 -1
  70. package/lib/browser/driftClient.d.ts +32 -59
  71. package/lib/browser/driftClient.js +85 -562
  72. package/lib/browser/driftClientConfig.d.ts +7 -0
  73. package/lib/browser/events/eventSubscriber.d.ts +8 -0
  74. package/lib/browser/events/eventSubscriber.js +5 -2
  75. package/lib/browser/events/parse.d.ts +1 -1
  76. package/lib/browser/factory/oracleClient.d.ts +2 -2
  77. package/lib/browser/factory/oracleClient.js +9 -21
  78. package/lib/browser/idl/drift.d.ts +21406 -0
  79. package/lib/browser/idl/drift.js +2 -0
  80. package/lib/browser/idl/drift.json +20850 -15287
  81. package/lib/browser/idl/pyth.d.ts +97 -0
  82. package/lib/browser/idl/pyth.js +2 -0
  83. package/lib/browser/idl/token_faucet.d.ts +197 -0
  84. package/lib/browser/idl/token_faucet.js +2 -0
  85. package/lib/browser/idl/token_faucet.json +148 -61
  86. package/lib/browser/index.d.ts +13 -6
  87. package/lib/browser/index.js +12 -5
  88. package/lib/browser/marinade/index.d.ts +1 -1
  89. package/lib/browser/marinade/index.js +2 -2
  90. package/lib/browser/math/amm.d.ts +4 -5
  91. package/lib/browser/math/amm.js +8 -35
  92. package/lib/browser/math/funding.js +6 -1
  93. package/lib/browser/math/margin.d.ts +3 -4
  94. package/lib/browser/math/margin.js +16 -47
  95. package/lib/browser/math/market.d.ts +2 -2
  96. package/lib/browser/math/market.js +10 -42
  97. package/lib/browser/math/oracles.js +14 -19
  98. package/lib/browser/math/position.js +1 -1
  99. package/lib/browser/math/trade.js +4 -4
  100. package/lib/browser/memcmp.js +8 -8
  101. package/lib/browser/openbook/openbookV2Subscriber.d.ts +1 -1
  102. package/lib/browser/openbook/openbookV2Subscriber.js +3 -3
  103. package/lib/browser/oracles/oracleClientCache.d.ts +2 -2
  104. package/lib/browser/oracles/prelaunchOracleClient.d.ts +2 -2
  105. package/lib/browser/oracles/prelaunchOracleClient.js +1 -1
  106. package/lib/browser/oracles/pythLazerClient.js +3 -5
  107. package/lib/browser/oracles/types.d.ts +6 -0
  108. package/lib/browser/orderParams.d.ts +0 -1
  109. package/lib/browser/orderParams.js +1 -5
  110. package/lib/browser/orderSubscriber/OrderSubscriber.js +3 -4
  111. package/lib/browser/orderSubscriber/WebsocketSubscription.js +1 -1
  112. package/lib/browser/orderSubscriber/grpcSubscription.js +2 -2
  113. package/lib/browser/orderSubscriber/index.d.ts +5 -0
  114. package/lib/browser/orderSubscriber/index.js +5 -0
  115. package/lib/browser/priorityFee/index.d.ts +5 -0
  116. package/lib/browser/priorityFee/index.js +5 -0
  117. package/lib/browser/pyth/index.d.ts +2 -2
  118. package/lib/browser/pyth/types.d.ts +1 -1
  119. package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.js +1 -1
  120. package/lib/browser/swift/index.d.ts +7 -0
  121. package/lib/browser/swift/index.js +7 -0
  122. package/lib/browser/swift/signedMsgUserAccountSubscriber.js +4 -3
  123. package/lib/browser/tokenFaucet.d.ts +2 -2
  124. package/lib/browser/tokenFaucet.js +4 -4
  125. package/lib/browser/tx/txHandler.d.ts +12 -0
  126. package/lib/browser/tx/txHandler.js +12 -0
  127. package/lib/browser/types.d.ts +19 -31
  128. package/lib/browser/types.js +6 -11
  129. package/lib/browser/user.d.ts +27 -18
  130. package/lib/browser/user.js +64 -100
  131. package/lib/browser/userMap/WebsocketSubscription.js +1 -1
  132. package/lib/browser/userMap/grpcSubscription.js +1 -1
  133. package/lib/browser/userMap/revenueShareEscrowMap.js +4 -4
  134. package/lib/browser/userMap/userMap.js +4 -5
  135. package/lib/browser/userMap/userStatsMap.js +2 -3
  136. package/lib/browser/userStats.d.ts +5 -0
  137. package/lib/node/accounts/fetch.d.ts +6 -6
  138. package/lib/node/accounts/fetch.d.ts.map +1 -1
  139. package/lib/node/accounts/fetch.js +4 -4
  140. package/lib/node/accounts/grpcAccountSubscriber.d.ts +2 -2
  141. package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
  142. package/lib/node/accounts/grpcDriftClientAccountSubscriber.d.ts +2 -2
  143. package/lib/node/accounts/grpcDriftClientAccountSubscriber.d.ts.map +1 -1
  144. package/lib/node/accounts/grpcDriftClientAccountSubscriberV2.d.ts +3 -3
  145. package/lib/node/accounts/grpcDriftClientAccountSubscriberV2.d.ts.map +1 -1
  146. package/lib/node/accounts/grpcDriftClientAccountSubscriberV2.js +2 -2
  147. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +2 -2
  148. package/lib/node/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  149. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +2 -2
  150. package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
  151. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -2
  152. package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
  153. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +2 -2
  154. package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
  155. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts +2 -2
  156. package/lib/node/accounts/grpcUserAccountSubscriber.d.ts.map +1 -1
  157. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts +2 -2
  158. package/lib/node/accounts/grpcUserStatsAccountSubscriber.d.ts.map +1 -1
  159. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts +2 -2
  160. package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
  161. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts +3 -3
  162. package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
  163. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts +3 -3
  164. package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
  165. package/lib/node/accounts/pollingDriftClientAccountSubscriber.d.ts +3 -3
  166. package/lib/node/accounts/pollingDriftClientAccountSubscriber.d.ts.map +1 -1
  167. package/lib/node/accounts/pollingDriftClientAccountSubscriber.js +2 -2
  168. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +3 -3
  169. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  170. package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +1 -1
  171. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +2 -2
  172. package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
  173. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +2 -2
  174. package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
  175. package/lib/node/accounts/pollingUserAccountSubscriber.js +2 -2
  176. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +3 -3
  177. package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
  178. package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +1 -1
  179. package/lib/node/accounts/testBulkAccountLoader.d.ts.map +1 -1
  180. package/lib/node/accounts/testBulkAccountLoader.js +3 -5
  181. package/lib/node/accounts/types.d.ts +11 -14
  182. package/lib/node/accounts/types.d.ts.map +1 -1
  183. package/lib/node/accounts/webSocketAccountSubscriber.d.ts +3 -3
  184. package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
  185. package/lib/node/accounts/webSocketAccountSubscriber.js +1 -2
  186. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +3 -3
  187. package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
  188. package/lib/node/accounts/webSocketDriftClientAccountSubscriber.d.ts +5 -5
  189. package/lib/node/accounts/webSocketDriftClientAccountSubscriber.d.ts.map +1 -1
  190. package/lib/node/accounts/webSocketDriftClientAccountSubscriber.js +2 -2
  191. package/lib/node/accounts/webSocketDriftClientAccountSubscriberV2.d.ts +3 -3
  192. package/lib/node/accounts/webSocketDriftClientAccountSubscriberV2.d.ts.map +1 -1
  193. package/lib/node/accounts/webSocketDriftClientAccountSubscriberV2.js +2 -2
  194. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +3 -3
  195. package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
  196. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +3 -3
  197. package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
  198. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -3
  199. package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
  200. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -3
  201. package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
  202. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +3 -3
  203. package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
  204. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +3 -3
  205. package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
  206. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +2 -2
  207. package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
  208. package/lib/node/addresses/pda.d.ts +6 -2
  209. package/lib/node/addresses/pda.d.ts.map +1 -1
  210. package/lib/node/addresses/pda.js +7 -12
  211. package/lib/node/adminClient.d.ts +11 -9
  212. package/lib/node/adminClient.d.ts.map +1 -1
  213. package/lib/node/adminClient.js +30 -72
  214. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  215. package/lib/node/auctionSubscriber/auctionSubscriber.js +1 -1
  216. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  217. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +1 -1
  218. package/lib/node/config.d.ts +7 -3
  219. package/lib/node/config.d.ts.map +1 -1
  220. package/lib/node/config.js +9 -7
  221. package/lib/node/constants/index.d.ts +5 -0
  222. package/lib/node/constants/index.d.ts.map +1 -1
  223. package/lib/node/constants/index.js +5 -0
  224. package/lib/node/constants/numericConstants.d.ts +1 -1
  225. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  226. package/lib/node/constants/numericConstants.js +3 -3
  227. package/lib/node/constants/perpMarkets.d.ts.map +1 -1
  228. package/lib/node/constants/perpMarkets.js +3 -412
  229. package/lib/node/constants/spotMarkets.d.ts.map +1 -1
  230. package/lib/node/constants/spotMarkets.js +7 -91
  231. package/lib/node/constituentMap/constituentMap.d.ts.map +1 -1
  232. package/lib/node/constituentMap/constituentMap.js +2 -2
  233. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.d.ts +3 -3
  234. package/lib/node/constituentMap/pollingConstituentAccountSubscriber.d.ts.map +1 -1
  235. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts +3 -3
  236. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts.map +1 -1
  237. package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.js +1 -1
  238. package/lib/node/decode/customCoder.d.ts +7 -9
  239. package/lib/node/decode/customCoder.d.ts.map +1 -1
  240. package/lib/node/decode/customCoder.js +17 -28
  241. package/lib/node/decode/user.d.ts.map +1 -1
  242. package/lib/node/decode/user.js +7 -25
  243. package/lib/node/dlob/DLOB.d.ts +12 -0
  244. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  245. package/lib/node/dlob/DLOB.js +12 -0
  246. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  247. package/lib/node/dlob/orderBookLevels.js +1 -1
  248. package/lib/node/driftClient.d.ts +32 -59
  249. package/lib/node/driftClient.d.ts.map +1 -1
  250. package/lib/node/driftClient.js +85 -562
  251. package/lib/node/driftClientConfig.d.ts +7 -0
  252. package/lib/node/driftClientConfig.d.ts.map +1 -1
  253. package/lib/node/events/eventSubscriber.d.ts +8 -0
  254. package/lib/node/events/eventSubscriber.d.ts.map +1 -1
  255. package/lib/node/events/eventSubscriber.js +5 -2
  256. package/lib/node/events/parse.d.ts +1 -1
  257. package/lib/node/events/parse.d.ts.map +1 -1
  258. package/lib/node/factory/oracleClient.d.ts +2 -2
  259. package/lib/node/factory/oracleClient.d.ts.map +1 -1
  260. package/lib/node/factory/oracleClient.js +9 -21
  261. package/lib/node/idl/drift.d.ts +21407 -0
  262. package/lib/node/idl/drift.d.ts.map +1 -0
  263. package/lib/node/idl/drift.js +2 -0
  264. package/lib/node/idl/drift.json +20850 -15287
  265. package/lib/node/idl/pyth.d.ts +98 -0
  266. package/lib/node/idl/pyth.d.ts.map +1 -0
  267. package/lib/node/idl/pyth.js +2 -0
  268. package/lib/node/idl/token_faucet.d.ts +198 -0
  269. package/lib/node/idl/token_faucet.d.ts.map +1 -0
  270. package/lib/node/idl/token_faucet.js +2 -0
  271. package/lib/node/idl/token_faucet.json +148 -61
  272. package/lib/node/index.d.ts +13 -6
  273. package/lib/node/index.d.ts.map +1 -1
  274. package/lib/node/index.js +12 -5
  275. package/lib/node/marinade/index.d.ts +1 -1
  276. package/lib/node/marinade/index.d.ts.map +1 -1
  277. package/lib/node/marinade/index.js +2 -2
  278. package/lib/node/math/amm.d.ts +4 -5
  279. package/lib/node/math/amm.d.ts.map +1 -1
  280. package/lib/node/math/amm.js +8 -35
  281. package/lib/node/math/funding.d.ts.map +1 -1
  282. package/lib/node/math/funding.js +6 -1
  283. package/lib/node/math/margin.d.ts +3 -4
  284. package/lib/node/math/margin.d.ts.map +1 -1
  285. package/lib/node/math/margin.js +16 -47
  286. package/lib/node/math/market.d.ts +2 -2
  287. package/lib/node/math/market.d.ts.map +1 -1
  288. package/lib/node/math/market.js +10 -42
  289. package/lib/node/math/oracles.d.ts.map +1 -1
  290. package/lib/node/math/oracles.js +14 -19
  291. package/lib/node/math/position.d.ts.map +1 -1
  292. package/lib/node/math/position.js +1 -1
  293. package/lib/node/math/trade.d.ts.map +1 -1
  294. package/lib/node/math/trade.js +4 -4
  295. package/lib/node/memcmp.js +8 -8
  296. package/lib/node/openbook/openbookV2Subscriber.d.ts +1 -1
  297. package/lib/node/openbook/openbookV2Subscriber.d.ts.map +1 -1
  298. package/lib/node/openbook/openbookV2Subscriber.js +3 -3
  299. package/lib/node/oracles/oracleClientCache.d.ts +2 -2
  300. package/lib/node/oracles/oracleClientCache.d.ts.map +1 -1
  301. package/lib/node/oracles/prelaunchOracleClient.d.ts +2 -2
  302. package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
  303. package/lib/node/oracles/prelaunchOracleClient.js +1 -1
  304. package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
  305. package/lib/node/oracles/pythLazerClient.js +3 -5
  306. package/lib/node/oracles/types.d.ts +6 -0
  307. package/lib/node/oracles/types.d.ts.map +1 -1
  308. package/lib/node/orderParams.d.ts +0 -1
  309. package/lib/node/orderParams.d.ts.map +1 -1
  310. package/lib/node/orderParams.js +1 -5
  311. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  312. package/lib/node/orderSubscriber/OrderSubscriber.js +3 -4
  313. package/lib/node/orderSubscriber/WebsocketSubscription.js +1 -1
  314. package/lib/node/orderSubscriber/grpcSubscription.js +2 -2
  315. package/lib/node/orderSubscriber/index.d.ts +5 -0
  316. package/lib/node/orderSubscriber/index.d.ts.map +1 -1
  317. package/lib/node/orderSubscriber/index.js +5 -0
  318. package/lib/node/priorityFee/index.d.ts +5 -0
  319. package/lib/node/priorityFee/index.d.ts.map +1 -1
  320. package/lib/node/priorityFee/index.js +5 -0
  321. package/lib/node/pyth/index.d.ts +2 -2
  322. package/lib/node/pyth/index.d.ts.map +1 -1
  323. package/lib/node/pyth/types.d.ts +1 -1
  324. package/lib/node/pyth/types.d.ts.map +1 -1
  325. package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.js +1 -1
  326. package/lib/node/swift/index.d.ts +7 -0
  327. package/lib/node/swift/index.d.ts.map +1 -1
  328. package/lib/node/swift/index.js +7 -0
  329. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
  330. package/lib/node/swift/signedMsgUserAccountSubscriber.js +4 -3
  331. package/lib/node/tokenFaucet.d.ts +2 -2
  332. package/lib/node/tokenFaucet.d.ts.map +1 -1
  333. package/lib/node/tokenFaucet.js +4 -4
  334. package/lib/node/tx/txHandler.d.ts +12 -0
  335. package/lib/node/tx/txHandler.d.ts.map +1 -1
  336. package/lib/node/tx/txHandler.js +12 -0
  337. package/lib/node/types.d.ts +19 -31
  338. package/lib/node/types.d.ts.map +1 -1
  339. package/lib/node/types.js +6 -11
  340. package/lib/node/user.d.ts +27 -18
  341. package/lib/node/user.d.ts.map +1 -1
  342. package/lib/node/user.js +64 -100
  343. package/lib/node/userMap/WebsocketSubscription.js +1 -1
  344. package/lib/node/userMap/grpcSubscription.js +1 -1
  345. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  346. package/lib/node/userMap/revenueShareEscrowMap.js +4 -4
  347. package/lib/node/userMap/userMap.d.ts.map +1 -1
  348. package/lib/node/userMap/userMap.js +4 -5
  349. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  350. package/lib/node/userMap/userStatsMap.js +2 -3
  351. package/lib/node/userStats.d.ts +5 -0
  352. package/lib/node/userStats.d.ts.map +1 -1
  353. package/package.json +5 -7
  354. package/src/accounts/fetch.ts +18 -17
  355. package/src/accounts/grpcAccountSubscriber.ts +3 -3
  356. package/src/accounts/grpcDriftClientAccountSubscriber.ts +2 -3
  357. package/src/accounts/grpcDriftClientAccountSubscriberV2.ts +5 -6
  358. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +2 -2
  359. package/src/accounts/grpcMultiAccountSubscriber.ts +4 -4
  360. package/src/accounts/grpcMultiUserAccountSubscriber.ts +4 -4
  361. package/src/accounts/grpcProgramAccountSubscriber.ts +3 -3
  362. package/src/accounts/grpcUserAccountSubscriber.ts +2 -2
  363. package/src/accounts/grpcUserStatsAccountSubscriber.ts +2 -2
  364. package/src/accounts/laserProgramAccountSubscriber.ts +3 -3
  365. package/src/accounts/oneShotUserAccountSubscriber.ts +6 -7
  366. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +10 -9
  367. package/src/accounts/pollingDriftClientAccountSubscriber.ts +12 -11
  368. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +11 -10
  369. package/src/accounts/pollingOracleAccountSubscriber.ts +2 -2
  370. package/src/accounts/pollingTokenAccountSubscriber.ts +2 -2
  371. package/src/accounts/pollingUserAccountSubscriber.ts +2 -2
  372. package/src/accounts/pollingUserStatsAccountSubscriber.ts +14 -14
  373. package/src/accounts/testBulkAccountLoader.ts +3 -5
  374. package/src/accounts/types.ts +10 -25
  375. package/src/accounts/webSocketAccountSubscriber.ts +5 -5
  376. package/src/accounts/webSocketAccountSubscriberV2.ts +4 -3
  377. package/src/accounts/webSocketDriftClientAccountSubscriber.ts +9 -10
  378. package/src/accounts/webSocketDriftClientAccountSubscriberV2.ts +13 -10
  379. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +3 -3
  380. package/src/accounts/webSocketProgramAccountSubscriber.ts +4 -3
  381. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +4 -3
  382. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +4 -3
  383. package/src/accounts/webSocketUserAccountSubscriber.ts +3 -3
  384. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +3 -3
  385. package/src/accounts/websocketProgramUserAccountSubscriber.ts +4 -4
  386. package/src/addresses/pda.ts +6 -22
  387. package/src/adminClient.ts +154 -239
  388. package/src/auctionSubscriber/auctionSubscriber.ts +5 -3
  389. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +5 -3
  390. package/src/config.ts +24 -16
  391. package/src/constants/index.ts +5 -0
  392. package/src/constants/numericConstants.ts +2 -3
  393. package/src/constants/perpMarkets.ts +3 -445
  394. package/src/constants/spotMarkets.ts +7 -102
  395. package/src/constituentMap/constituentMap.ts +5 -6
  396. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +3 -3
  397. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +6 -6
  398. package/src/decode/customCoder.ts +26 -35
  399. package/src/decode/user.ts +7 -25
  400. package/src/dlob/DLOB.ts +12 -0
  401. package/src/dlob/orderBookLevels.ts +0 -1
  402. package/src/driftClient.ts +245 -1091
  403. package/src/driftClientConfig.ts +7 -0
  404. package/src/events/eventSubscriber.ts +14 -2
  405. package/src/events/parse.ts +2 -2
  406. package/src/factory/oracleClient.ts +17 -28
  407. package/src/idl/drift.json +20850 -15287
  408. package/src/idl/drift.ts +21406 -0
  409. package/src/idl/pyth.ts +97 -0
  410. package/src/idl/token_faucet.json +148 -61
  411. package/src/idl/token_faucet.ts +197 -0
  412. package/src/index.ts +13 -12
  413. package/src/margin/README.md +0 -1
  414. package/src/marinade/index.ts +2 -2
  415. package/src/math/amm.ts +2 -48
  416. package/src/math/funding.ts +8 -3
  417. package/src/math/margin.ts +12 -67
  418. package/src/math/market.ts +15 -69
  419. package/src/math/oracles.ts +14 -30
  420. package/src/math/position.ts +0 -1
  421. package/src/math/trade.ts +0 -4
  422. package/src/memcmp.ts +1 -1
  423. package/src/openbook/openbookV2Subscriber.ts +1 -1
  424. package/src/oracles/oracleClientCache.ts +2 -2
  425. package/src/oracles/prelaunchOracleClient.ts +9 -8
  426. package/src/oracles/pythLazerClient.ts +10 -12
  427. package/src/oracles/types.ts +6 -0
  428. package/src/orderParams.ts +0 -5
  429. package/src/orderSubscriber/OrderSubscriber.ts +7 -6
  430. package/src/orderSubscriber/WebsocketSubscription.ts +1 -1
  431. package/src/orderSubscriber/grpcSubscription.ts +2 -2
  432. package/src/orderSubscriber/index.ts +5 -0
  433. package/src/priorityFee/index.ts +5 -0
  434. package/src/pyth/index.ts +4 -4
  435. package/src/pyth/types.ts +1 -1
  436. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +1 -1
  437. package/src/swift/index.ts +7 -0
  438. package/src/swift/signedMsgUserAccountSubscriber.ts +7 -4
  439. package/src/tokenFaucet.ts +8 -4
  440. package/src/tx/txHandler.ts +12 -0
  441. package/src/types.ts +16 -20
  442. package/src/user.ts +66 -144
  443. package/src/userMap/WebsocketSubscription.ts +1 -1
  444. package/src/userMap/grpcSubscription.ts +1 -1
  445. package/src/userMap/revenueShareEscrowMap.ts +24 -20
  446. package/src/userMap/userMap.ts +8 -7
  447. package/src/userMap/userStatsMap.ts +6 -5
  448. package/src/userStats.ts +5 -0
  449. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +5 -4
  450. package/tests/amm/test.ts +45 -64
  451. package/tests/ci/verifyConstants.ts +23 -26
  452. package/tests/decode/test.ts +2 -4
  453. package/tests/dlob/helpers.ts +8 -15
  454. package/tests/user/helpers.ts +0 -2
  455. package/tests/user/marginCalculations.test.ts +2 -3
  456. package/tests/user/test.ts +18 -15
  457. package/lib/browser/accounts/pollingHighLeverageModeConfigAccountSubscriber.d.ts +0 -29
  458. package/lib/browser/accounts/pollingHighLeverageModeConfigAccountSubscriber.js +0 -111
  459. package/lib/browser/accounts/webSocketHighLeverageModeConfigAccountSubscriber.d.ts +0 -23
  460. package/lib/browser/accounts/webSocketHighLeverageModeConfigAccountSubscriber.js +0 -69
  461. package/lib/browser/idl/pyth_solana_receiver.json +0 -628
  462. package/lib/browser/idl/switchboard.json +0 -8354
  463. package/lib/browser/idl/switchboard_on_demand_30.json +0 -5849
  464. package/lib/browser/oracles/pythPullClient.d.ts +0 -19
  465. package/lib/browser/oracles/pythPullClient.js +0 -65
  466. package/lib/browser/oracles/switchboardClient.d.ts +0 -12
  467. package/lib/browser/oracles/switchboardClient.js +0 -40
  468. package/lib/browser/oracles/switchboardOnDemandClient.d.ts +0 -12
  469. package/lib/browser/oracles/switchboardOnDemandClient.js +0 -33
  470. package/lib/browser/util/pythOracleUtils.d.ts +0 -2
  471. package/lib/browser/util/pythOracleUtils.js +0 -15
  472. package/lib/node/accounts/pollingHighLeverageModeConfigAccountSubscriber.d.ts +0 -30
  473. package/lib/node/accounts/pollingHighLeverageModeConfigAccountSubscriber.d.ts.map +0 -1
  474. package/lib/node/accounts/pollingHighLeverageModeConfigAccountSubscriber.js +0 -111
  475. package/lib/node/accounts/webSocketHighLeverageModeConfigAccountSubscriber.d.ts +0 -24
  476. package/lib/node/accounts/webSocketHighLeverageModeConfigAccountSubscriber.d.ts.map +0 -1
  477. package/lib/node/accounts/webSocketHighLeverageModeConfigAccountSubscriber.js +0 -69
  478. package/lib/node/idl/pyth_solana_receiver.json +0 -628
  479. package/lib/node/idl/switchboard.json +0 -8354
  480. package/lib/node/idl/switchboard_on_demand_30.json +0 -5849
  481. package/lib/node/oracles/pythPullClient.d.ts +0 -20
  482. package/lib/node/oracles/pythPullClient.d.ts.map +0 -1
  483. package/lib/node/oracles/pythPullClient.js +0 -65
  484. package/lib/node/oracles/switchboardClient.d.ts +0 -13
  485. package/lib/node/oracles/switchboardClient.d.ts.map +0 -1
  486. package/lib/node/oracles/switchboardClient.js +0 -40
  487. package/lib/node/oracles/switchboardOnDemandClient.d.ts +0 -13
  488. package/lib/node/oracles/switchboardOnDemandClient.d.ts.map +0 -1
  489. package/lib/node/oracles/switchboardOnDemandClient.js +0 -33
  490. package/lib/node/util/pythOracleUtils.d.ts +0 -3
  491. package/lib/node/util/pythOracleUtils.d.ts.map +0 -1
  492. package/lib/node/util/pythOracleUtils.js +0 -15
  493. package/src/accounts/pollingHighLeverageModeConfigAccountSubscriber.ts +0 -189
  494. package/src/accounts/webSocketHighLeverageModeConfigAccountSubscriber.ts +0 -131
  495. package/src/idl/switchboard.json +0 -8354
  496. package/src/idl/switchboard_on_demand_30.json +0 -5849
  497. package/src/oracles/pythPullClient.ts +0 -112
  498. package/src/oracles/switchboardClient.ts +0 -77
  499. package/src/oracles/switchboardOnDemandClient.ts +0 -64
  500. package/src/util/pythOracleUtils.ts +0 -11
package/src/math/amm.ts CHANGED
@@ -197,7 +197,6 @@ export function calculateUpdatedAMMSpreadReserves(
197
197
  amm: AMM,
198
198
  direction: PositionDirection,
199
199
  mmOraclePriceData: MMOraclePriceData,
200
- isPrediction = false,
201
200
  latestSlot?: BN
202
201
  ): { baseAssetReserve: BN; quoteAssetReserve: BN; sqrtK: BN; newPeg: BN } {
203
202
  const newAmm = calculateUpdatedAMM(amm, mmOraclePriceData);
@@ -205,7 +204,6 @@ export function calculateUpdatedAMMSpreadReserves(
205
204
  newAmm,
206
205
  mmOraclePriceData,
207
206
  undefined,
208
- isPrediction,
209
207
  latestSlot
210
208
  );
211
209
 
@@ -227,7 +225,6 @@ export function calculateBidAskPrice(
227
225
  amm: AMM,
228
226
  mmOraclePriceData: MMOraclePriceData,
229
227
  withUpdate = true,
230
- isPrediction = false,
231
228
  latestSlot?: BN
232
229
  ): [BN, BN] {
233
230
  let newAmm: AMM;
@@ -241,7 +238,6 @@ export function calculateBidAskPrice(
241
238
  newAmm,
242
239
  mmOraclePriceData,
243
240
  undefined,
244
- isPrediction,
245
241
  latestSlot
246
242
  );
247
243
 
@@ -927,42 +923,10 @@ export function calculateSpread(
927
923
  return [longSpread, shortSpread];
928
924
  }
929
925
 
930
- export function getQuoteAssetReservePredictionMarketBounds(
931
- amm: AMM,
932
- direction: PositionDirection
933
- ): [BN, BN] {
934
- let quoteAssetReserveLowerBound = ZERO;
935
-
936
- const pegSqrt = squareRootBN(
937
- amm.pegMultiplier.mul(PEG_PRECISION).addn(1)
938
- ).addn(1);
939
-
940
- let quoteAssetReserveUpperBound = amm.sqrtK
941
- .mul(pegSqrt)
942
- .div(amm.pegMultiplier);
943
-
944
- if (direction === PositionDirection.LONG) {
945
- quoteAssetReserveLowerBound = amm.sqrtK
946
- .muln(22361)
947
- .mul(pegSqrt)
948
- .divn(100000)
949
- .div(amm.pegMultiplier);
950
- } else {
951
- quoteAssetReserveUpperBound = amm.sqrtK
952
- .muln(97467)
953
- .mul(pegSqrt)
954
- .divn(100000)
955
- .div(amm.pegMultiplier);
956
- }
957
-
958
- return [quoteAssetReserveLowerBound, quoteAssetReserveUpperBound];
959
- }
960
-
961
926
  export function calculateSpreadReserves(
962
927
  amm: AMM,
963
928
  mmOraclePriceData: MMOraclePriceData,
964
929
  now?: BN,
965
- isPrediction = false,
966
930
  latestSlot?: BN
967
931
  ) {
968
932
  function calculateSpreadReserve(
@@ -1001,14 +965,6 @@ export function calculateSpreadReserves(
1001
965
  );
1002
966
  }
1003
967
 
1004
- if (isPrediction) {
1005
- const [qarLower, qarUpper] = getQuoteAssetReservePredictionMarketBounds(
1006
- amm,
1007
- direction
1008
- );
1009
- quoteAssetReserve = clampBN(quoteAssetReserve, qarLower, qarUpper);
1010
- }
1011
-
1012
968
  const baseAssetReserve = amm.sqrtK.mul(amm.sqrtK).div(quoteAssetReserve);
1013
969
  return {
1014
970
  baseAssetReserve,
@@ -1206,8 +1162,7 @@ export function calculateMaxBaseAssetAmountToTrade(
1206
1162
  limit_price: BN,
1207
1163
  direction: PositionDirection,
1208
1164
  mmOraclePriceData?: MMOraclePriceData,
1209
- now?: BN,
1210
- isPrediction = false
1165
+ now?: BN
1211
1166
  ): [BN, PositionDirection] {
1212
1167
  const invariant = amm.sqrtK.mul(amm.sqrtK);
1213
1168
 
@@ -1221,8 +1176,7 @@ export function calculateMaxBaseAssetAmountToTrade(
1221
1176
  const [shortSpreadReserves, longSpreadReserves] = calculateSpreadReserves(
1222
1177
  amm,
1223
1178
  mmOraclePriceData,
1224
- now,
1225
- isPrediction
1179
+ now
1226
1180
  );
1227
1181
 
1228
1182
  const baseAssetReserveBefore: BN = isVariant(direction, 'long')
@@ -6,6 +6,7 @@ import {
6
6
  ZERO,
7
7
  ONE,
8
8
  FUNDING_RATE_OFFSET_DENOMINATOR,
9
+ FUNDING_RATE_CLAMP_DENOMINATOR,
9
10
  } from '../constants/numericConstants';
10
11
  import { BigNum } from '../factory/bigNum';
11
12
  import { PerpMarketAccount, isVariant } from '../types';
@@ -164,9 +165,13 @@ export function calculateAllEstimatedFundingRate(
164
165
  // }
165
166
 
166
167
  const twapSpread = markTwap.sub(oracleTwap);
167
- const twapSpreadWithOffset = twapSpread.add(
168
- oracleTwap.abs().div(FUNDING_RATE_OFFSET_DENOMINATOR)
169
- );
168
+ const offset = oracleTwap.abs().div(FUNDING_RATE_OFFSET_DENOMINATOR);
169
+ const twapSpreadWithOffset = twapSpread
170
+ .abs()
171
+ .lte(oracleTwap.abs().div(FUNDING_RATE_CLAMP_DENOMINATOR))
172
+ ? offset
173
+ : twapSpread.add(offset);
174
+
170
175
  const maxSpread = getMaxPriceDivergenceForFundingRate(market, oracleTwap);
171
176
 
172
177
  const clampedSpreadWithOffset = clampBN(
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Margin calculation helpers — TypeScript mirror of `programs/drift/src/math/margin.rs`.
3
+ * Computes initial/maintenance margin requirements, free collateral, and account health.
4
+ * Used by {@link User} for leverage queries and by keeper bots for liquidation eligibility checks.
5
+ */
1
6
  import { squareRootBN } from './utils';
2
7
  import {
3
8
  SPOT_MARKET_WEIGHT_PRECISION,
@@ -5,12 +10,10 @@ import {
5
10
  ZERO,
6
11
  BID_ASK_SPREAD_PRECISION,
7
12
  AMM_RESERVE_PRECISION,
8
- MAX_PREDICTION_PRICE,
9
13
  BASE_PRECISION,
10
14
  MARGIN_PRECISION,
11
15
  PRICE_PRECISION,
12
16
  QUOTE_PRECISION,
13
- PERCENTAGE_PRECISION,
14
17
  } from '../constants/numericConstants';
15
18
  import { BN } from '@coral-xyz/anchor';
16
19
  import { OraclePriceData } from '../oracles/types';
@@ -168,15 +171,13 @@ export function calculateWorstCasePerpLiabilityValue(
168
171
  oraclePrice: BN,
169
172
  includeOpenOrders: boolean = true
170
173
  ): { worstCaseBaseAssetAmount: BN; worstCaseLiabilityValue: BN } {
171
- const isPredictionMarket = isVariant(perpMarket.contractType, 'prediction');
172
174
  // return early if no open orders required
173
175
  if (!includeOpenOrders) {
174
176
  return {
175
177
  worstCaseBaseAssetAmount: perpPosition.baseAssetAmount,
176
178
  worstCaseLiabilityValue: calculatePerpLiabilityValue(
177
179
  perpPosition.baseAssetAmount,
178
- oraclePrice,
179
- isPredictionMarket
180
+ oraclePrice
180
181
  ),
181
182
  };
182
183
  }
@@ -185,13 +186,11 @@ export function calculateWorstCasePerpLiabilityValue(
185
186
 
186
187
  const allBidsLiabilityValue = calculatePerpLiabilityValue(
187
188
  allBids,
188
- oraclePrice,
189
- isPredictionMarket
189
+ oraclePrice
190
190
  );
191
191
  const allAsksLiabilityValue = calculatePerpLiabilityValue(
192
192
  allAsks,
193
- oraclePrice,
194
- isPredictionMarket
193
+ oraclePrice
195
194
  );
196
195
 
197
196
  if (allAsksLiabilityValue.gte(allBidsLiabilityValue)) {
@@ -209,21 +208,9 @@ export function calculateWorstCasePerpLiabilityValue(
209
208
 
210
209
  export function calculatePerpLiabilityValue(
211
210
  baseAssetAmount: BN,
212
- price: BN,
213
- isPredictionMarket: boolean
211
+ price: BN
214
212
  ): BN {
215
- if (isPredictionMarket) {
216
- if (baseAssetAmount.gt(ZERO)) {
217
- return baseAssetAmount.mul(price).div(BASE_PRECISION);
218
- } else {
219
- return baseAssetAmount
220
- .abs()
221
- .mul(MAX_PREDICTION_PRICE.sub(price))
222
- .div(BASE_PRECISION);
223
- }
224
- } else {
225
- return baseAssetAmount.abs().mul(price).div(BASE_PRECISION);
226
- }
213
+ return baseAssetAmount.abs().mul(price).div(BASE_PRECISION);
227
214
  }
228
215
 
229
216
  /**
@@ -237,7 +224,6 @@ export function calculateMarginUSDCRequiredForTrade(
237
224
  targetMarketIndex: number,
238
225
  baseSize: BN,
239
226
  userMaxMarginRatio?: number,
240
- userHighLeverageMode?: boolean,
241
227
  entryPrice?: BN
242
228
  ): BN {
243
229
  const targetMarket = driftClient.getPerpMarketAccount(targetMarketIndex);
@@ -246,19 +232,14 @@ export function calculateMarginUSDCRequiredForTrade(
246
232
  entryPrice ??
247
233
  driftClient.getOracleDataForPerpMarket(targetMarket.marketIndex).price;
248
234
 
249
- const perpLiabilityValue = calculatePerpLiabilityValue(
250
- baseSize,
251
- price,
252
- isVariant(targetMarket.contractType, 'prediction')
253
- );
235
+ const perpLiabilityValue = calculatePerpLiabilityValue(baseSize, price);
254
236
 
255
237
  const marginRequired = new BN(
256
238
  calculateMarketMarginRatio(
257
239
  targetMarket,
258
240
  baseSize.abs(),
259
241
  'Initial',
260
- userMaxMarginRatio,
261
- userHighLeverageMode
242
+ userMaxMarginRatio
262
243
  )
263
244
  )
264
245
  .mul(perpLiabilityValue)
@@ -278,7 +259,6 @@ export function calculateCollateralDepositRequiredForTrade(
278
259
  baseSize: BN,
279
260
  collateralIndex: number,
280
261
  userMaxMarginRatio?: number,
281
- userHighLeverageMode?: boolean,
282
262
  estEntryPrice?: BN
283
263
  ): BN {
284
264
  const marginRequiredUsdc = calculateMarginUSDCRequiredForTrade(
@@ -286,7 +266,6 @@ export function calculateCollateralDepositRequiredForTrade(
286
266
  targetMarketIndex,
287
267
  baseSize,
288
268
  userMaxMarginRatio,
289
- userHighLeverageMode,
290
269
  estEntryPrice
291
270
  );
292
271
 
@@ -387,37 +366,3 @@ export function calculateUserMaxPerpOrderSize(
387
366
 
388
367
  return user.getMaxTradeSizeUSDCForPerp(targetMarketIndex, tradeSide);
389
368
  }
390
-
391
- export function calcHighLeverageModeInitialMarginRatioFromSize(
392
- preSizeAdjMarginRatio: BN,
393
- sizeAdjMarginRatio: BN,
394
- defaultMarginRatio: BN
395
- ): BN {
396
- let result: BN;
397
-
398
- if (sizeAdjMarginRatio.lt(preSizeAdjMarginRatio)) {
399
- const sizePctDiscountFactor = PERCENTAGE_PRECISION.sub(
400
- preSizeAdjMarginRatio
401
- .sub(sizeAdjMarginRatio)
402
- .mul(PERCENTAGE_PRECISION)
403
- .div(preSizeAdjMarginRatio.div(new BN(5)))
404
- );
405
-
406
- const hlmMarginDelta = BN.max(
407
- preSizeAdjMarginRatio.sub(defaultMarginRatio),
408
- new BN(1)
409
- );
410
-
411
- const hlmMarginDeltaProportion = hlmMarginDelta
412
- .mul(sizePctDiscountFactor)
413
- .div(PERCENTAGE_PRECISION);
414
-
415
- result = hlmMarginDeltaProportion.add(defaultMarginRatio);
416
- } else if (sizeAdjMarginRatio.eq(preSizeAdjMarginRatio)) {
417
- result = defaultMarginRatio;
418
- } else {
419
- result = sizeAdjMarginRatio;
420
- }
421
-
422
- return result;
423
- }
@@ -19,7 +19,6 @@ import {
19
19
  import {
20
20
  calculateSizeDiscountAssetWeight,
21
21
  calculateSizePremiumLiabilityWeight,
22
- calcHighLeverageModeInitialMarginRatioFromSize,
23
22
  } from './margin';
24
23
  import { MMOraclePriceData, OraclePriceData } from '../oracles/types';
25
24
  import {
@@ -70,7 +69,6 @@ export function calculateBidPrice(
70
69
  market.amm,
71
70
  PositionDirection.SHORT,
72
71
  mmOraclePriceData,
73
- undefined,
74
72
  latestSlot
75
73
  );
76
74
 
@@ -93,7 +91,6 @@ export function calculateAskPrice(
93
91
  market.amm,
94
92
  PositionDirection.LONG,
95
93
  mmOraclePriceData,
96
- undefined,
97
94
  latestSlot
98
95
  );
99
96
 
@@ -141,31 +138,17 @@ export function calculateMarketMarginRatio(
141
138
  market: PerpMarketAccount,
142
139
  size: BN,
143
140
  marginCategory: MarginCategory,
144
- customMarginRatio = 0,
145
- userHighLeverageMode = false
141
+ customMarginRatio = 0
146
142
  ): number {
147
143
  if (market.status === 'Settlement') return 0;
148
144
 
149
- const isHighLeverageUser =
150
- userHighLeverageMode &&
151
- market.highLeverageMarginRatioInitial > 0 &&
152
- market.highLeverageMarginRatioMaintenance > 0;
153
-
154
- const marginRatioInitial = isHighLeverageUser
155
- ? market.highLeverageMarginRatioInitial
156
- : market.marginRatioInitial;
157
-
158
- const marginRatioMaintenance = isHighLeverageUser
159
- ? market.highLeverageMarginRatioMaintenance
160
- : market.marginRatioMaintenance;
161
-
162
145
  let defaultMarginRatio: number;
163
146
  switch (marginCategory) {
164
147
  case 'Initial':
165
- defaultMarginRatio = marginRatioInitial;
148
+ defaultMarginRatio = market.marginRatioInitial;
166
149
  break;
167
150
  case 'Maintenance':
168
- defaultMarginRatio = marginRatioMaintenance;
151
+ defaultMarginRatio = market.marginRatioMaintenance;
169
152
  break;
170
153
  default:
171
154
  throw new Error('Invalid margin category');
@@ -173,42 +156,15 @@ export function calculateMarketMarginRatio(
173
156
 
174
157
  let marginRatio: number;
175
158
 
176
- if (isHighLeverageUser && marginCategory !== 'Maintenance') {
177
- // Use ordinary-mode initial/fill ratios for size-adjusted calc
178
- let preSizeAdjMarginRatio: number;
179
- switch (marginCategory) {
180
- case 'Initial':
181
- preSizeAdjMarginRatio = market.marginRatioInitial;
182
- break;
183
- default:
184
- preSizeAdjMarginRatio = marginRatioMaintenance;
185
- break;
186
- }
187
-
188
- const sizeAdjMarginRatio = calculateSizePremiumLiabilityWeight(
189
- size,
190
- new BN(market.imfFactor),
191
- new BN(preSizeAdjMarginRatio),
192
- MARGIN_PRECISION,
193
- false
194
- ).toNumber();
195
-
196
- marginRatio = calcHighLeverageModeInitialMarginRatioFromSize(
197
- new BN(preSizeAdjMarginRatio),
198
- new BN(sizeAdjMarginRatio),
199
- new BN(defaultMarginRatio)
200
- ).toNumber();
201
- } else {
202
- const sizeAdjMarginRatio = calculateSizePremiumLiabilityWeight(
203
- size,
204
- new BN(market.imfFactor),
205
- new BN(defaultMarginRatio),
206
- MARGIN_PRECISION,
207
- true
208
- ).toNumber();
209
-
210
- marginRatio = Math.max(defaultMarginRatio, sizeAdjMarginRatio);
211
- }
159
+ const sizeAdjMarginRatio = calculateSizePremiumLiabilityWeight(
160
+ size,
161
+ new BN(market.imfFactor),
162
+ new BN(defaultMarginRatio),
163
+ MARGIN_PRECISION,
164
+ true
165
+ ).toNumber();
166
+
167
+ marginRatio = Math.max(defaultMarginRatio, sizeAdjMarginRatio);
212
168
 
213
169
  if (marginCategory === 'Initial') {
214
170
  marginRatio = Math.max(marginRatio, customMarginRatio);
@@ -376,19 +332,9 @@ export function calculateAvailablePerpLiquidity(
376
332
  }
377
333
 
378
334
  export function calculatePerpMarketBaseLiquidatorFee(
379
- market: PerpMarketAccount,
380
- userHighLeverageMode: boolean
335
+ market: PerpMarketAccount
381
336
  ): number {
382
- if (userHighLeverageMode && market.highLeverageMarginRatioMaintenance > 0) {
383
- const marginRatio = market.highLeverageMarginRatioMaintenance * 100;
384
- // min(liquidator_fee, .8 * high_leverage_margin_ratio_maintenance)
385
- return Math.min(
386
- market.liquidatorFee,
387
- marginRatio - Math.floor(marginRatio / 5)
388
- );
389
- } else {
390
- return market.liquidatorFee;
391
- }
337
+ return market.liquidatorFee;
392
338
  }
393
339
 
394
340
  /**
@@ -449,7 +395,7 @@ function getLastFundingBasis(
449
395
  .div(market.amm.lastFundingOracleTwap)
450
396
  .muln(24);
451
397
  const lastFundingRatePreAdj = lastFundingRate.sub(
452
- FUNDING_RATE_PRECISION.div(new BN(5000)) // FUNDING_RATE_OFFSET_PERCENTAGE
398
+ FUNDING_RATE_PRECISION.div(new BN(3333)) // FUNDING_RATE_OFFSET_PERCENTAGE
453
399
  );
454
400
  const timeLeftUntilFundingUpdate = BN.min(
455
401
  BN.max(now.sub(market.amm.lastFundingRateTs), ZERO),
@@ -109,12 +109,7 @@ export function getOracleValidity(
109
109
  let isStaleForMargin = oracleDelay.gt(
110
110
  new BN(oracleGuardRails.validity.slotsBeforeStaleForMargin)
111
111
  );
112
- if (
113
- isOneOfVariant(market.amm.oracleSource, [
114
- 'pythStableCoinPull',
115
- 'pythLazerStableCoin',
116
- ])
117
- ) {
112
+ if (isVariant(market.amm.oracleSource, 'pythLazerStableCoin')) {
118
113
  isStaleForMargin = oracleDelay.gt(
119
114
  new BN(oracleGuardRails.validity.slotsBeforeStaleForMargin).muln(3)
120
115
  );
@@ -324,31 +319,20 @@ export function getMultipleBetweenOracleSources(
324
319
  secondOracleSource: OracleSource
325
320
  ): { numerator: BN; denominator: BN } {
326
321
  if (
327
- isVariant(firstOracleSource, 'pythPull') &&
328
- isVariant(secondOracleSource, 'pyth1MPull')
329
- ) {
330
- return { numerator: new BN(1000000), denominator: new BN(1) };
331
- }
332
-
333
- if (
334
- isVariant(firstOracleSource, 'pythPull') &&
335
- isVariant(secondOracleSource, 'pyth1KPull')
336
- ) {
337
- return { numerator: new BN(1000), denominator: new BN(1) };
338
- }
339
-
340
- if (
341
- isVariant(firstOracleSource, 'pyth1MPull') &&
342
- isVariant(secondOracleSource, 'pythPull')
343
- ) {
344
- return { numerator: new BN(1), denominator: new BN(1000000) };
345
- }
346
-
347
- if (
348
- isVariant(firstOracleSource, 'pyth1KPull') &&
349
- isVariant(secondOracleSource, 'pythPull')
322
+ isOneOfVariant(firstOracleSource, [
323
+ 'pythPull',
324
+ 'pyth1KPull',
325
+ 'pyth1MPull',
326
+ 'pythStableCoinPull',
327
+ ]) ||
328
+ isOneOfVariant(secondOracleSource, [
329
+ 'pythPull',
330
+ 'pyth1KPull',
331
+ 'pyth1MPull',
332
+ 'pythStableCoinPull',
333
+ ])
350
334
  ) {
351
- return { numerator: new BN(1), denominator: new BN(1000) };
335
+ throw new Error('Pyth pull oracle support has been removed from the SDK');
352
336
  }
353
337
 
354
338
  if (
@@ -55,7 +55,6 @@ export function calculateBaseAssetValue(
55
55
  market.amm,
56
56
  directionToClose,
57
57
  mmOraclePriceData,
58
- undefined,
59
58
  latestSlot
60
59
  );
61
60
  prepegAmm = {
package/src/math/trade.ts CHANGED
@@ -117,7 +117,6 @@ export function calculateTradeSlippage(
117
117
  market.amm,
118
118
  direction,
119
119
  mmOraclePriceData,
120
- undefined,
121
120
  latestSlot
122
121
  );
123
122
  amm = {
@@ -189,7 +188,6 @@ export function calculateTradeAcquiredAmounts(
189
188
  market.amm,
190
189
  direction,
191
190
  mmOraclePriceData,
192
- undefined,
193
191
  latestSlot
194
192
  );
195
193
  amm = {
@@ -280,7 +278,6 @@ export function calculateTargetPriceTrade(
280
278
  market.amm,
281
279
  direction,
282
280
  mmOraclePriceData,
283
- undefined,
284
281
  latestSlot
285
282
  );
286
283
  baseAssetReserveBefore = baseAssetReserve;
@@ -443,7 +440,6 @@ export function calculateEstimatedPerpEntryPrice(
443
440
  market.amm,
444
441
  direction,
445
442
  mmOraclePriceData,
446
- undefined,
447
443
  new BN(slot)
448
444
  );
449
445
  const amm = {
package/src/memcmp.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { MemcmpFilter, PublicKey } from '@solana/web3.js';
2
2
  import bs58 from 'bs58';
3
- import { BorshAccountsCoder } from '@coral-xyz/anchor';
3
+ import { BorshAccountsCoder } from '@coral-xyz/anchor-29';
4
4
  import { encodeName } from './userName';
5
5
 
6
6
  export function getUserFilter(): MemcmpFilter {
@@ -1,7 +1,7 @@
1
1
  import { Connection, Keypair, PublicKey } from '@solana/web3.js';
2
2
  import { BulkAccountLoader } from '../accounts/bulkAccountLoader';
3
3
  import { PRICE_PRECISION } from '../constants/numericConstants';
4
- import { AnchorProvider, BN, Idl, Program, Wallet } from '@coral-xyz/anchor';
4
+ import { AnchorProvider, BN, Idl, Program, Wallet } from '@coral-xyz/anchor-29';
5
5
  import { L2Level, L2OrderBookGenerator } from '../dlob/orderBookLevels';
6
6
  import { Market, OpenBookV2Client } from '@openbook-dex/openbook-v2';
7
7
  import openbookV2Idl from '../idl/openbook.json';
@@ -2,7 +2,7 @@ import { OracleClient } from './types';
2
2
  import { OracleSource } from '../types';
3
3
  import { getOracleClient } from '../factory/oracleClient';
4
4
  import { Connection } from '@solana/web3.js';
5
- import { Program } from '@coral-xyz/anchor';
5
+ import { DriftProgram } from '../config';
6
6
 
7
7
  export class OracleClientCache {
8
8
  cache = new Map<string, OracleClient>();
@@ -11,7 +11,7 @@ export class OracleClientCache {
11
11
  public get(
12
12
  oracleSource: OracleSource,
13
13
  connection: Connection,
14
- program: Program
14
+ program: DriftProgram
15
15
  ) {
16
16
  const key = Object.keys(oracleSource)[0];
17
17
  if (this.cache.has(key)) {
@@ -1,13 +1,13 @@
1
1
  import { Connection, PublicKey } from '@solana/web3.js';
2
2
  import { OracleClient, OraclePriceData } from './types';
3
- import { Program } from '@coral-xyz/anchor';
3
+ import { DriftProgram } from '../config';
4
4
  import { PrelaunchOracle } from '../types';
5
5
 
6
6
  export class PrelaunchOracleClient implements OracleClient {
7
7
  private connection: Connection;
8
- private program: Program;
8
+ private program: DriftProgram;
9
9
 
10
- public constructor(connection: Connection, program: Program) {
10
+ public constructor(connection: Connection, program: DriftProgram) {
11
11
  this.connection = connection;
12
12
  this.program = program;
13
13
  }
@@ -20,11 +20,12 @@ export class PrelaunchOracleClient implements OracleClient {
20
20
  }
21
21
 
22
22
  public getOraclePriceDataFromBuffer(buffer: Buffer): OraclePriceData {
23
- const prelaunchOracle =
24
- this.program.account.prelaunchOracle.coder.accounts.decodeUnchecked(
25
- 'PrelaunchOracle',
26
- buffer
27
- ) as PrelaunchOracle;
23
+ const prelaunchOracle = (
24
+ this.program.account as any
25
+ ).prelaunchOracle.coder.accounts.decodeUnchecked(
26
+ 'prelaunchOracle',
27
+ buffer
28
+ ) as PrelaunchOracle;
28
29
 
29
30
  return {
30
31
  price: prelaunchOracle.price,
@@ -1,13 +1,14 @@
1
1
  import { Connection, Keypair, PublicKey } from '@solana/web3.js';
2
2
  import { OracleClient, OraclePriceData } from './types';
3
- import { AnchorProvider, BN, Idl, Program } from '@coral-xyz/anchor';
3
+ import { AnchorProvider, BN, Program } from '@coral-xyz/anchor';
4
+ import { Drift } from '../idl/drift';
5
+ import { DriftProgram } from '../config';
4
6
  import {
5
7
  ONE,
6
8
  PRICE_PRECISION,
7
9
  QUOTE_PRECISION,
8
10
  TEN,
9
11
  } from '../constants/numericConstants';
10
- import { DRIFT_PROGRAM_ID } from '../config';
11
12
  import { Wallet } from '../wallet';
12
13
  import driftIDL from '../idl/drift.json';
13
14
 
@@ -15,7 +16,7 @@ export class PythLazerClient implements OracleClient {
15
16
  private connection: Connection;
16
17
  private multiple: BN;
17
18
  private stableCoin: boolean;
18
- private program: Program;
19
+ private program: DriftProgram;
19
20
  readonly decodeFunc: (name: string, data: Buffer) => any;
20
21
 
21
22
  public constructor(
@@ -34,15 +35,12 @@ export class PythLazerClient implements OracleClient {
34
35
  commitment: connection.commitment,
35
36
  }
36
37
  );
37
- this.program = new Program(
38
- driftIDL as Idl,
39
- new PublicKey(DRIFT_PROGRAM_ID),
40
- provider
38
+ this.program = new Program<Drift>(driftIDL as Drift, provider);
39
+ this.decodeFunc = (
40
+ this.program.account as any
41
+ ).pythLazerOracle.coder.accounts.decodeUnchecked.bind(
42
+ (this.program.account as any).pythLazerOracle.coder.accounts
41
43
  );
42
- this.decodeFunc =
43
- this.program.account.pythLazerOracle.coder.accounts.decodeUnchecked.bind(
44
- this.program.account.pythLazerOracle.coder.accounts
45
- );
46
44
  }
47
45
 
48
46
  public async getOraclePriceData(
@@ -53,7 +51,7 @@ export class PythLazerClient implements OracleClient {
53
51
  }
54
52
 
55
53
  public getOraclePriceDataFromBuffer(buffer: Buffer): OraclePriceData {
56
- const priceData = this.decodeFunc('PythLazerOracle', buffer);
54
+ const priceData = this.decodeFunc('pythLazerOracle', buffer);
57
55
  const confidence = convertPythPrice(
58
56
  priceData.conf,
59
57
  priceData.exponent,
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Oracle types and the OraclePriceData interface used throughout the SDK.
3
+ * Each oracle source (Pyth, Switchboard, Pyth Lazer, Prelaunch) has a client adapter
4
+ * in this directory that fetches and normalises prices into OraclePriceData.
5
+ * Oracle client selection is configured via DriftClientConfig and cached in OracleClientCache.
6
+ */
1
7
  import { BN } from '@coral-xyz/anchor';
2
8
  import { PublicKey } from '@solana/web3.js';
3
9
  import { OracleSource } from '../types';
@@ -2,7 +2,6 @@ import {
2
2
  DefaultOrderParams,
3
3
  OptionalOrderParams,
4
4
  OrderParams,
5
- OrderParamsBitFlag,
6
5
  OrderTriggerCondition,
7
6
  OrderType,
8
7
  } from './types';
@@ -78,7 +77,3 @@ export function getOrderParams(
78
77
  overridingParams
79
78
  );
80
79
  }
81
-
82
- export function isUpdateHighLeverageMode(bitFlags: number): boolean {
83
- return (bitFlags & OrderParamsBitFlag.UpdateHighLeverageMode) !== 0;
84
- }