@d8x/perpetuals-sdk 2.0.13-alpha → 2.1.1-alpha2

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 (282) hide show
  1. package/dist/cjs/abi/IPerpetualManager.json +154 -4
  2. package/dist/cjs/abi/OracleFactory.json +94 -25
  3. package/dist/cjs/abi/PerpetualManagerProxy.json +212 -2
  4. package/dist/cjs/accountTrade.d.ts +3 -3
  5. package/dist/cjs/accountTrade.js +1 -1
  6. package/dist/cjs/accountTrade.js.map +1 -1
  7. package/dist/cjs/brokerTool.d.ts +5 -1
  8. package/dist/cjs/brokerTool.js +20 -7
  9. package/dist/cjs/brokerTool.js.map +1 -1
  10. package/dist/cjs/config/defaultConfig.json +0 -12
  11. package/dist/cjs/config/priceFeedConfig.json +1 -19
  12. package/dist/cjs/constants.d.ts +0 -1
  13. package/dist/cjs/constants.js +2 -3
  14. package/dist/cjs/constants.js.map +1 -1
  15. package/dist/cjs/contracts/IPerpetualManager.d.ts +93 -13
  16. package/dist/cjs/contracts/OracleFactory.d.ts +69 -20
  17. package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +109 -4
  18. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +118 -4
  19. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +154 -4
  20. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  21. package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +75 -20
  22. package/dist/cjs/contracts/factories/OracleFactory__factory.js +94 -25
  23. package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
  24. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
  25. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
  26. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  27. package/dist/cjs/d8XMath.d.ts +59 -1
  28. package/dist/cjs/d8XMath.js +259 -3
  29. package/dist/cjs/d8XMath.js.map +1 -1
  30. package/dist/cjs/liquidatorTool.d.ts +1 -0
  31. package/dist/cjs/liquidatorTool.js +24 -7
  32. package/dist/cjs/liquidatorTool.js.map +1 -1
  33. package/dist/cjs/marketData.d.ts +45 -23
  34. package/dist/cjs/marketData.js +292 -197
  35. package/dist/cjs/marketData.js.map +1 -1
  36. package/dist/cjs/nodeSDKTypes.d.ts +24 -1
  37. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  38. package/dist/cjs/orderExecutorTool.d.ts +3 -3
  39. package/dist/cjs/orderExecutorTool.js +38 -13
  40. package/dist/cjs/orderExecutorTool.js.map +1 -1
  41. package/dist/cjs/perpetualDataHandler.d.ts +28 -17
  42. package/dist/cjs/perpetualDataHandler.js +71 -45
  43. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  44. package/dist/cjs/perpetualEventHandler.d.ts +1 -1
  45. package/dist/cjs/perpetualEventHandler.js +6 -7
  46. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  47. package/dist/cjs/polyMktsPxFeed.d.ts +5 -3
  48. package/dist/cjs/polyMktsPxFeed.js +34 -2
  49. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  50. package/dist/cjs/priceFeeds.d.ts +6 -7
  51. package/dist/cjs/priceFeeds.js +36 -14
  52. package/dist/cjs/priceFeeds.js.map +1 -1
  53. package/dist/cjs/version.d.ts +1 -1
  54. package/dist/cjs/version.js +1 -1
  55. package/dist/cjs/writeAccessHandler.js +1 -1
  56. package/dist/cjs/writeAccessHandler.js.map +1 -1
  57. package/dist/esm/abi/IPerpetualManager.json +154 -4
  58. package/dist/esm/abi/OracleFactory.json +94 -25
  59. package/dist/esm/abi/PerpetualManagerProxy.json +212 -2
  60. package/dist/esm/accountTrade.d.ts +3 -3
  61. package/dist/esm/accountTrade.js +1 -1
  62. package/dist/esm/accountTrade.js.map +1 -1
  63. package/dist/esm/brokerTool.d.ts +5 -1
  64. package/dist/esm/brokerTool.js +21 -8
  65. package/dist/esm/brokerTool.js.map +1 -1
  66. package/dist/esm/config/defaultConfig.json +0 -12
  67. package/dist/esm/config/priceFeedConfig.json +1 -19
  68. package/dist/esm/constants.d.ts +0 -1
  69. package/dist/esm/constants.js +1 -2
  70. package/dist/esm/constants.js.map +1 -1
  71. package/dist/esm/contracts/IPerpetualManager.d.ts +93 -13
  72. package/dist/esm/contracts/OracleFactory.d.ts +69 -20
  73. package/dist/esm/contracts/PerpetualManagerProxy.d.ts +109 -4
  74. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +118 -4
  75. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +154 -4
  76. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  77. package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +75 -20
  78. package/dist/esm/contracts/factories/OracleFactory__factory.js +94 -25
  79. package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
  80. package/dist/{cjs/contracts/factories/MockToken__factory.d.ts → esm/contracts/factories/PerpStorage__factory.d.ts} +115 -128
  81. package/dist/esm/contracts/factories/{MockToken__factory.js → PerpStorage__factory.js} +128 -139
  82. package/dist/esm/contracts/factories/PerpStorage__factory.js.map +1 -0
  83. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
  84. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
  85. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  86. package/dist/esm/d8XMath.d.ts +59 -1
  87. package/dist/esm/d8XMath.js +251 -2
  88. package/dist/esm/d8XMath.js.map +1 -1
  89. package/dist/esm/liquidatorTool.d.ts +1 -0
  90. package/dist/esm/liquidatorTool.js +25 -8
  91. package/dist/esm/liquidatorTool.js.map +1 -1
  92. package/dist/esm/marketData.d.ts +45 -23
  93. package/dist/esm/marketData.js +295 -200
  94. package/dist/esm/marketData.js.map +1 -1
  95. package/dist/esm/nodeSDKTypes.d.ts +24 -1
  96. package/dist/esm/nodeSDKTypes.js.map +1 -1
  97. package/dist/esm/orderExecutorTool.d.ts +3 -3
  98. package/dist/esm/orderExecutorTool.js +38 -13
  99. package/dist/esm/orderExecutorTool.js.map +1 -1
  100. package/dist/esm/perpetualDataHandler.d.ts +28 -17
  101. package/dist/esm/perpetualDataHandler.js +74 -48
  102. package/dist/esm/perpetualDataHandler.js.map +1 -1
  103. package/dist/esm/perpetualEventHandler.d.ts +1 -1
  104. package/dist/esm/perpetualEventHandler.js +6 -7
  105. package/dist/esm/perpetualEventHandler.js.map +1 -1
  106. package/dist/esm/polyMktsPxFeed.d.ts +5 -3
  107. package/dist/esm/polyMktsPxFeed.js +34 -2
  108. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  109. package/dist/esm/priceFeeds.d.ts +6 -7
  110. package/dist/esm/priceFeeds.js +36 -14
  111. package/dist/esm/priceFeeds.js.map +1 -1
  112. package/dist/esm/version.d.ts +1 -1
  113. package/dist/esm/version.js +1 -1
  114. package/dist/esm/writeAccessHandler.js +3 -3
  115. package/dist/esm/writeAccessHandler.js.map +1 -1
  116. package/doc/brokerTool.md +3 -1
  117. package/doc/d8x-perpetuals-sdk.md +804 -132
  118. package/doc/marketData.md +813 -0
  119. package/doc/perpetualDataHandler.md +76 -7
  120. package/package.json +1 -1
  121. package/src/abi/IPerpetualManager.json +154 -4
  122. package/src/abi/OracleFactory.json +523 -454
  123. package/src/abi/PerpetualManagerProxy.json +1596 -1386
  124. package/src/accountTrade.ts +3 -3
  125. package/src/brokerTool.ts +22 -8
  126. package/src/config/defaultConfig.json +0 -13
  127. package/src/config/priceFeedConfig.json +1 -19
  128. package/src/constants.ts +1 -2
  129. package/src/contracts/IPerpetualManager.ts +140 -10
  130. package/src/contracts/OracleFactory.ts +100 -26
  131. package/src/contracts/PerpetualManagerProxy.ts +192 -3
  132. package/src/contracts/factories/IPerpetualManager__factory.ts +154 -4
  133. package/src/contracts/factories/OracleFactory__factory.ts +94 -25
  134. package/src/contracts/factories/PerpetualManagerProxy__factory.ts +212 -2
  135. package/src/d8XMath.ts +327 -2
  136. package/src/liquidatorTool.ts +29 -14
  137. package/src/marketData.ts +448 -250
  138. package/src/nodeSDKTypes.ts +30 -1
  139. package/src/orderExecutorTool.ts +48 -20
  140. package/src/perpetualDataHandler.ts +108 -55
  141. package/src/perpetualEventHandler.ts +6 -7
  142. package/src/polyMktsPxFeed.ts +40 -4
  143. package/src/priceFeeds.ts +41 -17
  144. package/src/version.ts +1 -1
  145. package/src/writeAccessHandler.ts +2 -2
  146. package/dist/cjs/abi/BeaconProxy.json +0 -71
  147. package/dist/cjs/abi/Maintainer.json +0 -774
  148. package/dist/cjs/abi/MockToken.json +0 -347
  149. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  150. package/dist/cjs/abi/WeETH.json +0 -310
  151. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  152. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  153. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  154. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  155. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  156. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  157. package/dist/cjs/contracts/Maintainer.js +0 -3
  158. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  159. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  160. package/dist/cjs/contracts/MockToken.js +0 -3
  161. package/dist/cjs/contracts/MockToken.js.map +0 -1
  162. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  163. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  164. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  165. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  166. package/dist/cjs/contracts/WeETH.js +0 -3
  167. package/dist/cjs/contracts/WeETH.js.map +0 -1
  168. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  169. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  170. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  171. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  172. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  173. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  174. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  175. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  176. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  177. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  178. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  179. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  180. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  181. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  182. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  183. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  184. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  185. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  186. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  187. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  188. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  189. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  190. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  191. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  192. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  193. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  194. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  195. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  196. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  197. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  198. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  199. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  200. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  201. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  202. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  203. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  204. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  205. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  206. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  207. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  208. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  209. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  210. package/dist/cjs/contracts/lean0/index.js +0 -3
  211. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  212. package/dist/esm/abi/BeaconProxy.json +0 -71
  213. package/dist/esm/abi/Maintainer.json +0 -774
  214. package/dist/esm/abi/MockToken.json +0 -347
  215. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  216. package/dist/esm/abi/WeETH.json +0 -310
  217. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  218. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  219. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  220. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  221. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  222. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  223. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  224. package/dist/esm/contracts/BeaconProxy.js +0 -2
  225. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  226. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  227. package/dist/esm/contracts/Maintainer.js +0 -2
  228. package/dist/esm/contracts/Maintainer.js.map +0 -1
  229. package/dist/esm/contracts/MockToken.d.ts +0 -263
  230. package/dist/esm/contracts/MockToken.js +0 -2
  231. package/dist/esm/contracts/MockToken.js.map +0 -1
  232. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  233. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  234. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  235. package/dist/esm/contracts/WeETH.d.ts +0 -503
  236. package/dist/esm/contracts/WeETH.js +0 -2
  237. package/dist/esm/contracts/WeETH.js.map +0 -1
  238. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  239. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  240. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  241. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  242. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  243. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  244. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  245. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  246. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  247. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  248. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  249. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  250. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  251. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  252. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  253. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  254. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  255. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  256. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  257. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  258. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  259. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  260. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  261. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  262. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  263. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  264. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  265. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  266. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  267. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  268. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  269. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  270. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  271. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  272. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  273. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  274. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  275. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  276. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  277. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  278. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  279. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  280. package/dist/esm/contracts/lean0/index.js +0 -2
  281. package/dist/esm/contracts/lean0/index.js.map +0 -1
  282. package/src/abi-zkevm/IPerpetualManager.json +0 -5366
