@velocity-exchange/sdk 0.0.3 → 0.1.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 (393) hide show
  1. package/.prettierignore +1 -1
  2. package/CHANGELOG.md +35 -0
  3. package/README.md +30 -30
  4. package/bun.lock +1 -1
  5. package/lib/browser/accounts/grpcProgramAccountSubscriber.js +1 -1
  6. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
  7. package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +1 -3
  8. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +0 -4
  9. package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +5 -7
  10. package/lib/browser/accounts/laserProgramAccountSubscriber.js +1 -1
  11. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +0 -4
  12. package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +5 -7
  13. package/lib/browser/accounts/types.d.ts +2 -8
  14. package/lib/browser/accounts/utils.js +2 -2
  15. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +0 -4
  16. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +5 -7
  17. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +0 -4
  18. package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +5 -7
  19. package/lib/browser/addresses/pda.d.ts +1 -7
  20. package/lib/browser/addresses/pda.js +4 -10
  21. package/lib/browser/adminClient.d.ts +1 -1
  22. package/lib/browser/adminClient.js +21 -21
  23. package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +1 -3
  24. package/lib/browser/auctionSubscriber/auctionSubscriber.js +2 -6
  25. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -3
  26. package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +2 -6
  27. package/lib/browser/auctionSubscriber/types.d.ts +3 -2
  28. package/lib/browser/config.d.ts +10 -19
  29. package/lib/browser/config.js +6 -33
  30. package/lib/browser/constants/insuranceFund.d.ts +1 -1
  31. package/lib/browser/constants/insuranceFund.js +1 -1
  32. package/lib/browser/constituentMap/constituentMap.d.ts +0 -2
  33. package/lib/browser/constituentMap/constituentMap.js +5 -5
  34. package/lib/browser/core/VelocityCore.d.ts +9 -15
  35. package/lib/browser/core/VelocityCore.js +5 -7
  36. package/lib/browser/core/instructions/withdraw.d.ts +1 -1
  37. package/lib/browser/core/instructions/withdraw.js +1 -1
  38. package/lib/browser/core/remainingAccounts.js +3 -3
  39. package/lib/browser/decode/user.js +5 -5
  40. package/lib/browser/dlob/DLOB.d.ts +1 -1
  41. package/lib/browser/dlob/DLOB.js +7 -7
  42. package/lib/browser/dlob/DLOBNode.js +1 -2
  43. package/lib/browser/dlob/DLOBSubscriber.d.ts +0 -2
  44. package/lib/browser/dlob/DLOBSubscriber.js +2 -7
  45. package/lib/browser/dlob/orderBookLevels.js +7 -7
  46. package/lib/browser/dlob/types.d.ts +0 -2
  47. package/lib/browser/events/eventSubscriber.d.ts +1 -1
  48. package/lib/browser/events/eventsServerLogProvider.js +2 -2
  49. package/lib/browser/events/parse.js +14 -14
  50. package/lib/browser/events/types.d.ts +3 -5
  51. package/lib/browser/events/types.js +1 -1
  52. package/lib/browser/idl/{drift.d.ts → velocity.d.ts} +1043 -768
  53. package/lib/browser/idl/{drift.json → velocity.json} +1034 -759
  54. package/lib/browser/index.d.ts +1 -1
  55. package/lib/browser/index.js +1 -2
  56. package/lib/browser/math/amm.d.ts +10 -10
  57. package/lib/browser/math/amm.js +29 -28
  58. package/lib/browser/math/auction.d.ts +1 -1
  59. package/lib/browser/math/auction.js +18 -21
  60. package/lib/browser/math/builder.d.ts +18 -1
  61. package/lib/browser/math/builder.js +32 -1
  62. package/lib/browser/math/funding.js +26 -26
  63. package/lib/browser/math/margin.d.ts +4 -4
  64. package/lib/browser/math/margin.js +15 -15
  65. package/lib/browser/math/market.js +13 -13
  66. package/lib/browser/math/oracles.d.ts +4 -4
  67. package/lib/browser/math/oracles.js +23 -23
  68. package/lib/browser/math/orders.d.ts +2 -2
  69. package/lib/browser/math/orders.js +12 -12
  70. package/lib/browser/math/position.js +4 -4
  71. package/lib/browser/math/superStake.d.ts +8 -10
  72. package/lib/browser/math/superStake.js +18 -20
  73. package/lib/browser/math/trade.js +5 -5
  74. package/lib/browser/math/utils.d.ts +1 -1
  75. package/lib/browser/math/utils.js +1 -1
  76. package/lib/browser/oracles/pythLazerClient.js +2 -2
  77. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +0 -2
  78. package/lib/browser/orderSubscriber/OrderSubscriber.js +8 -12
  79. package/lib/browser/orderSubscriber/WebsocketSubscription.js +1 -1
  80. package/lib/browser/orderSubscriber/grpcSubscription.js +2 -2
  81. package/lib/browser/orderSubscriber/types.d.ts +0 -2
  82. package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +1 -5
  83. package/lib/browser/priorityFee/priorityFeeSubscriber.js +7 -15
  84. package/lib/browser/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
  85. package/lib/browser/priorityFee/priorityFeeSubscriberMap.js +3 -11
  86. package/lib/browser/priorityFee/types.d.ts +3 -8
  87. package/lib/browser/priorityFee/velocityPriorityFeeMethod.d.ts +0 -8
  88. package/lib/browser/priorityFee/velocityPriorityFeeMethod.js +1 -3
  89. package/lib/browser/pyth/pythLazerSubscriber.d.ts +1 -1
  90. package/lib/browser/pyth/pythLazerSubscriber.js +1 -1
  91. package/lib/browser/swap/UnifiedSwapClient.js +1 -1
  92. package/lib/browser/swift/signedMsgUserAccountSubscriber.d.ts +4 -5
  93. package/lib/browser/swift/signedMsgUserAccountSubscriber.js +2 -6
  94. package/lib/browser/swift/swiftOrderSubscriber.d.ts +6 -5
  95. package/lib/browser/swift/swiftOrderSubscriber.js +5 -11
  96. package/lib/browser/types.d.ts +81 -93
  97. package/lib/browser/types.js +4 -0
  98. package/lib/browser/user.d.ts +1 -3
  99. package/lib/browser/user.js +19 -23
  100. package/lib/browser/userConfig.d.ts +3 -2
  101. package/lib/browser/userMap/WebsocketSubscription.js +1 -1
  102. package/lib/browser/userMap/grpcSubscription.js +1 -1
  103. package/lib/browser/userMap/referrerMap.d.ts +0 -2
  104. package/lib/browser/userMap/referrerMap.js +0 -4
  105. package/lib/browser/userMap/revenueShareEscrowMap.d.ts +0 -2
  106. package/lib/browser/userMap/revenueShareEscrowMap.js +0 -4
  107. package/lib/browser/userMap/userMap.d.ts +2 -4
  108. package/lib/browser/userMap/userMap.js +10 -14
  109. package/lib/browser/userMap/userMapConfig.d.ts +3 -2
  110. package/lib/browser/userMap/userStatsMap.d.ts +0 -2
  111. package/lib/browser/userMap/userStatsMap.js +0 -4
  112. package/lib/browser/userStats.d.ts +0 -2
  113. package/lib/browser/userStats.js +10 -14
  114. package/lib/browser/userStatsConfig.d.ts +3 -2
  115. package/lib/browser/util/ed25519Utils.d.ts +1 -1
  116. package/lib/browser/util/ed25519Utils.js +1 -1
  117. package/lib/browser/velocityClient.d.ts +59 -44
  118. package/lib/browser/velocityClient.js +259 -197
  119. package/lib/browser/velocityClientConfig.d.ts +0 -8
  120. package/lib/node/accounts/grpcProgramAccountSubscriber.js +1 -1
  121. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
  122. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
  123. package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +1 -3
  124. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +0 -4
  125. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  126. package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +5 -7
  127. package/lib/node/accounts/laserProgramAccountSubscriber.js +1 -1
  128. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +0 -4
  129. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
  130. package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +5 -7
  131. package/lib/node/accounts/types.d.ts +2 -8
  132. package/lib/node/accounts/types.d.ts.map +1 -1
  133. package/lib/node/accounts/utils.js +2 -2
  134. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +0 -4
  135. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
  136. package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +5 -7
  137. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +0 -4
  138. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
  139. package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +5 -7
  140. package/lib/node/addresses/pda.d.ts +1 -7
  141. package/lib/node/addresses/pda.d.ts.map +1 -1
  142. package/lib/node/addresses/pda.js +4 -10
  143. package/lib/node/adminClient.d.ts +1 -1
  144. package/lib/node/adminClient.js +21 -21
  145. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +1 -3
  146. package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
  147. package/lib/node/auctionSubscriber/auctionSubscriber.js +2 -6
  148. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -3
  149. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
  150. package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +2 -6
  151. package/lib/node/auctionSubscriber/types.d.ts +3 -2
  152. package/lib/node/auctionSubscriber/types.d.ts.map +1 -1
  153. package/lib/node/config.d.ts +10 -19
  154. package/lib/node/config.d.ts.map +1 -1
  155. package/lib/node/config.js +6 -33
  156. package/lib/node/constants/insuranceFund.d.ts +1 -1
  157. package/lib/node/constants/insuranceFund.js +1 -1
  158. package/lib/node/constituentMap/constituentMap.d.ts +0 -2
  159. package/lib/node/constituentMap/constituentMap.d.ts.map +1 -1
  160. package/lib/node/constituentMap/constituentMap.js +5 -5
  161. package/lib/node/core/VelocityCore.d.ts +9 -15
  162. package/lib/node/core/VelocityCore.d.ts.map +1 -1
  163. package/lib/node/core/VelocityCore.js +5 -7
  164. package/lib/node/core/instructions/withdraw.d.ts +1 -1
  165. package/lib/node/core/instructions/withdraw.d.ts.map +1 -1
  166. package/lib/node/core/instructions/withdraw.js +1 -1
  167. package/lib/node/core/remainingAccounts.js +3 -3
  168. package/lib/node/decode/user.js +5 -5
  169. package/lib/node/dlob/DLOB.d.ts +1 -1
  170. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  171. package/lib/node/dlob/DLOB.js +7 -7
  172. package/lib/node/dlob/DLOBNode.js +1 -2
  173. package/lib/node/dlob/DLOBSubscriber.d.ts +0 -2
  174. package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
  175. package/lib/node/dlob/DLOBSubscriber.js +2 -7
  176. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  177. package/lib/node/dlob/orderBookLevels.js +7 -7
  178. package/lib/node/dlob/types.d.ts +0 -2
  179. package/lib/node/dlob/types.d.ts.map +1 -1
  180. package/lib/node/events/eventSubscriber.d.ts +1 -1
  181. package/lib/node/events/eventsServerLogProvider.js +2 -2
  182. package/lib/node/events/parse.d.ts.map +1 -1
  183. package/lib/node/events/parse.js +14 -14
  184. package/lib/node/events/types.d.ts +3 -5
  185. package/lib/node/events/types.d.ts.map +1 -1
  186. package/lib/node/events/types.js +1 -1
  187. package/lib/node/idl/{drift.d.ts → velocity.d.ts} +1044 -769
  188. package/lib/node/idl/velocity.d.ts.map +1 -0
  189. package/lib/node/idl/{drift.json → velocity.json} +1034 -759
  190. package/lib/node/index.d.ts +1 -1
  191. package/lib/node/index.d.ts.map +1 -1
  192. package/lib/node/index.js +1 -2
  193. package/lib/node/math/amm.d.ts +10 -10
  194. package/lib/node/math/amm.d.ts.map +1 -1
  195. package/lib/node/math/amm.js +29 -28
  196. package/lib/node/math/auction.d.ts +1 -1
  197. package/lib/node/math/auction.d.ts.map +1 -1
  198. package/lib/node/math/auction.js +18 -21
  199. package/lib/node/math/builder.d.ts +18 -1
  200. package/lib/node/math/builder.d.ts.map +1 -1
  201. package/lib/node/math/builder.js +32 -1
  202. package/lib/node/math/funding.d.ts.map +1 -1
  203. package/lib/node/math/funding.js +26 -26
  204. package/lib/node/math/margin.d.ts +4 -4
  205. package/lib/node/math/margin.d.ts.map +1 -1
  206. package/lib/node/math/margin.js +15 -15
  207. package/lib/node/math/market.d.ts.map +1 -1
  208. package/lib/node/math/market.js +13 -13
  209. package/lib/node/math/oracles.d.ts +4 -4
  210. package/lib/node/math/oracles.d.ts.map +1 -1
  211. package/lib/node/math/oracles.js +23 -23
  212. package/lib/node/math/orders.d.ts +2 -2
  213. package/lib/node/math/orders.d.ts.map +1 -1
  214. package/lib/node/math/orders.js +12 -12
  215. package/lib/node/math/position.d.ts.map +1 -1
  216. package/lib/node/math/position.js +4 -4
  217. package/lib/node/math/superStake.d.ts +8 -10
  218. package/lib/node/math/superStake.d.ts.map +1 -1
  219. package/lib/node/math/superStake.js +18 -20
  220. package/lib/node/math/trade.d.ts.map +1 -1
  221. package/lib/node/math/trade.js +5 -5
  222. package/lib/node/math/utils.d.ts +1 -1
  223. package/lib/node/math/utils.js +1 -1
  224. package/lib/node/oracles/pythLazerClient.js +2 -2
  225. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +0 -2
  226. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  227. package/lib/node/orderSubscriber/OrderSubscriber.js +8 -12
  228. package/lib/node/orderSubscriber/WebsocketSubscription.js +1 -1
  229. package/lib/node/orderSubscriber/grpcSubscription.js +2 -2
  230. package/lib/node/orderSubscriber/types.d.ts +0 -2
  231. package/lib/node/orderSubscriber/types.d.ts.map +1 -1
  232. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +1 -5
  233. package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
  234. package/lib/node/priorityFee/priorityFeeSubscriber.js +7 -15
  235. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
  236. package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts.map +1 -1
  237. package/lib/node/priorityFee/priorityFeeSubscriberMap.js +3 -11
  238. package/lib/node/priorityFee/types.d.ts +3 -8
  239. package/lib/node/priorityFee/types.d.ts.map +1 -1
  240. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts +0 -8
  241. package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts.map +1 -1
  242. package/lib/node/priorityFee/velocityPriorityFeeMethod.js +1 -3
  243. package/lib/node/pyth/pythLazerSubscriber.d.ts +1 -1
  244. package/lib/node/pyth/pythLazerSubscriber.js +1 -1
  245. package/lib/node/swap/UnifiedSwapClient.js +1 -1
  246. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts +4 -5
  247. package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
  248. package/lib/node/swift/signedMsgUserAccountSubscriber.js +2 -6
  249. package/lib/node/swift/swiftOrderSubscriber.d.ts +6 -5
  250. package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
  251. package/lib/node/swift/swiftOrderSubscriber.js +5 -11
  252. package/lib/node/types.d.ts +81 -93
  253. package/lib/node/types.d.ts.map +1 -1
  254. package/lib/node/types.js +4 -0
  255. package/lib/node/user.d.ts +1 -3
  256. package/lib/node/user.d.ts.map +1 -1
  257. package/lib/node/user.js +19 -23
  258. package/lib/node/userConfig.d.ts +3 -2
  259. package/lib/node/userConfig.d.ts.map +1 -1
  260. package/lib/node/userMap/WebsocketSubscription.js +1 -1
  261. package/lib/node/userMap/grpcSubscription.js +1 -1
  262. package/lib/node/userMap/referrerMap.d.ts +0 -2
  263. package/lib/node/userMap/referrerMap.d.ts.map +1 -1
  264. package/lib/node/userMap/referrerMap.js +0 -4
  265. package/lib/node/userMap/revenueShareEscrowMap.d.ts +0 -2
  266. package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
  267. package/lib/node/userMap/revenueShareEscrowMap.js +0 -4
  268. package/lib/node/userMap/userMap.d.ts +2 -4
  269. package/lib/node/userMap/userMap.d.ts.map +1 -1
  270. package/lib/node/userMap/userMap.js +10 -14
  271. package/lib/node/userMap/userMapConfig.d.ts +3 -2
  272. package/lib/node/userMap/userMapConfig.d.ts.map +1 -1
  273. package/lib/node/userMap/userStatsMap.d.ts +0 -2
  274. package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
  275. package/lib/node/userMap/userStatsMap.js +0 -4
  276. package/lib/node/userStats.d.ts +0 -2
  277. package/lib/node/userStats.d.ts.map +1 -1
  278. package/lib/node/userStats.js +10 -14
  279. package/lib/node/userStatsConfig.d.ts +3 -2
  280. package/lib/node/userStatsConfig.d.ts.map +1 -1
  281. package/lib/node/util/ed25519Utils.d.ts +1 -1
  282. package/lib/node/util/ed25519Utils.js +1 -1
  283. package/lib/node/velocityClient.d.ts +59 -44
  284. package/lib/node/velocityClient.d.ts.map +1 -1
  285. package/lib/node/velocityClient.js +259 -197
  286. package/lib/node/velocityClientConfig.d.ts +0 -8
  287. package/lib/node/velocityClientConfig.d.ts.map +1 -1
  288. package/package.json +6 -7
  289. package/scripts/deposit-isolated-positions.ts +2 -2
  290. package/scripts/find-flagged-users.ts +1 -1
  291. package/scripts/grpc-client-test-comparison.ts +4 -4
  292. package/scripts/grpc-multiuser-client-test-comparison.ts +2 -2
  293. package/scripts/single-grpc-client-test.ts +3 -3
  294. package/scripts/updateVersion.js +4 -4
  295. package/scripts/withdraw-isolated-positions.ts +2 -2
  296. package/src/accounts/grpcProgramAccountSubscriber.ts +1 -1
  297. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -7
  298. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +4 -11
  299. package/src/accounts/laserProgramAccountSubscriber.ts +1 -1
  300. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +4 -11
  301. package/src/accounts/types.ts +2 -9
  302. package/src/accounts/utils.ts +2 -2
  303. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +4 -11
  304. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +4 -11
  305. package/src/addresses/pda.ts +3 -13
  306. package/src/adminClient.ts +21 -21
  307. package/src/auctionSubscriber/auctionSubscriber.ts +1 -6
  308. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +1 -6
  309. package/src/auctionSubscriber/types.ts +3 -3
  310. package/src/config.ts +8 -64
  311. package/src/constants/insuranceFund.ts +1 -1
  312. package/src/constituentMap/constituentMap.ts +2 -6
  313. package/src/core/VelocityCore.ts +11 -20
  314. package/src/core/instructions/withdraw.ts +2 -2
  315. package/src/core/remainingAccounts.ts +3 -3
  316. package/src/decode/user.ts +5 -5
  317. package/src/dlob/DLOB.ts +7 -7
  318. package/src/dlob/DLOBNode.ts +1 -1
  319. package/src/dlob/DLOBSubscriber.ts +2 -8
  320. package/src/dlob/orderBookLevels.ts +12 -6
  321. package/src/dlob/types.ts +0 -2
  322. package/src/events/eventSubscriber.ts +1 -1
  323. package/src/events/eventsServerLogProvider.ts +2 -2
  324. package/src/events/parse.ts +14 -14
  325. package/src/events/types.ts +4 -7
  326. package/src/idl/{drift.json → velocity.json} +1034 -759
  327. package/src/idl/{drift.ts → velocity.ts} +1036 -761
  328. package/src/index.ts +1 -4
  329. package/src/margin/README.md +2 -2
  330. package/src/math/amm.ts +43 -21
  331. package/src/math/auction.ts +19 -22
  332. package/src/math/builder.ts +45 -1
  333. package/src/math/funding.ts +46 -43
  334. package/src/math/margin.ts +15 -15
  335. package/src/math/market.ts +21 -13
  336. package/src/math/oracles.ts +29 -26
  337. package/src/math/orders.ts +21 -11
  338. package/src/math/position.ts +9 -3
  339. package/src/math/superStake.ts +21 -24
  340. package/src/math/trade.ts +9 -1
  341. package/src/math/utils.ts +1 -1
  342. package/src/oracles/pythLazerClient.ts +3 -3
  343. package/src/orderSubscriber/OrderSubscriber.ts +2 -8
  344. package/src/orderSubscriber/WebsocketSubscription.ts +1 -1
  345. package/src/orderSubscriber/grpcSubscription.ts +2 -2
  346. package/src/orderSubscriber/types.ts +0 -2
  347. package/src/priorityFee/priorityFeeSubscriber.ts +5 -12
  348. package/src/priorityFee/priorityFeeSubscriberMap.ts +2 -10
  349. package/src/priorityFee/types.ts +4 -9
  350. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -12
  351. package/src/pyth/pythLazerSubscriber.ts +1 -1
  352. package/src/swap/UnifiedSwapClient.ts +1 -1
  353. package/src/swift/signedMsgUserAccountSubscriber.ts +2 -8
  354. package/src/swift/swiftOrderSubscriber.ts +7 -12
  355. package/src/types.ts +86 -104
  356. package/src/user.ts +9 -14
  357. package/src/userConfig.ts +1 -3
  358. package/src/userMap/WebsocketSubscription.ts +1 -1
  359. package/src/userMap/grpcSubscription.ts +1 -1
  360. package/src/userMap/referrerMap.ts +0 -4
  361. package/src/userMap/revenueShareEscrowMap.ts +0 -4
  362. package/src/userMap/userMap.ts +3 -7
  363. package/src/userMap/userMapConfig.ts +3 -3
  364. package/src/userMap/userStatsMap.ts +0 -4
  365. package/src/userStats.ts +1 -5
  366. package/src/userStatsConfig.ts +3 -3
  367. package/src/util/ed25519Utils.ts +1 -1
  368. package/src/velocityClient.ts +345 -231
  369. package/src/velocityClientConfig.ts +3 -11
  370. package/tests/{DriftCore → VelocityCore}/decode.test.ts +1 -1
  371. package/tests/{DriftCore → VelocityCore}/fill_trigger.test.ts +1 -1
  372. package/tests/{DriftCore → VelocityCore}/instructions.test.ts +1 -1
  373. package/tests/{DriftCore → VelocityCore}/pdas.test.ts +4 -2
  374. package/tests/auctions/test.ts +4 -4
  375. package/tests/ci/verifyConstants.ts +24 -27
  376. package/tests/decode/test.ts +3 -3
  377. package/tests/dlob/helpers.ts +5 -9
  378. package/tests/dlob/test.ts +5 -5
  379. package/tests/events/parseLogsForCuUsage.ts +15 -15
  380. package/tests/user/helpers.ts +10 -10
  381. package/tests/user/test.ts +13 -10
  382. package/lib/browser/util/deprecatedAlias.d.ts +0 -26
  383. package/lib/browser/util/deprecatedAlias.js +0 -10
  384. package/lib/node/idl/drift.d.ts.map +0 -1
  385. package/lib/node/util/deprecatedAlias.d.ts +0 -27
  386. package/lib/node/util/deprecatedAlias.d.ts.map +0 -1
  387. package/lib/node/util/deprecatedAlias.js +0 -10
  388. package/src/util/deprecatedAlias.ts +0 -25
  389. /package/lib/browser/idl/{drift.js → velocity.js} +0 -0
  390. /package/lib/node/idl/{drift.js → velocity.js} +0 -0
  391. /package/tests/{DriftCore → VelocityCore}/perp_orders.test.ts +0 -0
  392. /package/tests/{DriftCore → VelocityCore}/remainingAccounts.test.ts +0 -0
  393. /package/tests/{DriftCore → VelocityCore}/settlement_liquidation.test.ts +0 -0