@@ -1,7 +1,8 @@
1
1
  import { BaseContract, Contract, Interface, Network, Overrides, Provider, Signer } from "ethers";
2
2
  import { LimitOrderBook, LimitOrderBookFactory, Multicall3 } from "./contracts";
3
+ import { IPerpetualManager } from "./contracts/IPerpetualManager";
3
4
  import { IClientOrder, IPerpetualOrder } from "./contracts/LimitOrderBook";
4
- import { TypeSafeOrder, type ClientOrder, type MarginAccount, type NodeSDKConfig, type Order, type PerpetualState, type PerpetualStaticInfo, type PoolStaticInfo, type PriceFeedSubmission, type SmartContractOrder, type PerpetualData, LiquidityPoolData, SettlementConfig } from "./nodeSDKTypes";
5
+ import { TypeSafeOrder, type ClientOrder, type MarginAccount, type NodeSDKConfig, type Order, type PerpetualState, type PerpetualStaticInfo, type PoolStaticInfo, type PriceFeedSubmission, type SmartContractOrder, type PerpetualData, LiquidityPoolData, SettlementConfig, IdxPriceInfo } from "./nodeSDKTypes";
5
6
  import PriceFeeds from "./priceFeeds";
6
7
  /**
7
8
  * Parent class for MarketData and WriteAccessHandler that handles
@@ -18,7 +19,7 @@ export default class PerpetualDataHandler {
18
19
  protected symbolToTokenAddrMap: Map<string, string>;
19
20
  chainId: bigint;
20
21
  network: Network;
21
- protected proxyContract: Contract | null;
22
+ protected proxyContract: IPerpetualManager | null;
22
23
  protected proxyABI: Interface;
23
24
  protected proxyAddr: string;
24
25
  protected oraclefactoryAddr: string | undefined;
@@ -176,7 +177,7 @@ export default class PerpetualDataHandler {
176
177
  * @param {Map<string, string>} symbolList mapping of symbols to convert long-format <-> blockchain-format
177
178
  * @returns array with PerpetualStaticInfo for each perpetual
178
179
  */
179
- static getPerpetualStaticInfo(_proxyContract: Contract, nestedPerpetualIDs: Array<Array<number>>, symbolList: Map<string, string>, overrides?: Overrides): Promise<Array<PerpetualStaticInfo>>;
180
+ static getPerpetualStaticInfo(_proxyContract: IPerpetualManager, nestedPerpetualIDs: Array<Array<number>>, symbolList: Map<string, string>, overrides?: Overrides): Promise<Array<PerpetualStaticInfo>>;
180
181
  /**
181
182
  * Breaks up an array of nested arrays into chunks of a specified size.
182
183
  * @param {number} chunkSize The size of each chunk.
@@ -192,7 +193,7 @@ export default class PerpetualDataHandler {
192
193
  * @param overrides optional
193
194
  * @returns array of PerpetualData converted into decimals
194
195
  */
195
- static _getLiquidityPools(fromIdx: number, toIdx: number, _proxyContract: Contract, _symbolList: Map<string, string>, overrides?: Overrides): Promise<LiquidityPoolData[]>;
196
+ static _getLiquidityPools(fromIdx: number, toIdx: number, _proxyContract: IPerpetualManager, _symbolList: Map<string, string>, overrides?: Overrides): Promise<LiquidityPoolData[]>;
196
197
  /**
197
198
  * Query perpetuals
198
199
  * @param ids perpetual ids
@@ -201,25 +202,25 @@ export default class PerpetualDataHandler {
201
202
  * @param overrides optional
202
203
  * @returns array of PerpetualData converted into decimals
203
204
  */