package/src/index.ts CHANGED
@@ -26,10 +26,7 @@ export { WebSocketAccountSubscriberV2 } from './accounts/webSocketAccountSubscri
26
26
  export { WebSocketProgramAccountSubscriber } from './accounts/webSocketProgramAccountSubscriber';
27
27
  export { WebSocketProgramUserAccountSubscriber } from './accounts/websocketProgramUserAccountSubscriber';
28
28
  export { WebSocketProgramAccountsSubscriberV2 } from './accounts/webSocketProgramAccountsSubscriberV2';
29
- export {
30
- WebSocketVelocityClientAccountSubscriberV2,
31
- WebSocketDriftClientAccountSubscriberV2,
32
- } from './accounts/webSocketVelocityClientAccountSubscriberV2';
29
+ export { WebSocketVelocityClientAccountSubscriberV2 } from './accounts/webSocketVelocityClientAccountSubscriberV2';
33
30
  export * from './accounts/bulkAccountLoader';
34
31
  export * from './accounts/bulkUserSubscription';
35
32
  export * from './accounts/bulkUserStatsSubscription';
@@ -4,8 +4,8 @@ This document describes the single-source-of-truth margin engine in the SDK that
4
4
 
5
5
  ### Alignment with on-chain
6
6
 
7
- - The SDK snapshot shape mirrors `programs/drift/src/state/margin_calculation.rs` field-for-field.
8
- - The inputs and ordering mirror `calculate_margin_requirement_and_total_collateral_and_liability_info` in `programs/drift/src/math/margin.rs`.
7
+ - The SDK snapshot shape mirrors `programs/velocity/src/state/margin_calculation.rs` field-for-field.
8
+ - The inputs and ordering mirror `calculate_margin_requirement_and_total_collateral_and_liability_info` in `programs/velocity/src/math/margin.rs`.
9
9
  - Isolated positions are represented as `isolatedMarginCalculations` keyed by perp `marketIndex`, matching program logic.