204
- static _getPerpetuals(ids: number[], _proxyContract: Contract, _symbolList: Map<string, string>, overrides?: Overrides): Promise<PerpetualData[]>;
205
- static getPoolStaticInfo(_proxyContract: Contract, overrides?: Overrides): Promise<{
205
+ static _getPerpetuals(ids: number[], _proxyContract: IPerpetualManager, _symbolList: Map<string, string>, overrides?: Overrides): Promise<PerpetualData[]>;
206
+ static getPoolStaticInfo(_proxyContract: IPerpetualManager, overrides?: Overrides): Promise<{
206
207
  nestedPerpetualIDs: Array<Array<number>>;
207
208
  poolShareTokenAddr: Array<string>;
208
209
  poolMarginTokenAddr: Array<string>;
209
210
  oracleFactory: string;
210
211
  }>;
211
- static buildMarginAccountFromState(symbol: string, traderState: bigint[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _pxS2S3: [number, number]): MarginAccount;
212
+ static buildMarginAccountFromState(symbol: string, traderState: bigint[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, pxInfo: IdxPriceInfo, isPredMkt: boolean): MarginAccount;
212
213
  /**
213
214
  * Get trader state from the blockchain and parse into a human-readable margin account
214
215
  * @param traderAddr Trader address
215
216
  * @param symbol Perpetual symbol
216
217
  * @param symbolToPerpStaticInfo Symbol to perp static info mapping
217
218
  * @param _proxyContract Proxy contract instance
218
- * @param _pxS2S3 Prices [S2, S3]
219
+ * @param _pxInfo index price info
219
220
  * @param overrides Optional overrides for eth_call
220
221
  * @returns A Margin account
221
222
  */
222
- static getMarginAccount(traderAddr: string, symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract, _pxS2S3: [number, number], overrides?: Overrides): Promise<MarginAccount>;
223
+ static getMarginAccount(traderAddr: string, symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract, _pxInfo: IdxPriceInfo, isPredMkt: boolean, overrides?: Overrides): Promise<MarginAccount>;
223
224
  /**
224
225
  * All the orders in the order book for a given symbol that are currently open.
225
226
  * @param {string} symbol Symbol of the form ETH-USD-MATIC.
@@ -297,14 +298,24 @@ export default class PerpetualDataHandler {
297
298
  * @param symbolToPerpStaticInfo Symbol to perp static info mapping
298
299
  * @param _multicall Multicall3 contract instance
299
300
  * @param _proxyContract Proxy contract instance
300
- * @param _pxS2S3s List of price pairs, [[S2, S3] (1st perp), [S2, S3] (2nd perp), ... ]
301
+ * @param _pxInfo List of price info
301
302
  * @param overrides Optional eth_call overrides
302
303
  * @returns List of margin accounts
303
304
  */
304
- static getMarginAccounts(traderAddrs: string[], symbols: string[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _multicall: Multicall3, _proxyContract: Contract, _pxS2S3s: number[][], overrides?: Overrides): Promise<MarginAccount[]>;
305
- protected static _queryPerpetualPrice(symbol: string, tradeAmount: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract, indexPrices: [number, number], overrides?: Overrides): Promise<number>;
306
- protected static _queryPerpetualMarkPrice(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract, indexPrices: [number, number], overrides?: Overrides): Promise<number>;
307
- protected static _queryPerpetualState(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract, _multicall: Multicall3, indexPrices: [number, number, boolean, boolean], overrides?: Overrides): Promise<PerpetualState>;
305
+ static getMarginAccounts(traderAddrs: string[], symbols: string[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _multicall: Multicall3, _proxyContract: Contract, _pxInfo: IdxPriceInfo[], isPredMkt: boolean[], overrides?: Overrides): Promise<MarginAccount[]>;
306
+ protected static _queryPerpetualPrice(symbol: string, tradeAmount: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: IPerpetualManager, indexPrices: [number, number], conf: bigint, params: bigint, overrides?: Overrides): Promise<number>;
307
+ /**
308
+ *
309
+ * @param symbol perpetual symbol of the form BTC-USDC-USDC
310
+ * @param symbolToPerpStaticInfo mapping
311
+ * @param _proxyContract contract instance
312
+ * @param indexPrices IdxPriceInfo
313
+ * @param isPredMkt true if prediction market perpetual
314
+ * @param overrides
315
+ * @returns mark price
316
+ */
317
+ protected static _queryPerpetualMarkPrice(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: IPerpetualManager, indexPrices: IdxPriceInfo, isPredMkt: boolean, overrides?: Overrides): Promise<number>;
318
+ protected static _queryPerpetualState(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: IPerpetualManager, _multicall: Multicall3, indexPrices: IdxPriceInfo, overrides?: Overrides): Promise<PerpetualState>;
308
319
  /**
309
320
  * Calculate long and short exposures from open interest and long/short
310
321
  * @param oi open interest
@@ -312,7 +323,7 @@ export default class PerpetualDataHandler {
312
323
  * @returns long, short exposure
313
324
  */
314
325
  protected static _oiAndAmmPosToLongShort(oi: bigint, ammPos: bigint): [bigint, bigint];
315
- protected static _parseAMMState(symbol: string, ammState: bigint[], longShort: [bigint, bigint], indexPrices: [number, number, boolean, boolean], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): PerpetualState;
326
+ protected static _parseAMMState(symbol: string, ammState: bigint[], longShort: [bigint, bigint], indexPrices: IdxPriceInfo, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): PerpetualState;
316
327
  /**
317
328
  * Liquidation price
318
329
  * @param symbol symbol of the form BTC-USD-MATIC
@@ -321,7 +332,7 @@ export default class PerpetualDataHandler {
321
332
  * @param symbolToPerpStaticInfo mapping symbol->PerpStaticInfo
322
333
  * @returns liquidation mark-price, corresponding collateral/quote conversion
323
334
  */
324
- protected static _calculateLiquidationPrice(symbol: string, traderState: bigint[], S2: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): [number, number, number, number, number];
335
+ protected static _calculateLiquidationPrice(symbol: string, traderState: bigint[], S2: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, isPredMarket: boolean): [number, number, number, number, number];
325
336
  /**
326
337
  * Finds the perpetual id for a symbol of the form
327
338
  * <base>-<quote>-<collateral>. The function first converts the
@@ -484,5 +495,5 @@ export default class PerpetualDataHandler {
484
495
  * @param staticInfo Perpetual static info
485
496
  * @returns True if this is a prediction market
486
497
  */
487
- static isPredictionMarket(staticInfo: PerpetualStaticInfo): boolean;
498
+ static isPredictionMarketStatic(staticInfo: PerpetualStaticInfo): boolean;
488
499
  }
@@ -1,7 +1,7 @@
1
- import { Contract, JsonRpcProvider, Network, ZeroAddress, } from "ethers";
1
+ import { JsonRpcProvider, Network, ZeroAddress, } from "ethers";
2
2
  import { BUY_SIDE, CLOSED_SIDE, COLLATERAL_CURRENCY_BASE, COLLATERAL_CURRENCY_QUOTE, CollaterlCCY, DEFAULT_CONFIG, MASK_CLOSE_ONLY, MASK_KEEP_POS_LEVERAGE, MASK_LIMIT_ORDER, MASK_MARKET_ORDER, MASK_PREDICTION_MARKET, MASK_STOP_ORDER, MAX_64x64, MULTICALL_ADDRESS, ORDER_MAX_DURATION_SEC, ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET, ORDER_TYPE_STOP_LIMIT, ORDER_TYPE_STOP_MARKET, PERP_STATE_STR, SELL_SIDE, SYMBOL_LIST, ZERO_ADDRESS, ZERO_ORDER_ID, } from "./constants";
3
- import { ERC20__factory, LimitOrderBookFactory__factory, LimitOrderBook__factory, Multicall3__factory, OracleFactory__factory, } from "./contracts";
4
- import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, priceToProb, probToPrice, } from "./d8XMath";
3
+ import { ERC20__factory, IPerpetualManager__factory, LimitOrderBookFactory__factory, LimitOrderBook__factory, Multicall3__factory, OracleFactory__factory, } from "./contracts";
4
+ import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, priceToProb, probToPrice, pmFindLiquidationPrice, pmMaintenanceMarginRate, } from "./d8XMath";
5
5
  import PriceFeeds from "./priceFeeds";
6
6
  import { combineFlags, containsFlag, contractSymbolToSymbol, loadConfigAbis, symbol4BToLongSymbol, fromBytes4, to4Chars, } from "./utils";
7
7
  /**
@@ -60,7 +60,7 @@ export default class PerpetualDataHandler {
60
60
  if (network.chainId !== this.chainId) {
61
61
  throw new Error(`Provider: chain id ${network.chainId} does not match config (${this.chainId})`);
62
62
  }
63
- this.proxyContract = new Contract(this.proxyAddr, this.config.proxyABI, signerOrProvider);
63
+ this.proxyContract = IPerpetualManager__factory.connect(this.proxyAddr, signerOrProvider);
64
64
  this.multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, this.signerOrProvider);
65
65
  await this._fillSymbolMaps(overrides);
66
66
  }
@@ -646,7 +646,7 @@ export default class PerpetualDataHandler {
646
646
  oracleFactory: oracleFactory,
647
647
  };
648
648
  }
649
- static buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxS2S3) {
649
+ static buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, pxInfo, isPredMkt) {
650
650
  const idx_cash = 3;
651
651
  const idx_notional = 4;
652
652
  const idx_locked_in = 5;
@@ -657,7 +657,7 @@ export default class PerpetualDataHandler {
657
657
  let cash = ABK64x64ToFloat(traderState[idx_cash]);
658
658
  let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigInt(0), side = CLOSED_SIDE, entryPrice = 0;
659
659
  if (!isEmpty) {
660
- [S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, _pxS2S3[0], symbolToPerpStaticInfo);
660
+ [S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, pxInfo.s2, symbolToPerpStaticInfo, isPredMkt);
661
661
  fLockedIn = traderState[idx_locked_in];
662
662
  side = traderState[idx_notional] > 0n ? BUY_SIDE : SELL_SIDE;
663
663
  entryPrice = Math.abs(ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional])));
@@ -684,17 +684,17 @@ export default class PerpetualDataHandler {
684
684
  * @param symbol Perpetual symbol
685
685
  * @param symbolToPerpStaticInfo Symbol to perp static info mapping
686
686
  * @param _proxyContract Proxy contract instance
687
- * @param _pxS2S3 Prices [S2, S3]
687
+ * @param _pxInfo index price info
688
688
  * @param overrides Optional overrides for eth_call
689
689
  * @returns A Margin account
690
690
  */
691
- static async getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxS2S3, overrides) {
691
+ static async getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxInfo, isPredMkt, overrides) {
692
692
  let perpId = Number(symbol);
693
693
  if (isNaN(perpId)) {
694
694
  perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
695
695
  }
696
- let traderState = await _proxyContract.getTraderState(perpId, traderAddr, _pxS2S3.map((x) => floatToABK64x64(x)), overrides || {});
697
- return PerpetualDataHandler.buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxS2S3);
696
+ let traderState = await _proxyContract.getTraderState(perpId, traderAddr, [_pxInfo.ema, _pxInfo.s3 ?? 0].map((x) => floatToABK64x64(x)), overrides || {});
697
+ return PerpetualDataHandler.buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxInfo, isPredMkt);
698
698
  }
699
699
  /**
700
700
  * All the orders in the order book for a given symbol that are currently open.
@@ -848,15 +848,15 @@ export default class PerpetualDataHandler {
848
848
  * @param symbolToPerpStaticInfo Symbol to perp static info mapping
849
849
  * @param _multicall Multicall3 contract instance
850
850
  * @param _proxyContract Proxy contract instance
851
- * @param _pxS2S3s List of price pairs, [[S2, S3] (1st perp), [S2, S3] (2nd perp), ... ]
851
+ * @param _pxInfo List of price info
852
852
  * @param overrides Optional eth_call overrides
853
853
  * @returns List of margin accounts
854
854
  */
855
- static async getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxS2S3s, overrides) {
855
+ static async getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxInfo, isPredMkt, overrides) {
856
856
  if (traderAddrs.length != symbols.length ||
857
- traderAddrs.length != _pxS2S3s.length ||
858
- symbols.length != _pxS2S3s.length) {
859
- throw new Error("traderAddr, symbol and pxS2S3 should all have the same length");
857
+ traderAddrs.length != _pxInfo.length ||
858
+ symbols.length != _pxInfo.length) {
859
+ throw new Error("traderAddr, symbol and _pxInfo should all have the same length");
860
860
  }
861
861
  const proxyCalls = traderAddrs.map((_addr, i) => ({
862
862
  target: _proxyContract.target,
@@ -864,7 +864,7 @@ export default class PerpetualDataHandler {
864
864
  callData: _proxyContract.interface.encodeFunctionData("getTraderState", [
865
865
  PerpetualDataHandler.symbolToPerpetualId(symbols[i], symbolToPerpStaticInfo),
866
866
  _addr,
867
- _pxS2S3s[i].map((x) => floatToABK64x64(x)),
867
+ [_pxInfo[i].ema, _pxInfo[i].s3 ?? 0].map((x) => floatToABK64x64(x)),
868
868
  ]),
869
869
  }));
870
870
  const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
@@ -873,33 +873,42 @@ export default class PerpetualDataHandler {
873
873
  throw new Error(`Failed to get perp info for ${symbols[i]}`);
874
874
  return _proxyContract.interface.decodeFunctionResult("getTraderState", returnData)[0];
875
875
  });
876
- return traderStates.map((traderState, i) => PerpetualDataHandler.buildMarginAccountFromState(symbols[i], traderState, symbolToPerpStaticInfo, [
877
- _pxS2S3s[i][0],
878
- _pxS2S3s[i][1],
879
- ]));
876
+ return traderStates.map((traderState, i) => PerpetualDataHandler.buildMarginAccountFromState(symbols[i], traderState, symbolToPerpStaticInfo, _pxInfo[i], isPredMkt[i]));
880
877
  }