10
10
 
11
11
  ### Core SDK types (shape parity)
package/src/math/amm.ts CHANGED
@@ -17,6 +17,7 @@ import {
17
17
  } from '../constants/numericConstants';
18
18
  import {
19
19
  AMM,
20
+ MarketStats,
20
21
  PositionDirection,
21
22
  SwapDirection,
22
23
  PerpMarketAccount,
@@ -52,6 +53,7 @@ export function calculatePegFromTargetPrice(
52
53
 
53
54
  export function calculateOptimalPegAndBudget(
54
55
  amm: AMM,
56
+ totalExchangeFee: BN,
55
57
  mmOraclePriceData: MMOraclePriceData
56
58
  ): [BN, BN, BN, boolean] {
57
59
  const reservePriceBefore = calculatePrice(
@@ -67,7 +69,7 @@ export function calculateOptimalPegAndBudget(
67
69
  );
68
70
  const prePegCost = calculateRepegCost(amm, newPeg);
69
71
 
70
- const totalFeeLB = amm.totalExchangeFee.div(new BN(2));
72
+ const totalFeeLB = totalExchangeFee.div(new BN(2));
71
73
  const budget = BN.max(ZERO, amm.totalFeeMinusDistributions.sub(totalFeeLB));
72
74
 
73
75
  let checkLowerBound = true;
@@ -102,7 +104,7 @@ export function calculateOptimalPegAndBudget(
102
104
 
103
105
  return [newTargetPrice, newOptimalPeg, newBudget, false];
104
106
  } else if (
105
- amm.totalFeeMinusDistributions.lt(amm.totalExchangeFee.div(new BN(2)))
107
+ amm.totalFeeMinusDistributions.lt(totalExchangeFee.div(new BN(2)))
106
108
  ) {
107
109
  checkLowerBound = false;
108
110
  }
@@ -113,13 +115,14 @@ export function calculateOptimalPegAndBudget(
113
115
 
114
116
  export function calculateNewAmm(
115
117
  amm: AMM,
118
+ totalExchangeFee: BN,
116
119
  mmOraclePriceData: MMOraclePriceData
117
120
  ): [BN, BN, BN, BN] {
118
121
  let pKNumer = new BN(1);
119
122
  let pKDenom = new BN(1);
120
123
 
121
124
  const [targetPrice, _newPeg, budget, _checkLowerBound] =
122
- calculateOptimalPegAndBudget(amm, mmOraclePriceData);
125
+ calculateOptimalPegAndBudget(amm, totalExchangeFee, mmOraclePriceData);
123
126
  let prePegCost = calculateRepegCost(amm, _newPeg);
124
127
  let newPeg = _newPeg;
125
128
 
@@ -155,6 +158,7 @@ export function calculateNewAmm(
155
158
 
156
159
  export function calculateUpdatedAMM(
157
160
  amm: AMM,
161
+ totalExchangeFee: BN,
158
162
  mmOraclePriceData: MMOraclePriceData
159
163
  ): AMM {
160
164
  if (amm.curveUpdateIntensity == 0 || mmOraclePriceData === undefined) {
@@ -163,6 +167,7 @@ export function calculateUpdatedAMM(
163
167
  const newAmm = Object.assign({}, amm);
164
168
  const [prepegCost, pKNumer, pKDenom, newPeg] = calculateNewAmm(
165
169
  amm,
170
+ totalExchangeFee,
166
171
  mmOraclePriceData
167
172
  );
168
173
 
@@ -195,13 +200,16 @@ export function calculateUpdatedAMM(
195
200
 
196
201
  export function calculateUpdatedAMMSpreadReserves(
197
202
  amm: AMM,
203
+ marketStats: MarketStats,
204
+ totalExchangeFee: BN,
198
205
  direction: PositionDirection,
199
206
  mmOraclePriceData: MMOraclePriceData,
200
207
  latestSlot?: BN
201
208
  ): { baseAssetReserve: BN; quoteAssetReserve: BN; sqrtK: BN; newPeg: BN } {
202
- const newAmm = calculateUpdatedAMM(amm, mmOraclePriceData);
209
+ const newAmm = calculateUpdatedAMM(amm, totalExchangeFee, mmOraclePriceData);
203
210
  const [shortReserves, longReserves] = calculateSpreadReserves(
204
211
  newAmm,
212
+ marketStats,
205
213
  mmOraclePriceData,
206
214
  undefined,
207
215
  latestSlot
@@ -223,19 +231,22 @@ export function calculateUpdatedAMMSpreadReserves(
223
231
 
224
232
  export function calculateBidAskPrice(
225
233
  amm: AMM,
234
+ marketStats: MarketStats,
235
+ totalExchangeFee: BN,
226
236
  mmOraclePriceData: MMOraclePriceData,
227
237
  withUpdate = true,
228
238
  latestSlot?: BN
229
239
  ): [BN, BN] {
230
240
  let newAmm: AMM;
231
241
  if (withUpdate) {
232
- newAmm = calculateUpdatedAMM(amm, mmOraclePriceData);
242
+ newAmm = calculateUpdatedAMM(amm, totalExchangeFee, mmOraclePriceData);
233
243
  } else {
234
244
  newAmm = amm;
235
245
  }
236
246
 
237
247
  const [bidReserves, askReserves] = calculateSpreadReserves(
238
248
  newAmm,
249
+ marketStats,
239
250
  mmOraclePriceData,
240
251
  undefined,
241
252
  latestSlot
@@ -844,6 +855,7 @@ export function calculateSpreadBN(
844
855
 
845
856
  export function calculateSpread(
846
857
  amm: AMM,
858
+ marketStats: MarketStats,
847
859
  oraclePriceData: OraclePriceData,
848
860
  now?: BN,
849
861
  reservePrice?: BN
@@ -867,9 +879,13 @@ export function calculateSpread(
867
879
  .div(reservePrice);
868
880
 
869
881
  now = now || new BN(new Date().getTime() / 1000); //todo
870
- const liveOracleStd = calculateLiveOracleStd(amm, oraclePriceData, now);
882
+ const liveOracleStd = calculateLiveOracleStd(
883
+ marketStats,
884
+ oraclePriceData,
885
+ now
886
+ );
871
887
  const confIntervalPct = getNewOracleConfPct(
872
- amm,
888
+ marketStats,
873
889
  oraclePriceData,
874
890
  reservePrice,
875
891
  now
@@ -890,11 +906,11 @@ export function calculateSpread(
890
906
  amm.baseAssetReserve,
891
907
  amm.minBaseAssetReserve,
892
908
  amm.maxBaseAssetReserve,
893
- amm.markStd,
909
+ marketStats.markStd,
894
910
  liveOracleStd,
895
- amm.longIntensityVolume,
896
- amm.shortIntensityVolume,
897
- amm.volume24H,
911
+ marketStats.longIntensityVolume,
912
+ marketStats.shortIntensityVolume,
913
+ marketStats.volume24H,
898
914
  amm.ammInventorySpreadAdjustment
899
915
  );
900
916
  let longSpread = spreads[0];
@@ -925,6 +941,7 @@ export function calculateSpread(
925
941
 
926
942
  export function calculateSpreadReserves(
927
943
  amm: AMM,
944
+ marketStats: MarketStats,
928
945
  mmOraclePriceData: MMOraclePriceData,
929
946
  now?: BN,
930
947
  latestSlot?: BN
@@ -1022,25 +1039,27 @@ export function calculateSpreadReserves(
1022
1039
 
1023
1040
  referencePriceOffset = calculateReferencePriceOffset(
1024
1041
  reservePrice,
1025
- amm.last24HAvgFundingRate,
1042
+ marketStats.last24HAvgFundingRate,
1026
1043
  liquidityFractionAfterDeadband,
1027
- amm.historicalOracleData.lastOraclePriceTwap5Min,
1028
- amm.lastMarkPriceTwap5Min,
1029
- amm.historicalOracleData.lastOraclePriceTwap,
1030
- amm.lastMarkPriceTwap,
1044
+ marketStats.historicalOracleData.lastOraclePriceTwap5Min,
1045
+ marketStats.lastMarkPriceTwap5Min,
1046
+ marketStats.historicalOracleData.lastOraclePriceTwap,
1047
+ marketStats.lastMarkPriceTwap,
1031
1048
  maxOffset
1032
1049
  ).toNumber();
1033
1050
  }
1034
1051
 
1035
1052
  let [longSpread, shortSpread] = calculateSpread(
1036
1053
  amm,
1054
+ marketStats,
1037
1055
  mmOraclePriceData,
1038
1056
  now,
1039
1057
  reservePrice
1040
1058
  );
1041
1059
 
1060
+ const lastReferencePriceOffset = marketStats.lastReferencePriceOffset;
1042
1061
  const doReferencePricOffsetSmooth =
1043
- Math.sign(referencePriceOffset) !== Math.sign(amm.referencePriceOffset) &&
1062
+ Math.sign(referencePriceOffset) !== Math.sign(lastReferencePriceOffset) &&
1044
1063
  amm.curveUpdateIntensity > 100;
1045
1064
 
1046
1065
  if (doReferencePricOffsetSmooth) {
@@ -1048,17 +1067,17 @@ export function calculateSpreadReserves(
1048
1067
  latestSlot != null
1049
1068
  ? BN.max(latestSlot.sub(amm.lastUpdateSlot), ZERO).toNumber()
1050
1069
  : 0;
1051
- const fullOffsetDelta = referencePriceOffset - amm.referencePriceOffset;
1070
+ const fullOffsetDelta = referencePriceOffset - lastReferencePriceOffset;
1052
1071
  const raw = Math.trunc(
1053
1072
  Math.min(Math.abs(fullOffsetDelta), slotsPassed * 1000) / 10
1054
1073
  );
1055
1074
  const maxAllowed =
1056
- Math.abs(amm.referencePriceOffset) || Math.abs(referencePriceOffset);
1075
+ Math.abs(lastReferencePriceOffset) || Math.abs(referencePriceOffset);
1057
1076
 
1058
1077
  const magnitude = Math.min(Math.max(raw, 10), maxAllowed);
1059
1078
  const referencePriceDelta = Math.sign(fullOffsetDelta) * magnitude;
1060
1079
 
1061
- referencePriceOffset = amm.referencePriceOffset + referencePriceDelta;
1080
+ referencePriceOffset = lastReferencePriceOffset + referencePriceDelta;
1062
1081
 
1063
1082
  if (referencePriceDelta < 0) {
1064
1083
  longSpread += Math.abs(referencePriceDelta);
@@ -1159,6 +1178,7 @@ export function calculateTerminalPrice(market: PerpMarketAccount) {
1159
1178
 
1160
1179
  export function calculateMaxBaseAssetAmountToTrade(
1161
1180
  amm: AMM,
1181
+ marketStats: MarketStats,
1162
1182
  limit_price: BN,
1163
1183
  direction: PositionDirection,
1164
1184
  mmOraclePriceData?: MMOraclePriceData,
@@ -1175,6 +1195,7 @@ export function calculateMaxBaseAssetAmountToTrade(
1175
1195
  const newBaseAssetReserve = squareRootBN(newBaseAssetReserveSquared);
1176
1196
  const [shortSpreadReserves, longSpreadReserves] = calculateSpreadReserves(
1177
1197
  amm,
1198
+ marketStats,
1178
1199
  mmOraclePriceData,
1179
1200
  now
1180
1201
  );
@@ -1221,6 +1242,7 @@ export function calculateQuoteAssetAmountSwapped(
1221
1242
 
1222
1243
  export function calculateMaxBaseAssetAmountFillable(
1223
1244
  amm: AMM,
1245
+ orderStepSize: BN,
1224
1246
  orderDirection: PositionDirection
1225
1247
  ): BN {
1226
1248
  const maxFillSize = amm.baseAssetReserve.div(
@@ -1241,6 +1263,6 @@ export function calculateMaxBaseAssetAmountFillable(
1241
1263
 
1242
1264
  return standardizeBaseAssetAmount(
1243
1265
  BN.min(maxFillSize, maxBaseAssetAmountOnSide),
1244
- amm.orderStepSize
1266
+ orderStepSize
1245
1267
  );
1246
1268
  }
@@ -95,7 +95,7 @@ export function getAuctionPrice(
95
95
  ) {
96
96
  return getAuctionPriceForFixedAuction(order, slot);
97
97
  } else if (isVariant(order.orderType, 'limit')) {
98
- if (order.oraclePriceOffset != null && order.oraclePriceOffset !== 0) {
98
+ if (order.oraclePriceOffset != null && !order.oraclePriceOffset.eq(ZERO)) {
99
99
  return getAuctionPriceForOracleOffsetAuction(order, slot, oraclePrice);
100
100
  } else {
101
101
  return getAuctionPriceForFixedAuction(order, slot);
@@ -207,7 +207,7 @@ export function deriveOracleAuctionParams({
207
207
  min: BN;
208
208
  max: BN;
209
209
  };
210
- }): { auctionStartPrice: BN; auctionEndPrice: BN; oraclePriceOffset: number } {
210
+ }): { auctionStartPrice: BN; auctionEndPrice: BN; oraclePriceOffset: BN } {
211
211
  let oraclePriceOffset;
212
212
 
213
213
  if (limitPrice.eq(ZERO) || oraclePrice.eq(ZERO)) {
@@ -222,13 +222,6 @@ export function deriveOracleAuctionParams({
222
222
  : auctionEndPrice.sub(oraclePrice).sub(ONE);
223
223
  }
224
224
 
225
- let oraclePriceOffsetNum;
226
- try {
227
- oraclePriceOffsetNum = oraclePriceOffset.toNumber();
228
- } catch (e) {
229
- oraclePriceOffsetNum = 0;
230
- }
231
-
232
225
  if (auctionPriceCaps) {
233
226
  auctionStartPrice = BN.min(
234
227
  BN.max(auctionStartPrice, auctionPriceCaps.min),
@@ -243,7 +236,7 @@ export function deriveOracleAuctionParams({
243
236
  return {
244
237
  auctionStartPrice: auctionStartPrice.sub(oraclePrice),
245
238
  auctionEndPrice: auctionEndPrice.sub(oraclePrice),
246
- oraclePriceOffset: oraclePriceOffsetNum,
239
+ oraclePriceOffset: oraclePriceOffset,
247
240
  };
248
241
  }
249
242
 
@@ -261,11 +254,11 @@ export function getTriggerAuctionStartPrice(params: {
261
254
  const { perpMarket, direction, oraclePrice, limitPrice } = params;
262
255
 
263
256
  const twapMismatch =
264
- perpMarket.amm.historicalOracleData.lastOraclePriceTwapTs
265
- .sub(perpMarket.amm.lastMarkPriceTwapTs)
257
+ perpMarket.marketStats.historicalOracleData.lastOraclePriceTwapTs
258
+ .sub(perpMarket.marketStats.lastMarkPriceTwapTs)
266
259
  .abs()
267
260
  .gte(new BN(60)) ||
268
- perpMarket.amm.volume24H.lte(new BN(100_000).mul(QUOTE_PRECISION));
261
+ perpMarket.marketStats.volume24H.lte(new BN(100_000).mul(QUOTE_PRECISION));
269
262
 
270
263
  let baselineStartOffset: BN;
271
264
 
@@ -273,27 +266,31 @@ export function getTriggerAuctionStartPrice(params: {
273
266
  const contractTierNumber = getPerpMarketTierNumber(perpMarket);
274
267
  const priceDivisor = contractTierNumber <= 1 ? 500 : 100;
275
268
  baselineStartOffset = isVariant(direction, 'long')
276
- ? perpMarket.amm.lastBidPriceTwap.divn(priceDivisor)
277
- : perpMarket.amm.lastAskPriceTwap.divn(priceDivisor).neg();
269
+ ? perpMarket.marketStats.lastBidPriceTwap.divn(priceDivisor)
270
+ : perpMarket.marketStats.lastAskPriceTwap.divn(priceDivisor).neg();
278
271
  } else {
279
272
  const markTwapSlow = isVariant(direction, 'long')
280
- ? perpMarket.amm.lastBidPriceTwap
281
- : perpMarket.amm.lastAskPriceTwap;
273
+ ? perpMarket.marketStats.lastBidPriceTwap
274
+ : perpMarket.marketStats.lastAskPriceTwap;
282
275
 
283
- const markTwapFast = perpMarket.amm.lastMarkPriceTwap5Min;
276
+ const markTwapFast = perpMarket.marketStats.lastMarkPriceTwap5Min;
284
277
  const oracleTwapSlow =
285
- perpMarket.amm.historicalOracleData.lastOraclePriceTwap;
278
+ perpMarket.marketStats.historicalOracleData.lastOraclePriceTwap;
286
279
  const oracleTwapFast =
287
- perpMarket.amm.historicalOracleData.lastOraclePriceTwap5Min;
280
+ perpMarket.marketStats.historicalOracleData.lastOraclePriceTwap5Min;
288
281
 
289
282
  const offsetSlow = markTwapSlow.sub(oracleTwapSlow);
290
283
  const offsetFast = markTwapFast.sub(oracleTwapFast);
291
284
 
292
- const fracOfLongSpreadInPrice = new BN(perpMarket.amm.longSpread)
285
+ // long_spread/short_spread were removed from AMM in the decoupling refactor.
286
+ // Fall back to half base_spread as the per-side spread approximation; the
287
+ // AMM no longer caches an exact per-side spread without oracle context.
288
+ const halfBaseSpread = new BN(Math.floor(perpMarket.amm.baseSpread / 2));
289
+ const fracOfLongSpreadInPrice = halfBaseSpread
293
290
  .mul(markTwapSlow)
294
291
  .div(PRICE_PRECISION.muln(10)); // divide by 10x for safety
295
292
 
296
- const fracOfShortSpreadInPrice = new BN(perpMarket.amm.shortSpread)
293
+ const fracOfShortSpreadInPrice = halfBaseSpread
297
294
  .mul(markTwapSlow)
298
295
  .div(PRICE_PRECISION.muln(10)); // divide by 10x for safety
299
296
 
@@ -1,4 +1,48 @@
1
- import { RevenueShareOrder } from '../types';
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import {
3
+ OrderParams,
4
+ ReferrerStatus,
5
+ RevenueShareEscrowAccount,
6
+ RevenueShareOrder,
7
+ UserStatsAccount,
8
+ } from '../types';
9
+
10
+ /**
11
+ * True when the user's RevenueShareEscrow was initialized with a referrer.
12
+ * Fills for such users must include the escrow account or the program rejects
13
+ * them with UnableToLoadRevenueShareAccount.
14
+ */
15
+ export function isBuilderReferral(
16
+ userStats: Pick<UserStatsAccount, 'referrerStatus'>
17
+ ): boolean {
18
+ return (userStats.referrerStatus & ReferrerStatus.BuilderReferral) !== 0;
19
+ }
20
+
21
+ /**
22
+ * True when the escrow was initialized with a referrer. Referral rewards
23
+ * accrue into such escrows on fills, so fills of the escrow owner's orders
24
+ * must include the escrow account (see `isBuilderReferral`).
25
+ */
26
+ export function escrowHasReferrer(
27
+ escrow: Pick<RevenueShareEscrowAccount, 'referrer'>
28
+ ): boolean {
29
+ return !escrow.referrer.equals(PublicKey.default);
30
+ }
31
+
32
+ /**
33
+ * True when the order params carry a builder code (`builderIdx` +
34
+ * `builderFeeTenthBps`).
35
+ */
36
+ export function hasBuilderParams(
37
+ orderParams: Pick<OrderParams, 'builderIdx' | 'builderFeeTenthBps'>
38
+ ): boolean {
39
+ return (
40
+ orderParams.builderIdx !== null &&
41
+ orderParams.builderIdx !== undefined &&
42
+ orderParams.builderFeeTenthBps !== null &&
43
+ orderParams.builderFeeTenthBps !== undefined
44
+ );
45
+ }
2
46
 
3
47
  const FLAG_IS_OPEN = 0x01;
4
48
  export function isBuilderOrderOpen(order: RevenueShareOrder): boolean {
@@ -28,8 +28,8 @@ function calculateLiveMarkTwap(
28
28
  ): BN {
29
29
  now = now || new BN((Date.now() / 1000).toFixed(0));
30
30
 
31
- const lastMarkTwapWithMantissa = market.amm.lastMarkPriceTwap;
32
- const lastMarkPriceTwapTs = market.amm.lastMarkPriceTwapTs;
31
+ const lastMarkTwapWithMantissa = market.marketStats.lastMarkPriceTwap;
32
+ const lastMarkPriceTwapTs = market.marketStats.lastMarkPriceTwapTs;
33
33
 
34
34
  const timeSinceLastMarkChange = now.sub(lastMarkPriceTwapTs);
35
35
  const markTwapTimeSinceLastUpdate = BN.max(
@@ -38,7 +38,12 @@ function calculateLiveMarkTwap(
38
38
  );
39
39
 
40
40
  if (!markPrice) {
41
- const [bid, ask] = calculateBidAskPrice(market.amm, mmOraclePriceData);
41
+ const [bid, ask] = calculateBidAskPrice(
42
+ market.amm,
43
+ market.marketStats,
44
+ market.totalExchangeFee,
45
+ mmOraclePriceData
46
+ );
42
47
  markPrice = bid.add(ask).div(new BN(2));
43
48
  }
44
49
 
@@ -60,25 +65,28 @@ function shrinkStaleTwaps(
60
65
  let newMarkTwap = markTwapWithMantissa;
61
66
  let newOracleTwap = oracleTwapWithMantissa;
62
67
  if (
63
- market.amm.lastMarkPriceTwapTs.gt(
64
- market.amm.historicalOracleData.lastOraclePriceTwapTs
68
+ market.marketStats.lastMarkPriceTwapTs.gt(
69
+ market.marketStats.historicalOracleData.lastOraclePriceTwapTs
65
70
  )
66
71
  ) {
67
72
  // shrink oracle based on invalid intervals
68
73
  const oracleInvalidDuration = BN.max(
69
74
  ZERO,
70
- market.amm.lastMarkPriceTwapTs.sub(
71
- market.amm.historicalOracleData.lastOraclePriceTwapTs
75
+ market.marketStats.lastMarkPriceTwapTs.sub(
76
+ market.marketStats.historicalOracleData.lastOraclePriceTwapTs
72
77
  )
73
78
  );
74
79
  const timeSinceLastOracleTwapUpdate = now.sub(
75
- market.amm.historicalOracleData.lastOraclePriceTwapTs
80
+ market.marketStats.historicalOracleData.lastOraclePriceTwapTs
76
81
  );
77
82
  const oracleTwapTimeSinceLastUpdate = BN.max(
78
83
  ONE,
79
84
  BN.min(
80
- market.amm.fundingPeriod,
81
- BN.max(ONE, market.amm.fundingPeriod.sub(timeSinceLastOracleTwapUpdate))
85
+ market.marketStats.fundingPeriod,
86
+ BN.max(
87
+ ONE,
88
+ market.marketStats.fundingPeriod.sub(timeSinceLastOracleTwapUpdate)
89
+ )
82
90
  )
83
91
  );
84
92
  newOracleTwap = oracleTwapTimeSinceLastUpdate
@@ -86,23 +94,28 @@ function shrinkStaleTwaps(
86
94
  .add(oracleInvalidDuration.mul(markTwapWithMantissa))
87
95
  .div(oracleTwapTimeSinceLastUpdate.add(oracleInvalidDuration));
88
96
  } else if (
89
- market.amm.lastMarkPriceTwapTs.lt(
90
- market.amm.historicalOracleData.lastOraclePriceTwapTs
97
+ market.marketStats.lastMarkPriceTwapTs.lt(
98
+ market.marketStats.historicalOracleData.lastOraclePriceTwapTs
91
99
  )
92
100
  ) {
93
101
  // shrink mark to oracle twap over tradless intervals
94
102
  const tradelessDuration = BN.max(
95
103
  ZERO,
96
- market.amm.historicalOracleData.lastOraclePriceTwapTs.sub(
97
- market.amm.lastMarkPriceTwapTs
104
+ market.marketStats.historicalOracleData.lastOraclePriceTwapTs.sub(
105
+ market.marketStats.lastMarkPriceTwapTs
98
106
  )
99
107
  );
100
- const timeSinceLastMarkTwapUpdate = now.sub(market.amm.lastMarkPriceTwapTs);
108
+ const timeSinceLastMarkTwapUpdate = now.sub(
109
+ market.marketStats.lastMarkPriceTwapTs
110
+ );
101
111
  const markTwapTimeSinceLastUpdate = BN.max(
102
112
  ONE,
103
113
  BN.min(
104
- market.amm.fundingPeriod,
105
- BN.max(ONE, market.amm.fundingPeriod.sub(timeSinceLastMarkTwapUpdate))
114
+ market.marketStats.fundingPeriod,
115
+ BN.max(
116
+ ONE,
117
+ market.marketStats.fundingPeriod.sub(timeSinceLastMarkTwapUpdate)
118
+ )
106
119
  )
107
120
  );
108
121
  newMarkTwap = markTwapTimeSinceLastUpdate
@@ -141,13 +154,13 @@ export function calculateAllEstimatedFundingRate(
141
154
  mmOraclePriceData,
142
155
  markPrice,
143
156
  now,
144
- market.amm.fundingPeriod
157
+ market.marketStats.fundingPeriod
145
158
  );
146
159
  const liveOracleTwap = calculateLiveOracleTwap(
147
- market.amm.historicalOracleData,
160
+ market.marketStats.historicalOracleData,
148
161
  oraclePriceData,
149
162
  now,
150
- market.amm.fundingPeriod
163
+ market.marketStats.fundingPeriod
151
164
  );
152
165
  const [markTwap, oracleTwap] = shrinkStaleTwaps(
153
166
  market,
@@ -187,10 +200,10 @@ export function calculateAllEstimatedFundingRate(
187
200
 
188
201
  const secondsInHour = new BN(3600);
189
202
  const hoursInDay = new BN(24);
190
- const timeSinceLastUpdate = now.sub(market.amm.lastFundingRateTs);
203
+ const timeSinceLastUpdate = now.sub(market.lastFundingRateTs);
191
204
 
192
205
  const lowerboundEst = twapSpreadPct
193
- .mul(market.amm.fundingPeriod)
206
+ .mul(market.marketStats.fundingPeriod)
194
207
  .mul(BN.min(secondsInHour, timeSinceLastUpdate))
195
208
  .div(secondsInHour)
196
209
  .div(secondsInHour)
@@ -210,19 +223,15 @@ export function calculateAllEstimatedFundingRate(
210
223
  let cappedAltEst: BN;
211
224
  let largerSide: BN;
212
225
  let smallerSide: BN;
213
- if (
214
- market.amm.baseAssetAmountLong.gt(market.amm.baseAssetAmountShort.abs())
215
- ) {
216
- largerSide = market.amm.baseAssetAmountLong.abs();
217
- smallerSide = market.amm.baseAssetAmountShort.abs();
226
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
227
+ largerSide = market.baseAssetAmountLong.abs();
228
+ smallerSide = market.baseAssetAmountShort.abs();
218
229
  if (twapSpread.gt(new BN(0))) {
219
230
  return [markTwap, oracleTwap, lowerboundEst, interpEst, interpEst];
220
231
  }
221
- } else if (
222
- market.amm.baseAssetAmountLong.lt(market.amm.baseAssetAmountShort.abs())
223
- ) {
224
- largerSide = market.amm.baseAssetAmountShort.abs();
225
- smallerSide = market.amm.baseAssetAmountLong.abs();
232
+ } else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
233
+ largerSide = market.baseAssetAmountShort.abs();
234
+ smallerSide = market.baseAssetAmountLong.abs();
226
235
  if (twapSpread.lt(new BN(0))) {
227
236
  return [markTwap, oracleTwap, lowerboundEst, interpEst, interpEst];
228
237
  }
@@ -370,11 +379,9 @@ export function calculateLongShortFundingRate(
370
379
  now
371
380
  );
372
381
 
373
- if (market.amm.baseAssetAmountLong.gt(market.amm.baseAssetAmountShort)) {
382
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
374
383
  return [cappedAltEst, interpEst];
375
- } else if (
376
- market.amm.baseAssetAmountLong.lt(market.amm.baseAssetAmountShort)
377
- ) {
384
+ } else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort)) {
378
385
  return [interpEst, cappedAltEst];
379
386
  } else {
380
387
  return [interpEst, interpEst];
@@ -404,13 +411,9 @@ export function calculateLongShortFundingRateAndLiveTwaps(
404
411
  now
405
412
  );
406
413
 
407
- if (
408
- market.amm.baseAssetAmountLong.gt(market.amm.baseAssetAmountShort.abs())
409
- ) {
414
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
410
415
  return [markTwapLive, oracleTwapLive, cappedAltEst, interpEst];
411
- } else if (
412
- market.amm.baseAssetAmountLong.lt(market.amm.baseAssetAmountShort.abs())
413
- ) {
416
+ } else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
414
417
  return [markTwapLive, oracleTwapLive, interpEst, cappedAltEst];
415
418
  } else {
416
419
  return [markTwapLive, oracleTwapLive, interpEst, interpEst];
@@ -424,7 +427,7 @@ export function calculateLongShortFundingRateAndLiveTwaps(
424
427
  */
425
428
  export function calculateFundingPool(market: PerpMarketAccount): BN {
426
429
  // todo
427
- const totalFeeLB = market.amm.totalExchangeFee.div(new BN(2));
430
+ const totalFeeLB = market.totalExchangeFee.div(new BN(2));
428
431
  const feePool = BN.max(
429
432
  ZERO,
430
433
  market.amm.totalFeeMinusDistributions