881
- static async _queryPerpetualPrice(symbol, tradeAmount, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
878
+ static async _queryPerpetualPrice(symbol, tradeAmount, symbolToPerpStaticInfo, _proxyContract, indexPrices, conf, params, overrides) {
882
879
  let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
883
880
  let fIndexPrices = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
884
- let fPrice = await _proxyContract.queryPerpetualPrice(perpId, floatToABK64x64(tradeAmount), fIndexPrices, overrides || {});
881
+ let fPrice = await _proxyContract.queryPerpetualPrice(perpId, floatToABK64x64(tradeAmount), fIndexPrices, conf, params, overrides || {});
885
882
  return ABK64x64ToFloat(fPrice);
886
883
  }
887
- static async _queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
884
+ /**
885
+ *
886
+ * @param symbol perpetual symbol of the form BTC-USDC-USDC
887
+ * @param symbolToPerpStaticInfo mapping
888
+ * @param _proxyContract contract instance
889
+ * @param indexPrices IdxPriceInfo
890
+ * @param isPredMkt true if prediction market perpetual
891
+ * @param overrides
892
+ * @returns mark price
893
+ */
894
+ static async _queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, isPredMkt, overrides) {
888
895
  let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
889
- let [S2, S3] = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
896
+ let [S2, S3] = [indexPrices.s2, indexPrices.s3].map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
890
897
  let ammState = await _proxyContract.getAMMState(perpId, [S2, S3], overrides || {});
891
898
  // ammState[6] == S2 == indexPrices[0] up to rounding errors (indexPrices is most accurate)
892
- return indexPrices[0] * (1 + ABK64x64ToFloat(ammState[8]));
899
+ if (isPredMkt) {
900
+ return indexPrices.ema + ABK64x64ToFloat(ammState[8]);
901
+ }
902
+ return indexPrices.s2 * (1 + ABK64x64ToFloat(ammState[8]));
893
903
  }
894
904
  static async _queryPerpetualState(symbol, symbolToPerpStaticInfo, _proxyContract, _multicall, indexPrices, overrides) {
895
905
  let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
896
906
  let staticInfo = symbolToPerpStaticInfo.get(symbol);
897
- let [S2, S3] = [indexPrices[0], indexPrices[1]];
898
907
  if (staticInfo.collateralCurrencyType == CollaterlCCY.BASE) {
899
- S3 = S2;
908
+ indexPrices.s3 = indexPrices.s2;
900
909
  }
901
910
  else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
902
- S3 = 1;
911
+ indexPrices.s3 = 1;
903
912
  }
904
913
  // multicall
905
914
  const proxyCalls = [
@@ -908,7 +917,7 @@ export default class PerpetualDataHandler {
908
917
  allowFailure: false,
909
918
  callData: _proxyContract.interface.encodeFunctionData("getAMMState", [
910
919
  perpId,
911
- [S2, S3].map(floatToABK64x64),
920
+ [indexPrices.s2, indexPrices.s3 ?? 0].map(floatToABK64x64),
912
921
  ]),
913
922
  },
914
923
  {
@@ -946,26 +955,36 @@ export default class PerpetualDataHandler {
946
955
  let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
947
956
  let staticInfo = symbolToPerpStaticInfo.get(symbol);
948
957
  let ccy = symbol.split("-");
949
- let [S2, S3] = [indexPrices[0], indexPrices[1]];
958
+ let [S2, S3] = [indexPrices.s2, indexPrices.s3];
950
959
  if (staticInfo.collateralCurrencyType == CollaterlCCY.BASE) {
951
960
  S3 = S2;
952
961
  }
953
962
  else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
954
963
  S3 = 1;
955
964
  }
956
- let markPrice = S2 * (1 + ABK64x64ToFloat(ammState[8]));
965
+ const isPred = PerpetualDataHandler.isPredictionMarketStatic(staticInfo);
966
+ let markPrice;
967
+ if (isPred) {
968
+ // ema + premium
969
+ markPrice = indexPrices.ema + ABK64x64ToFloat(ammState[8]);
970
+ }
971
+ else {
972
+ // S2 * (1+premium)
973
+ markPrice = indexPrices.s2 * (1 + ABK64x64ToFloat(ammState[8]));
974
+ }
957
975
  let state = {
958
976
  id: perpId,
959
977
  state: PERP_STATE_STR[Number(ammState[13])],
960
978
  baseCurrency: ccy[0],
961
979
  quoteCurrency: ccy[1],
962
980
  indexPrice: S2,
963
- collToQuoteIndexPrice: S3,
981
+ collToQuoteIndexPrice: S3 ?? (ccy[0] === ccy[1] ? S2 : 1),
982
+ markPremium: ABK64x64ToFloat(ammState[8]),
964
983
  markPrice: markPrice,
965
984
  midPrice: ABK64x64ToFloat(ammState[10]),
966
985
  currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
967
986
  openInterestBC: ABK64x64ToFloat(ammState[11]),
968
- isMarketClosed: indexPrices[2] || indexPrices[3],
987
+ isMarketClosed: indexPrices.s2MktClosed || (indexPrices.s3MktClosed !== undefined && indexPrices.s3MktClosed),
969
988
  longBC: ABK64x64ToFloat(longShort[0]),
970
989
  shortBC: ABK64x64ToFloat(longShort[1]),
971
990
  };
@@ -979,7 +998,7 @@ export default class PerpetualDataHandler {
979
998
  * @param symbolToPerpStaticInfo mapping symbol->PerpStaticInfo
980
999
  * @returns liquidation mark-price, corresponding collateral/quote conversion
981
1000
  */
982
- static _calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo) {
1001
+ static _calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo, isPredMarket) {
983
1002
  const idx_availableCashCC = 2;
984
1003
  const idx_cash = 3;
985
1004
  const idx_notional = 4;
@@ -993,13 +1012,21 @@ export default class PerpetualDataHandler {
993
1012
  if (perpInfo == undefined) {
994
1013
  throw new Error(`no info for perpetual ${symbol}`);
995
1014
  }
996
- let tau = perpInfo.maintenanceMarginRate;
997
- let lockedInValueQC = ABK64x64ToFloat(traderState[idx_locked_in]);
998
- let position = ABK64x64ToFloat(traderState[idx_notional]);
999
- let cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
1000
- let Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
1001
- let unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC] - traderState[idx_cash]);
1015
+ const tau = perpInfo.maintenanceMarginRate;
1016
+ const lockedInValueQC = ABK64x64ToFloat(traderState[idx_locked_in]);
1017
+ const position = ABK64x64ToFloat(traderState[idx_notional]);
1018
+ const cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
1019
+ const Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
1020
+ const unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC] - traderState[idx_cash]);
1002
1021
  let unpaidFunding = unpaidFundingCC;
1022
+ if (isPredMarket) {
1023
+ const S2Liq = pmFindLiquidationPrice(position, S3Liq, lockedInValueQC, cashCC, tau, S2);
1024
+ let pnl = position * Sm - lockedInValueQC + unpaidFunding / S3Liq;
1025
+ // liquidation margin rate
1026
+ const tauLiq = pmMaintenanceMarginRate(position, S2Liq, tau);
1027
+ return [S2Liq, S3Liq, tauLiq, pnl, unpaidFundingCC];
1028
+ }
1029
+ // regular perpetuals:
1003
1030
  if (perpInfo.collateralCurrencyType == CollaterlCCY.BASE) {
1004
1031
  S2Liq = calculateLiquidationPriceCollateralBase(lockedInValueQC, position, cashCC, tau);
1005
1032
  S3Liq = S2Liq;
@@ -1087,7 +1114,7 @@ export default class PerpetualDataHandler {
1087
1114
  }
1088
1115
  // adjust prices for market type
1089
1116
  const sInfo = symbolToPerpInfoMap.get(symbol);
1090
- if (PerpetualDataHandler.isPredictionMarket(sInfo)) {
1117
+ if (PerpetualDataHandler.isPredictionMarketStatic(sInfo)) {
1091
1118
  limitPrice = limitPrice !== undefined && limitPrice !== 0 ? priceToProb(limitPrice) : limitPrice;
1092
1119
  stopPrice = stopPrice !== undefined && stopPrice !== 0 ? priceToProb(stopPrice) : stopPrice;
1093
1120
  }
@@ -1106,9 +1133,9 @@ export default class PerpetualDataHandler {
1106
1133
  leverage: Number(order.leverageTDR) / 100,
1107
1134
  deadline: Number(order.iDeadline),
1108
1135
  executionTimestamp: Number(order.executionTimestamp),
1109
- submittedTimestamp: order["submittedTimestamp"] ? Number(order["submittedTimestamp"]) : undefined,
1110
- parentChildOrderIds: order["parentChildDigest1"] && order["parentChildDigest2"]
1111
- ? [order["parentChildDigest1"].toString(), order["parentChildDigest2"].toString()]
1136
+ submittedTimestamp: "submittedTimestamp" in order ? Number(order.submittedTimestamp) : undefined,
1137
+ parentChildOrderIds: "parentChildDigest1" && "parentChildDigest2" in order
1138
+ ? [order.parentChildDigest1.toString(), order.parentChildDigest2.toString()]
1112
1139
  : undefined,
1113
1140
  };
1114
1141
  return userOrder;
@@ -1137,7 +1164,7 @@ export default class PerpetualDataHandler {
1137
1164
  else {
1138
1165
  throw Error(`invalid side in order spec, use ${BUY_SIDE} or ${SELL_SIDE}`);
1139
1166
  }
1140
- const isPred = PerpetualDataHandler.isPredictionMarket(perpStaticInfo.get(order.symbol));
1167
+ const isPred = PerpetualDataHandler.isPredictionMarketStatic(perpStaticInfo.get(order.symbol));
1141
1168
  let fLimitPrice;
1142
1169
  if (order.limitPrice == undefined) {
1143
1170
  // we need to set the limit price to infinity or zero for
@@ -1612,15 +1639,14 @@ export default class PerpetualDataHandler {
1612
1639
  if (staticInfo == undefined) {
1613
1640
  throw new Error(`Perpetual with symbol ${symbol} not found. Check symbol or use createProxyInstance().`);
1614
1641
  }
1615
- return PerpetualDataHandler.isPredictionMarket(staticInfo);
1642
+ return PerpetualDataHandler.isPredictionMarketStatic(staticInfo);
1616
1643
  }
1617
1644
  /**
1618
1645
  * Determines whether a given perpetual represents a prediction market
1619
1646
  * @param staticInfo Perpetual static info
1620
1647
  * @returns True if this is a prediction market
1621
1648
  */
1622
- static isPredictionMarket(staticInfo) {
1623
- // return true; // for testing
1649
+ static isPredictionMarketStatic(staticInfo) {
1624
1650
  return containsFlag(staticInfo.perpFlags, MASK_PREDICTION_MARKET);
1625
1651
  }
1626
1652
  }