@d8x/perpetuals-sdk 1.3.7 → 2.0.1-alpha

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 (286) hide show
  1. package/dist/cjs/accountTrade.d.ts +9 -9
  2. package/dist/cjs/accountTrade.js +19 -17
  3. package/dist/cjs/accountTrade.js.map +1 -1
  4. package/dist/cjs/brokerTool.d.ts +11 -12
  5. package/dist/cjs/brokerTool.js +7 -8
  6. package/dist/cjs/brokerTool.js.map +1 -1
  7. package/dist/cjs/config/priceFeedConfig.json +16 -2
  8. package/dist/cjs/config/symbolList.json +2 -1
  9. package/dist/cjs/constants.d.ts +12 -12
  10. package/dist/cjs/constants.js +14 -14
  11. package/dist/cjs/constants.js.map +1 -1
  12. package/dist/cjs/contracts/ERC20.d.ts +146 -171
  13. package/dist/cjs/contracts/IPerpetualManager.d.ts +2534 -2225
  14. package/dist/cjs/contracts/IPyth.d.ts +181 -184
  15. package/dist/cjs/contracts/LimitOrderBook.d.ts +373 -401
  16. package/dist/cjs/contracts/LimitOrderBookBeacon.d.ts +53 -104
  17. package/dist/cjs/contracts/LimitOrderBookFactory.d.ts +129 -185
  18. package/dist/cjs/contracts/MockTokenSwap.d.ts +109 -169
  19. package/dist/cjs/contracts/Multicall3.d.ts +147 -211
  20. package/dist/cjs/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
  21. package/dist/cjs/contracts/OracleFactory.d.ts +258 -238
  22. package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +1099 -891
  23. package/dist/cjs/contracts/RedStoneAbi.d.ts +369 -488
  24. package/dist/cjs/contracts/ShareToken.d.ts +232 -285
  25. package/dist/cjs/contracts/common.d.ts +40 -11
  26. package/dist/cjs/contracts/factories/ERC20__factory.d.ts +2 -3
  27. package/dist/cjs/contracts/factories/ERC20__factory.js +3 -3
  28. package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
  29. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
  30. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +3 -3
  31. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  32. package/dist/cjs/contracts/factories/IPyth__factory.d.ts +2 -3
  33. package/dist/cjs/contracts/factories/IPyth__factory.js +3 -3
  34. package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -1
  35. package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
  36. package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js +3 -3
  37. package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
  38. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
  39. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +3 -3
  40. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  41. package/dist/cjs/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
  42. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +3 -3
  43. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  44. package/dist/cjs/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
  45. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +3 -3
  46. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  47. package/dist/cjs/contracts/factories/Multicall3__factory.d.ts +11 -9
  48. package/dist/cjs/contracts/factories/Multicall3__factory.js +7 -10
  49. package/dist/cjs/contracts/factories/Multicall3__factory.js.map +1 -1
  50. package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
  51. package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js +3 -3
  52. package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
  53. package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +2 -3
  54. package/dist/cjs/contracts/factories/OracleFactory__factory.js +3 -3
  55. package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
  56. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
  57. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +3 -3
  58. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  59. package/dist/cjs/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
  60. package/dist/cjs/contracts/factories/RedStoneAbi__factory.js +3 -3
  61. package/dist/cjs/contracts/factories/RedStoneAbi__factory.js.map +1 -1
  62. package/dist/cjs/contracts/factories/ShareToken__factory.d.ts +2 -3
  63. package/dist/cjs/contracts/factories/ShareToken__factory.js +3 -3
  64. package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
  65. package/dist/cjs/d8XMath.d.ts +28 -16
  66. package/dist/cjs/d8XMath.js +70 -50
  67. package/dist/cjs/d8XMath.js.map +1 -1
  68. package/dist/cjs/liquidatorTool.d.ts +8 -8
  69. package/dist/cjs/liquidatorTool.js +5 -7
  70. package/dist/cjs/liquidatorTool.js.map +1 -1
  71. package/dist/cjs/liquidityProviderTool.d.ts +4 -5
  72. package/dist/cjs/liquidityProviderTool.js.map +1 -1
  73. package/dist/cjs/marketData.d.ts +27 -28
  74. package/dist/cjs/marketData.js +65 -69
  75. package/dist/cjs/marketData.js.map +1 -1
  76. package/dist/cjs/nodeSDKTypes.d.ts +35 -37
  77. package/dist/cjs/onChainPxFeed.d.ts +2 -2
  78. package/dist/cjs/onChainPxFeed.js +3 -3
  79. package/dist/cjs/onChainPxFeed.js.map +1 -1
  80. package/dist/cjs/onChainPxFeedAngle.d.ts +2 -2
  81. package/dist/cjs/onChainPxFeedAngle.js +4 -5
  82. package/dist/cjs/onChainPxFeedAngle.js.map +1 -1
  83. package/dist/cjs/onChainPxFeedRedStone.js +2 -2
  84. package/dist/cjs/onChainPxFeedRedStone.js.map +1 -1
  85. package/dist/cjs/orderExecutorTool.d.ts +7 -9
  86. package/dist/cjs/orderExecutorTool.js +52 -62
  87. package/dist/cjs/orderExecutorTool.js.map +1 -1
  88. package/dist/cjs/perpetualDataHandler.d.ts +44 -35
  89. package/dist/cjs/perpetualDataHandler.js +194 -170
  90. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  91. package/dist/cjs/perpetualEventHandler.d.ts +4 -5
  92. package/dist/cjs/perpetualEventHandler.js +2 -2
  93. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  94. package/dist/cjs/polyMktsPxFeed.d.ts +14 -0
  95. package/dist/cjs/polyMktsPxFeed.js +59 -0
  96. package/dist/cjs/polyMktsPxFeed.js.map +1 -0
  97. package/dist/cjs/priceFeeds.d.ts +2 -0
  98. package/dist/cjs/priceFeeds.js +44 -9
  99. package/dist/cjs/priceFeeds.js.map +1 -1
  100. package/dist/cjs/referralCodeSigner.d.ts +1 -1
  101. package/dist/cjs/referralCodeSigner.js +12 -16
  102. package/dist/cjs/referralCodeSigner.js.map +1 -1
  103. package/dist/cjs/traderDigests.d.ts +2 -1
  104. package/dist/cjs/traderDigests.js +9 -11
  105. package/dist/cjs/traderDigests.js.map +1 -1
  106. package/dist/cjs/traderInterface.d.ts +8 -9
  107. package/dist/cjs/traderInterface.js +40 -23
  108. package/dist/cjs/traderInterface.js.map +1 -1
  109. package/dist/cjs/utils.d.ts +2 -3
  110. package/dist/cjs/utils.js +1 -2
  111. package/dist/cjs/utils.js.map +1 -1
  112. package/dist/cjs/version.d.ts +1 -1
  113. package/dist/cjs/version.js +1 -1
  114. package/dist/cjs/version.js.map +1 -1
  115. package/dist/cjs/writeAccessHandler.d.ts +7 -9
  116. package/dist/cjs/writeAccessHandler.js +13 -16
  117. package/dist/cjs/writeAccessHandler.js.map +1 -1
  118. package/dist/esm/accountTrade.d.ts +9 -9
  119. package/dist/esm/accountTrade.js +19 -17
  120. package/dist/esm/accountTrade.js.map +1 -1
  121. package/dist/esm/brokerTool.d.ts +11 -12
  122. package/dist/esm/brokerTool.js +2 -3
  123. package/dist/esm/brokerTool.js.map +1 -1
  124. package/dist/esm/config/priceFeedConfig.json +16 -2
  125. package/dist/esm/config/symbolList.json +2 -1
  126. package/dist/esm/constants.d.ts +12 -12
  127. package/dist/esm/constants.js +13 -13
  128. package/dist/esm/constants.js.map +1 -1
  129. package/dist/esm/contracts/ERC20.d.ts +146 -171
  130. package/dist/esm/contracts/IPerpetualManager.d.ts +2534 -2225
  131. package/dist/esm/contracts/IPyth.d.ts +181 -184
  132. package/dist/esm/contracts/LimitOrderBook.d.ts +373 -401
  133. package/dist/esm/contracts/LimitOrderBookBeacon.d.ts +53 -104
  134. package/dist/esm/contracts/LimitOrderBookFactory.d.ts +129 -185
  135. package/dist/esm/contracts/MockTokenSwap.d.ts +109 -169
  136. package/dist/esm/contracts/Multicall3.d.ts +147 -211
  137. package/dist/esm/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
  138. package/dist/esm/contracts/OracleFactory.d.ts +258 -238
  139. package/dist/esm/contracts/PerpetualManagerProxy.d.ts +1099 -891
  140. package/dist/esm/contracts/RedStoneAbi.d.ts +369 -488
  141. package/dist/esm/contracts/ShareToken.d.ts +232 -285
  142. package/dist/esm/contracts/common.d.ts +40 -11
  143. package/dist/esm/contracts/factories/ERC20__factory.d.ts +2 -3
  144. package/dist/esm/contracts/factories/ERC20__factory.js +4 -4
  145. package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
  146. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
  147. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +4 -4
  148. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  149. package/dist/esm/contracts/factories/IPyth__factory.d.ts +2 -3
  150. package/dist/esm/contracts/factories/IPyth__factory.js +4 -4
  151. package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -1
  152. package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
  153. package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js +4 -4
  154. package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
  155. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
  156. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +4 -4
  157. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  158. package/dist/esm/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
  159. package/dist/esm/contracts/factories/LimitOrderBook__factory.js +4 -4
  160. package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  161. package/dist/esm/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
  162. package/dist/esm/contracts/factories/MockTokenSwap__factory.js +4 -4
  163. package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  164. package/dist/esm/contracts/factories/Multicall3__factory.d.ts +11 -9
  165. package/dist/esm/contracts/factories/Multicall3__factory.js +8 -11
  166. package/dist/esm/contracts/factories/Multicall3__factory.js.map +1 -1
  167. package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
  168. package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js +4 -4
  169. package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
  170. package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +2 -3
  171. package/dist/esm/contracts/factories/OracleFactory__factory.js +4 -4
  172. package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
  173. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
  174. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +4 -4
  175. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  176. package/dist/esm/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
  177. package/dist/esm/contracts/factories/RedStoneAbi__factory.js +4 -4
  178. package/dist/esm/contracts/factories/RedStoneAbi__factory.js.map +1 -1
  179. package/dist/esm/contracts/factories/ShareToken__factory.d.ts +2 -3
  180. package/dist/esm/contracts/factories/ShareToken__factory.js +4 -4
  181. package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
  182. package/dist/esm/d8XMath.d.ts +28 -16
  183. package/dist/esm/d8XMath.js +67 -49
  184. package/dist/esm/d8XMath.js.map +1 -1
  185. package/dist/esm/liquidatorTool.d.ts +8 -8
  186. package/dist/esm/liquidatorTool.js +5 -7
  187. package/dist/esm/liquidatorTool.js.map +1 -1
  188. package/dist/esm/liquidityProviderTool.d.ts +4 -5
  189. package/dist/esm/liquidityProviderTool.js.map +1 -1
  190. package/dist/esm/marketData.d.ts +27 -28
  191. package/dist/esm/marketData.js +55 -59
  192. package/dist/esm/marketData.js.map +1 -1
  193. package/dist/esm/nodeSDKTypes.d.ts +35 -37
  194. package/dist/esm/onChainPxFeed.d.ts +2 -2
  195. package/dist/esm/onChainPxFeed.js +3 -3
  196. package/dist/esm/onChainPxFeed.js.map +1 -1
  197. package/dist/esm/onChainPxFeedAngle.d.ts +2 -2
  198. package/dist/esm/onChainPxFeedAngle.js +2 -3
  199. package/dist/esm/onChainPxFeedAngle.js.map +1 -1
  200. package/dist/esm/onChainPxFeedRedStone.js +1 -1
  201. package/dist/esm/onChainPxFeedRedStone.js.map +1 -1
  202. package/dist/esm/orderExecutorTool.d.ts +7 -9
  203. package/dist/esm/orderExecutorTool.js +38 -48
  204. package/dist/esm/orderExecutorTool.js.map +1 -1
  205. package/dist/esm/perpetualDataHandler.d.ts +44 -35
  206. package/dist/esm/perpetualDataHandler.js +137 -113
  207. package/dist/esm/perpetualDataHandler.js.map +1 -1
  208. package/dist/esm/perpetualEventHandler.d.ts +4 -5
  209. package/dist/esm/perpetualEventHandler.js +2 -2
  210. package/dist/esm/perpetualEventHandler.js.map +1 -1
  211. package/dist/esm/polyMktsPxFeed.d.ts +14 -0
  212. package/dist/esm/polyMktsPxFeed.js +56 -0
  213. package/dist/esm/polyMktsPxFeed.js.map +1 -0
  214. package/dist/esm/priceFeeds.d.ts +2 -0
  215. package/dist/esm/priceFeeds.js +44 -9
  216. package/dist/esm/priceFeeds.js.map +1 -1
  217. package/dist/esm/referralCodeSigner.d.ts +1 -1
  218. package/dist/esm/referralCodeSigner.js +6 -10
  219. package/dist/esm/referralCodeSigner.js.map +1 -1
  220. package/dist/esm/traderDigests.d.ts +2 -1
  221. package/dist/esm/traderDigests.js +2 -4
  222. package/dist/esm/traderDigests.js.map +1 -1
  223. package/dist/esm/traderInterface.d.ts +8 -9
  224. package/dist/esm/traderInterface.js +42 -25
  225. package/dist/esm/traderInterface.js.map +1 -1
  226. package/dist/esm/utils.d.ts +2 -3
  227. package/dist/esm/utils.js +1 -2
  228. package/dist/esm/utils.js.map +1 -1
  229. package/dist/esm/version.d.ts +1 -1
  230. package/dist/esm/version.js +1 -1
  231. package/dist/esm/version.js.map +1 -1
  232. package/dist/esm/writeAccessHandler.d.ts +7 -9
  233. package/dist/esm/writeAccessHandler.js +5 -8
  234. package/dist/esm/writeAccessHandler.js.map +1 -1
  235. package/package.json +7 -17
  236. package/src/accountTrade.ts +32 -34
  237. package/src/brokerTool.ts +17 -20
  238. package/src/config/priceFeedConfig.json +16 -2
  239. package/src/config/symbolList.json +2 -1
  240. package/src/constants.ts +13 -13
  241. package/src/contracts/ERC20.ts +236 -350
  242. package/src/contracts/IPerpetualManager.ts +3359 -5050
  243. package/src/contracts/IPyth.ts +272 -409
  244. package/src/contracts/LimitOrderBook.ts +503 -779
  245. package/src/contracts/LimitOrderBookBeacon.ts +123 -171
  246. package/src/contracts/LimitOrderBookFactory.ts +263 -332
  247. package/src/contracts/MockTokenSwap.ts +237 -275
  248. package/src/contracts/Multicall3.ts +208 -374
  249. package/src/contracts/OnDemandOracleUpgradeable.ts +569 -782
  250. package/src/contracts/OracleFactory.ts +410 -538
  251. package/src/contracts/PerpetualManagerProxy.ts +1898 -1426
  252. package/src/contracts/RedStoneAbi.ts +486 -986
  253. package/src/contracts/ShareToken.ts +376 -557
  254. package/src/contracts/common.ts +108 -21
  255. package/src/contracts/factories/ERC20__factory.ts +4 -5
  256. package/src/contracts/factories/IPerpetualManager__factory.ts +4 -5
  257. package/src/contracts/factories/IPyth__factory.ts +4 -5
  258. package/src/contracts/factories/LimitOrderBookBeacon__factory.ts +5 -6
  259. package/src/contracts/factories/LimitOrderBookFactory__factory.ts +5 -6
  260. package/src/contracts/factories/LimitOrderBook__factory.ts +4 -5
  261. package/src/contracts/factories/MockTokenSwap__factory.ts +4 -5
  262. package/src/contracts/factories/Multicall3__factory.ts +21 -19
  263. package/src/contracts/factories/OnDemandOracleUpgradeable__factory.ts +5 -6
  264. package/src/contracts/factories/OracleFactory__factory.ts +4 -5
  265. package/src/contracts/factories/PerpetualManagerProxy__factory.ts +5 -6
  266. package/src/contracts/factories/RedStoneAbi__factory.ts +4 -8
  267. package/src/contracts/factories/ShareToken__factory.ts +4 -8
  268. package/src/d8XMath.ts +78 -57
  269. package/src/liquidatorTool.ts +12 -15
  270. package/src/liquidityProviderTool.ts +7 -5
  271. package/src/marketData.ts +110 -121
  272. package/src/nodeSDKTypes.ts +51 -38
  273. package/src/onChainPxFeed.ts +4 -4
  274. package/src/onChainPxFeedAngle.ts +5 -7
  275. package/src/onChainPxFeedRedStone.ts +1 -3
  276. package/src/orderExecutorTool.ts +100 -108
  277. package/src/perpetualDataHandler.ts +209 -172
  278. package/src/perpetualEventHandler.ts +16 -17
  279. package/src/polyMktsPxFeed.ts +71 -0
  280. package/src/priceFeeds.ts +46 -10
  281. package/src/referralCodeSigner.ts +6 -10
  282. package/src/traderDigests.ts +8 -5
  283. package/src/traderInterface.ts +61 -33
  284. package/src/utils.ts +3 -4
  285. package/src/version.ts +1 -1
  286. package/src/writeAccessHandler.ts +26 -17
@@ -1,12 +1,7 @@
1
- import { FormatTypes, Interface } from "@ethersproject/abi";
2
- import { Signer } from "@ethersproject/abstract-signer";
3
- import { BigNumber } from "@ethersproject/bignumber";
4
- import { AddressZero } from "@ethersproject/constants";
5
- import { Contract } from "@ethersproject/contracts";
6
- import { StaticJsonRpcProvider } from "@ethersproject/providers";
7
- import { BUY_SIDE, CLOSED_SIDE, COLLATERAL_CURRENCY_BASE, COLLATERAL_CURRENCY_QUOTE, CollaterlCCY, DEFAULT_CONFIG, ERC20_ABI, MASK_CLOSE_ONLY, MASK_KEEP_POS_LEVERAGE, MASK_LIMIT_ORDER, MASK_MARKET_ORDER, 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";
8
- import { LimitOrderBookFactory__factory, LimitOrderBook__factory, Multicall3__factory, OracleFactory__factory, } from "./contracts";
9
- import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, } from "./d8XMath";
1
+ import { Contract, JsonRpcProvider, Network, ZeroAddress, } from "ethers";
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_PREDICTIVE_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";
10
5
  import PriceFeeds from "./priceFeeds";
11
6
  import { combineFlags, containsFlag, contractSymbolToSymbol, loadConfigAbis, symbol4BToLongSymbol, fromBytes4, to4Chars, } from "./utils";
12
7
  /**
@@ -35,7 +30,8 @@ export default class PerpetualDataHandler {
35
30
  this.symbolToTokenAddrMap = new Map();
36
31
  this.perpetualIdToSymbol = new Map();
37
32
  this.nestedPerpetualIDs = new Array();
38
- this.chainId = config.chainId;
33
+ this.chainId = BigInt(config.chainId);
34
+ this.network = new Network(config.name || "", this.chainId);
39
35
  this.proxyAddr = config.proxyAddr;
40
36
  this.nodeURL = config.nodeURL;
41
37
  this.proxyABI = config.proxyABI;
@@ -50,11 +46,11 @@ export default class PerpetualDataHandler {
50
46
  // check network
51
47
  let network;
52
48
  try {
53
- if (signerOrProvider instanceof Signer) {
49
+ if (signerOrProvider.provider) {
54
50
  network = await signerOrProvider.provider.getNetwork();
55
51
  }
56
52
  else {
57
- network = await signerOrProvider.getNetwork();
53
+ throw new Error("Signer has no provider"); // TODO: check
58
54
  }
59
55
  }
60
56
  catch (error) {
@@ -73,14 +69,22 @@ export default class PerpetualDataHandler {
73
69
  * @param symbol symbol of the form ETH-USD-MATIC
74
70
  * @returns order book contract for the perpetual
75
71
  */
76
- getOrderBookContract(symbol, provider) {
72
+ getOrderBookContract(symbol, signerOrProvider) {
77
73
  let orderBookAddr = this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
78
- if (orderBookAddr == "" || orderBookAddr == undefined || this.signerOrProvider == null) {
74
+ if (orderBookAddr == "" || orderBookAddr == undefined) {
79
75
  throw Error(`no limit order book found for ${symbol} or no signer`);
80
76
  }
81
- let lobContract = LimitOrderBook__factory.connect(orderBookAddr, provider ?? this.signerOrProvider);
77
+ let lobContract = LimitOrderBook__factory.connect(orderBookAddr, signerOrProvider ?? this.signerOrProvider);
82
78
  return lobContract;
83
79
  }
80
+ /**
81
+ * Returns the order-book contract for the symbol if found or fails
82
+ * @param symbol symbol of the form ETH-USD-MATIC
83
+ * @returns order book contract for the perpetual
84
+ */
85
+ getOrderBookAddress(symbol) {
86
+ return this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
87
+ }
84
88
  /**
85
89
  * Get perpetuals for the given ids from onchain
86
90
  * @param ids perpetual ids
@@ -118,7 +122,7 @@ export default class PerpetualDataHandler {
118
122
  const tokenOverrides = require("./config/tokenOverrides.json");
119
123
  let poolInfo = await PerpetualDataHandler.getPoolStaticInfo(this.proxyContract, overrides);
120
124
  this.nestedPerpetualIDs = poolInfo.nestedPerpetualIDs;
121
- const IERC20 = new Interface(ERC20_ABI);
125
+ const IERC20 = ERC20__factory.createInterface();
122
126
  const proxyCalls = poolInfo.poolMarginTokenAddr.map((tokenAddr) => ({
123
127
  target: tokenAddr,
124
128
  allowFailure: false,
@@ -135,7 +139,7 @@ export default class PerpetualDataHandler {
135
139
  callData: this.proxyContract.interface.encodeFunctionData("getOracleFactory"),
136
140
  });
137
141
  // multicall
138
- const encodedResults = await this.multicall.callStatic.aggregate3(proxyCalls, overrides || {});
142
+ const encodedResults = await this.multicall.aggregate3.staticCall(proxyCalls, overrides || {});
139
143
  // decimals
140
144
  for (let j = 0; j < poolInfo.nestedPerpetualIDs.length; j++) {
141
145
  const decimals = IERC20.decodeFunctionResult("decimals", encodedResults[j].returnData)[0];
@@ -143,13 +147,13 @@ export default class PerpetualDataHandler {
143
147
  poolId: j + 1,
144
148
  poolMarginSymbol: "",
145
149
  poolMarginTokenAddr: poolInfo.poolMarginTokenAddr[j],
146
- poolMarginTokenDecimals: decimals,
150
+ poolMarginTokenDecimals: Number(decimals),
147
151
  poolSettleSymbol: "",
148
152
  poolSettleTokenAddr: poolInfo.poolMarginTokenAddr[j],
149
- poolSettleTokenDecimals: decimals,
153
+ poolSettleTokenDecimals: Number(decimals),
150
154
  shareTokenAddr: poolInfo.poolShareTokenAddr[j],
151
155
  oracleFactoryAddr: poolInfo.oracleFactory,
152
- isRunning: poolInfo.poolShareTokenAddr[j] != AddressZero,
156
+ isRunning: poolInfo.poolShareTokenAddr[j] != ZeroAddress,
153
157
  MgnToSettleTriangulation: ["*", "1"], // correct later
154
158
  };
155
159
  this.poolStaticInfos.push(info);
@@ -245,14 +249,12 @@ export default class PerpetualDataHandler {
245
249
  currPoolId = poolId;
246
250
  // We only assume the flag to be correct
247
251
  // in the first perpetual of the pool
248
- const flag = perpStaticInfos[j].perpFlags == undefined
249
- ? BigNumber.from(0)
250
- : BigNumber.from(perpStaticInfos[j].perpFlags.toString());
252
+ const flag = perpStaticInfos[j].perpFlags == undefined ? 0n : BigInt(perpStaticInfos[j].perpFlags.toString());
251
253
  // find settlement setting for this flag
252
254
  let s = undefined;
253
255
  for (let j = 0; j < this.settlementConfig.length; j++) {
254
- const masked = flag.and(BigNumber.from(this.settlementConfig[j].perpFlags.toString()));
255
- if (!masked.isZero()) {
256
+ const masked = flag & BigInt(this.settlementConfig[j].perpFlags.toString());
257
+ if (masked != 0n) {
256
258
  s = this.settlementConfig[j];
257
259
  break;
258
260
  }
@@ -451,7 +453,7 @@ export default class PerpetualDataHandler {
451
453
  // query blockchain in chunks
452
454
  const infoArr = new Array();
453
455
  for (let k = 0; k < ids.length; k++) {
454
- let perpInfos = await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {});
456
+ let perpInfos = (await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {}));
455
457
  for (let j = 0; j < perpInfos.length; j++) {
456
458
  let base = contractSymbolToSymbol(perpInfos[j].S2BaseCCY, symbolList);
457
459
  let quote = contractSymbolToSymbol(perpInfos[j].S2QuoteCCY, symbolList);
@@ -460,19 +462,19 @@ export default class PerpetualDataHandler {
460
462
  let sym2 = base + "-" + quote;
461
463
  let sym3 = base3 == "" ? "" : base3 + "-" + quote3;
462
464
  let info = {
463
- id: perpInfos[j].id,
464
- poolId: Math.floor(perpInfos[j].id / 100000),
465
+ id: Number(perpInfos[j].id),
466
+ poolId: Math.floor(Number(perpInfos[j].id) / 100000),
465
467
  limitOrderBookAddr: perpInfos[j].limitOrderBookAddr,
466
468
  initialMarginRate: ABDK29ToFloat(perpInfos[j].fInitialMarginRate),
467
469
  maintenanceMarginRate: ABDK29ToFloat(perpInfos[j].fMaintenanceMarginRate),
468
- collateralCurrencyType: perpInfos[j].collCurrencyType,
470
+ collateralCurrencyType: Number(perpInfos[j].collCurrencyType),
469
471
  S2Symbol: sym2,
470
472
  S3Symbol: sym3,
471
473
  lotSizeBC: ABK64x64ToFloat(perpInfos[j].fLotSizeBC),
472
474
  referralRebate: ABK64x64ToFloat(perpInfos[j].fReferralRebateCC),
473
475
  priceIds: perpInfos[j].priceIds,
474
476
  isPyth: perpInfos[j].isPyth,
475
- perpFlags: perpInfos[j].perpFlags,
477
+ perpFlags: BigInt(perpInfos[j].perpFlags.toString()),
476
478
  };
477
479
  infoArr.push(info);
478
480
  }
@@ -523,22 +525,22 @@ export default class PerpetualDataHandler {
523
525
  isRunning: orig.isRunning,
524
526
  iPerpetualCount: Number(orig.iPerpetualCount),
525
527
  id: Number(orig.id),
526
- fCeilPnLShare: ABK64x64ToFloat(BigNumber.from(orig.fCeilPnLShare)),
528
+ fCeilPnLShare: ABK64x64ToFloat(BigInt(orig.fCeilPnLShare)),
527
529
  marginTokenDecimals: Number(orig.marginTokenDecimals),
528
530
  iTargetPoolSizeUpdateTime: Number(orig.iTargetPoolSizeUpdateTime),
529
531
  marginTokenAddress: orig.marginTokenAddress,
530
532
  prevAnchor: Number(orig.prevAnchor),
531
- fRedemptionRate: ABK64x64ToFloat(BigNumber.from(orig.fRedemptionRate)),
533
+ fRedemptionRate: ABK64x64ToFloat(BigInt(orig.fRedemptionRate)),
532
534
  shareTokenAddress: orig.shareTokenAddress,
533
- fPnLparticipantsCashCC: ABK64x64ToFloat(BigNumber.from(orig.fPnLparticipantsCashCC)),
534
- fTargetAMMFundSize: ABK64x64ToFloat(BigNumber.from(orig.fTargetAMMFundSize)),
535
- fDefaultFundCashCC: ABK64x64ToFloat(BigNumber.from(orig.fDefaultFundCashCC)),
536
- fTargetDFSize: ABK64x64ToFloat(BigNumber.from(orig.fTargetDFSize)),
537
- fBrokerCollateralLotSize: ABK64x64ToFloat(BigNumber.from(orig.fBrokerCollateralLotSize)),
538
- prevTokenAmount: dec18ToFloat(BigNumber.from(orig.prevTokenAmount)),
539
- nextTokenAmount: dec18ToFloat(BigNumber.from(orig.nextTokenAmount)),
540
- totalSupplyShareToken: dec18ToFloat(BigNumber.from(orig.totalSupplyShareToken)),
541
- fBrokerFundCashCC: ABK64x64ToFloat(BigNumber.from(orig.fBrokerFundCashCC)), // state: amount of cash in broker fund
535
+ fPnLparticipantsCashCC: ABK64x64ToFloat(BigInt(orig.fPnLparticipantsCashCC)),
536
+ fTargetAMMFundSize: ABK64x64ToFloat(BigInt(orig.fTargetAMMFundSize)),
537
+ fDefaultFundCashCC: ABK64x64ToFloat(BigInt(orig.fDefaultFundCashCC)),
538
+ fTargetDFSize: ABK64x64ToFloat(BigInt(orig.fTargetDFSize)),
539
+ fBrokerCollateralLotSize: ABK64x64ToFloat(BigInt(orig.fBrokerCollateralLotSize)),
540
+ prevTokenAmount: dec18ToFloat(BigInt(orig.prevTokenAmount)),
541
+ nextTokenAmount: dec18ToFloat(BigInt(orig.nextTokenAmount)),
542
+ totalSupplyShareToken: dec18ToFloat(BigInt(orig.totalSupplyShareToken)),
543
+ fBrokerFundCashCC: ABK64x64ToFloat(BigInt(orig.fBrokerFundCashCC)), // state: amount of cash in broker fund
542
544
  };
543
545
  p.push(v);
544
546
  }
@@ -553,6 +555,7 @@ export default class PerpetualDataHandler {
553
555
  * @returns array of PerpetualData converted into decimals
554
556
  */
555
557
  static async _getPerpetuals(ids, _proxyContract, _symbolList, overrides) {
558
+ // TODO: can't be type safe here because proxyContract's abi is not static across chains (zkevm is the exception)
556
559
  const rawPerps = await _proxyContract.getPerpetuals(ids, overrides || {});
557
560
  let p = new Array();
558
561
  for (let k = 0; k < rawPerps.length; k++) {
@@ -576,44 +579,41 @@ export default class PerpetualDataHandler {
576
579
  fSigma3: ABDK29ToFloat(Number(orig.fSigma3)),
577
580
  fRho23: ABDK29ToFloat(Number(orig.fRho23)),
578
581
  liquidationPenaltyRateBps: Number(orig.liquidationPenaltyRateTbps) / 10,
579
- currentMarkPremiumRatePrice: ABK64x64ToFloat(BigNumber.from(orig.currentMarkPremiumRate.fPrice)),
582
+ currentMarkPremiumRatePrice: ABK64x64ToFloat(BigInt(orig.currentMarkPremiumRate.fPrice)),
580
583
  currentMarkPremiumRateTime: Number(orig.currentMarkPremiumRate.time),
581
- premiumRatesEMA: ABK64x64ToFloat(BigNumber.from(orig.premiumRatesEMA)),
582
- fUnitAccumulatedFunding: ABK64x64ToFloat(BigNumber.from(orig.fUnitAccumulatedFunding)),
583
- fOpenInterest: ABK64x64ToFloat(BigNumber.from(orig.fOpenInterest)),
584
- fTargetAMMFundSize: ABK64x64ToFloat(BigNumber.from(orig.fTargetAMMFundSize)),
585
- fCurrentTraderExposureEMA: ABK64x64ToFloat(BigNumber.from(orig.fCurrentTraderExposureEMA)),
586
- fCurrentFundingRate: ABK64x64ToFloat(BigNumber.from(orig.fCurrentFundingRate)),
587
- fLotSizeBC: ABK64x64ToFloat(BigNumber.from(orig.fLotSizeBC)),
588
- fReferralRebateCC: ABK64x64ToFloat(BigNumber.from(orig.fReferralRebateCC)),
589
- fTargetDFSize: ABK64x64ToFloat(BigNumber.from(orig.fTargetDFSize)),
590
- fkStar: ABK64x64ToFloat(BigNumber.from(orig.fkStar)),
591
- fAMMTargetDD: ABK64x64ToFloat(BigNumber.from(orig.fAMMTargetDD)),
584
+ premiumRatesEMA: ABK64x64ToFloat(BigInt(orig.premiumRatesEMA)),
585
+ fUnitAccumulatedFunding: ABK64x64ToFloat(BigInt(orig.fUnitAccumulatedFunding)),
586
+ fOpenInterest: ABK64x64ToFloat(BigInt(orig.fOpenInterest)),
587
+ fTargetAMMFundSize: ABK64x64ToFloat(BigInt(orig.fTargetAMMFundSize)),
588
+ fCurrentTraderExposureEMA: ABK64x64ToFloat(BigInt(orig.fCurrentTraderExposureEMA)),
589
+ fCurrentFundingRate: ABK64x64ToFloat(BigInt(orig.fCurrentFundingRate)),
590
+ fLotSizeBC: ABK64x64ToFloat(BigInt(orig.fLotSizeBC)),
591
+ fReferralRebateCC: ABK64x64ToFloat(BigInt(orig.fReferralRebateCC)),
592
+ fTargetDFSize: ABK64x64ToFloat(BigInt(orig.fTargetDFSize)),
593
+ fkStar: ABK64x64ToFloat(BigInt(orig.fkStar)),
594
+ fAMMTargetDD: ABK64x64ToFloat(BigInt(orig.fAMMTargetDD)),
592
595
  perpFlags: Number(orig.perpFlags?.toString()),
593
- fMinimalTraderExposureEMA: ABK64x64ToFloat(BigNumber.from(orig.fMinimalTraderExposureEMA)),
594
- fMinimalAMMExposureEMA: ABK64x64ToFloat(BigNumber.from(orig.fMinimalAMMExposureEMA)),
595
- fSettlementS3PriceData: ABK64x64ToFloat(BigNumber.from(orig.fSettlementS3PriceData)),
596
- fSettlementS2PriceData: ABK64x64ToFloat(BigNumber.from(orig.fSettlementS2PriceData)),
597
- fTotalMarginBalance: ABK64x64ToFloat(BigNumber.from(orig.fTotalMarginBalance)),
596
+ fMinimalTraderExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalTraderExposureEMA)),
597
+ fMinimalAMMExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalAMMExposureEMA)),
598
+ fSettlementS3PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS3PriceData)),
599
+ fSettlementS2PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS2PriceData)),
600
+ fTotalMarginBalance: ABK64x64ToFloat(BigInt(orig.fTotalMarginBalance)),
598
601
  fMarkPriceEMALambda: ABK64x64ToFloat(Number(orig.fMarkPriceEMALambda)),
599
602
  fFundingRateClamp: ABK64x64ToFloat(Number(orig.fFundingRateClamp)),
600
603
  fMaximalTradeSizeBumpUp: ABK64x64ToFloat(Number(orig.fMaximalTradeSizeBumpUp)),
601
604
  iLastTargetPoolSizeTime: Number(orig.iLastTargetPoolSizeTime),
602
605
  fStressReturnS3: [
603
- ABK64x64ToFloat(BigNumber.from(orig.fStressReturnS3[0])),
604
- ABK64x64ToFloat(BigNumber.from(orig.fStressReturnS3[1])),
605
- ],
606
- fDFLambda: [
607
- ABK64x64ToFloat(BigNumber.from(orig.fDFLambda[0])),
608
- ABK64x64ToFloat(BigNumber.from(orig.fDFLambda[1])),
606
+ ABK64x64ToFloat(BigInt(orig.fStressReturnS3[0])),
607
+ ABK64x64ToFloat(BigInt(orig.fStressReturnS3[1])),
609
608
  ],
609
+ fDFLambda: [ABK64x64ToFloat(BigInt(orig.fDFLambda[0])), ABK64x64ToFloat(BigInt(orig.fDFLambda[1]))],
610
610
  fCurrentAMMExposureEMA: [
611
- ABK64x64ToFloat(BigNumber.from(orig.fCurrentAMMExposureEMA[0])),
612
- ABK64x64ToFloat(BigNumber.from(orig.fCurrentAMMExposureEMA[1])),
611
+ ABK64x64ToFloat(BigInt(orig.fCurrentAMMExposureEMA[0])),
612
+ ABK64x64ToFloat(BigInt(orig.fCurrentAMMExposureEMA[1])),
613
613
  ],
614
614
  fStressReturnS2: [
615
- ABK64x64ToFloat(BigNumber.from(orig.fStressReturnS2[0])),
616
- ABK64x64ToFloat(BigNumber.from(orig.fStressReturnS2[1])),
615
+ ABK64x64ToFloat(BigInt(orig.fStressReturnS2[0])),
616
+ ABK64x64ToFloat(BigInt(orig.fStressReturnS2[1])),
617
617
  ], // parameter: negative and positive stress returns for base-quote asset
618
618
  };
619
619
  p.push(v);
@@ -629,9 +629,11 @@ export default class PerpetualDataHandler {
629
629
  let poolMarginTokenAddr = [];
630
630
  let oracleFactory = "";
631
631
  while (lenReceived == len) {
632
- let res = await _proxyContract.getPoolStaticInfo(idxFrom, idxFrom + len - 1, overrides || {});
632
+ const res = (await _proxyContract.getPoolStaticInfo(idxFrom, idxFrom + len - 1, overrides || {}));
633
633
  lenReceived = res.length;
634
- nestedPerpetualIDs = nestedPerpetualIDs.concat(res[0]);
634
+ const nestedIds = res[0].map((ids) => ids.map((id) => Number(id)));
635
+ nestedPerpetualIDs = nestedPerpetualIDs.concat(nestedIds);
636
+ // TODO: this looks like a bug if num pools > 10 --- concat?
635
637
  poolShareTokenAddr = res[1];
636
638
  poolMarginTokenAddr = res[2];
637
639
  oracleFactory = res[3];
@@ -651,22 +653,22 @@ export default class PerpetualDataHandler {
651
653
  const idx_mark_price = 8;
652
654
  const idx_lvg = 7;
653
655
  const idx_s3 = 9;
654
- let isEmpty = traderState[idx_notional].eq(0);
656
+ let isEmpty = traderState[idx_notional] == 0n;
655
657
  let cash = ABK64x64ToFloat(traderState[idx_cash]);
656
- let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigNumber.from(0), side = CLOSED_SIDE, entryPrice = 0;
658
+ let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigInt(0), side = CLOSED_SIDE, entryPrice = 0;
657
659
  if (!isEmpty) {
658
660
  [S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, _pxS2S3[0], symbolToPerpStaticInfo);
659
661
  fLockedIn = traderState[idx_locked_in];
660
- side = traderState[idx_notional].gt(0) ? BUY_SIDE : SELL_SIDE;
661
- entryPrice = ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional]).abs());
662
+ side = traderState[idx_notional] > 0n ? BUY_SIDE : SELL_SIDE;
663
+ entryPrice = Math.abs(ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional])));
662
664
  }
663
665
  let mgn = {
664
666
  symbol: symbol,
665
- positionNotionalBaseCCY: isEmpty ? 0 : ABK64x64ToFloat(traderState[idx_notional].abs()),
667
+ positionNotionalBaseCCY: isEmpty ? 0 : Math.abs(ABK64x64ToFloat(traderState[idx_notional])),
666
668
  side: isEmpty ? CLOSED_SIDE : side,
667
669
  entryPrice: isEmpty ? 0 : entryPrice,
668
670
  leverage: isEmpty ? 0 : ABK64x64ToFloat(traderState[idx_lvg]),
669
- markPrice: ABK64x64ToFloat(traderState[idx_mark_price].abs()),
671
+ markPrice: Math.abs(ABK64x64ToFloat(traderState[idx_mark_price])),
670
672
  unrealizedPnlQuoteCCY: isEmpty ? 0 : pnl,
671
673
  unrealizedFundingCollateralCCY: isEmpty ? 0 : unpaidFundingCC,
672
674
  collateralCC: cash,
@@ -766,7 +768,7 @@ export default class PerpetualDataHandler {
766
768
  if (overrides) {
767
769
  ({ rpcURL, ...overrides } = overrides);
768
770
  }
769
- const provider = new StaticJsonRpcProvider(rpcURL ?? this.nodeURL);
771
+ const provider = new JsonRpcProvider(rpcURL ?? this.nodeURL, this.network, {});
770
772
  const orderBookSC = this.getOrderBookContract(symbol).connect(provider);
771
773
  let numOrders = await orderBookSC.orderCount(overrides || {});
772
774
  return Number(numOrders);
@@ -802,17 +804,17 @@ export default class PerpetualDataHandler {
802
804
  if (overrides) {
803
805
  ({ rpcURL, ...overrides } = overrides);
804
806
  }
805
- const provider = new StaticJsonRpcProvider(rpcURL ?? this.nodeURL);
807
+ const provider = new JsonRpcProvider(rpcURL ?? this.nodeURL, this.network, { staticNetwork: true });
806
808
  const orderBookSC = this.getOrderBookContract(symbol).connect(provider);
807
809
  const multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, provider);
808
- if (typeof startAfter === "undefined") {
810
+ if (startAfter == undefined) {
809
811
  startAfter = ZERO_ORDER_ID;
810
812
  }
811
813
  else if (typeof startAfter === "string") {
812
814
  startAfter = 0; // TODO: fix
813
815
  }
814
816
  // first get client orders (incl. dependency info)
815
- let [orders, orderIds] = await orderBookSC.pollRange(startAfter, BigNumber.from(numElements), overrides || {});
817
+ let [orders, orderIds] = await orderBookSC.pollRange(startAfter, numElements, overrides || {});
816
818
  let userFriendlyOrders = new Array();
817
819
  let traderAddr = [];
818
820
  let orderIdsOut = [];
@@ -825,11 +827,11 @@ export default class PerpetualDataHandler {
825
827
  }
826
828
  // then get perp orders (incl. submitted ts info)
827
829
  const multicalls = orderIdsOut.map((id) => ({
828
- target: orderBookSC.address,
830
+ target: orderBookSC.target,
829
831
  allowFailure: true,
830
832
  callData: orderBookSC.interface.encodeFunctionData("orderOfDigest", [id]),
831
833
  }));
832
- const encodedResults = await multicall.callStatic.aggregate3(multicalls, overrides || {});
834
+ const encodedResults = await multicall.aggregate3.staticCall(multicalls, overrides || {});
833
835
  // order status
834
836
  encodedResults.map((res, k) => {
835
837
  if (res.success) {
@@ -857,7 +859,7 @@ export default class PerpetualDataHandler {
857
859
  throw new Error("traderAddr, symbol and pxS2S3 should all have the same length");
858
860
  }
859
861
  const proxyCalls = traderAddrs.map((_addr, i) => ({
860
- target: _proxyContract.address,
862
+ target: _proxyContract.target,
861
863
  allowFailure: true,
862
864
  callData: _proxyContract.interface.encodeFunctionData("getTraderState", [
863
865
  PerpetualDataHandler.symbolToPerpetualId(symbols[i], symbolToPerpStaticInfo),
@@ -865,7 +867,7 @@ export default class PerpetualDataHandler {
865
867
  _pxS2S3s[i].map((x) => floatToABK64x64(x)),
866
868
  ]),
867
869
  }));
868
- const encodedResults = await _multicall.callStatic.aggregate3(proxyCalls, overrides || {});
870
+ const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
869
871
  const traderStates = encodedResults.map(({ success, returnData }, i) => {
870
872
  if (!success)
871
873
  throw new Error(`Failed to get perp info for ${symbols[i]}`);
@@ -916,7 +918,7 @@ export default class PerpetualDataHandler {
916
918
  let markPrice = S2 * (1 + ABK64x64ToFloat(ammState[8]));
917
919
  let state = {
918
920
  id: perpId,
919
- state: PERP_STATE_STR[ammState[13].toNumber()],
921
+ state: PERP_STATE_STR[Number(ammState[13])],
920
922
  baseCurrency: ccy[0],
921
923
  quoteCurrency: ccy[1],
922
924
  indexPrice: S2,
@@ -956,7 +958,7 @@ export default class PerpetualDataHandler {
956
958
  let position = ABK64x64ToFloat(traderState[idx_notional]);
957
959
  let cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
958
960
  let Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
959
- let unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC].sub(traderState[idx_cash]));
961
+ let unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC] - traderState[idx_cash]);
960
962
  let unpaidFunding = unpaidFundingCC;
961
963
  if (perpInfo.collateralCurrencyType == CollaterlCCY.BASE) {
962
964
  S2Liq = calculateLiquidationPriceCollateralBase(lockedInValueQC, position, cashCC, tau);
@@ -1020,39 +1022,45 @@ export default class PerpetualDataHandler {
1020
1022
  }
1021
1023
  static fromSmartContractOrder(order, symbolToPerpInfoMap) {
1022
1024
  // find symbol of perpetual id
1023
- let symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, order.iPerpetualId, "id");
1025
+ const symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, Number(order.iPerpetualId), "id");
1024
1026
  if (symbol == undefined) {
1025
- throw Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
1027
+ throw new Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
1026
1028
  }
1027
- let side = order.fAmount > BigNumber.from(0) ? BUY_SIDE : SELL_SIDE;
1029
+ const side = BigInt(order.fAmount.toString()) > BigInt(0) ? BUY_SIDE : SELL_SIDE;
1028
1030
  let limitPrice, stopPrice;
1029
- let fLimitPrice = BigNumber.from(order.fLimitPrice);
1030
- if (fLimitPrice.eq(0)) {
1031
+ const fLimitPrice = BigInt(order.fLimitPrice);
1032
+ if (fLimitPrice == 0n) {
1031
1033
  limitPrice = side == BUY_SIDE ? undefined : 0;
1032
1034
  }
1033
- else if (fLimitPrice.eq(MAX_64x64)) {
1035
+ else if (fLimitPrice == MAX_64x64) {
1034
1036
  limitPrice = side == BUY_SIDE ? Infinity : undefined;
1035
1037
  }
1036
1038
  else {
1037
1039
  limitPrice = ABK64x64ToFloat(fLimitPrice);
1038
1040
  }
1039
- let fStopPrice = BigNumber.from(order.fTriggerPrice);
1040
- if (fStopPrice.eq(0) || fStopPrice.eq(MAX_64x64)) {
1041
+ const fStopPrice = BigInt(order.fTriggerPrice);
1042
+ if (fStopPrice == 0n || fStopPrice == MAX_64x64) {
1041
1043
  stopPrice = undefined;
1042
1044
  }
1043
1045
  else {
1044
1046
  stopPrice = ABK64x64ToFloat(fStopPrice);
1045
1047
  }
1048
+ // adjust prices for market type
1049
+ const sInfo = symbolToPerpInfoMap.get(symbol);
1050
+ if (PerpetualDataHandler.isPredictiveMarket(sInfo)) {
1051
+ limitPrice = limitPrice !== undefined && limitPrice !== 0 ? priceToProb(limitPrice) : limitPrice;
1052
+ stopPrice = stopPrice !== undefined && stopPrice !== 0 ? priceToProb(stopPrice) : stopPrice;
1053
+ }
1046
1054
  let userOrder = {
1047
1055
  symbol: symbol,
1048
1056
  side: side,
1049
- type: PerpetualDataHandler._flagToOrderType(BigNumber.from(order.flags), BigNumber.from(order.fLimitPrice)),
1050
- quantity: Math.abs(ABK64x64ToFloat(BigNumber.from(order.fAmount))),
1051
- reduceOnly: containsFlag(BigNumber.from(order.flags), MASK_CLOSE_ONLY),
1057
+ type: PerpetualDataHandler._flagToOrderType(BigInt(order.flags), BigInt(order.fLimitPrice)),
1058
+ quantity: Math.abs(ABK64x64ToFloat(BigInt(order.fAmount))),
1059
+ reduceOnly: containsFlag(BigInt(order.flags), MASK_CLOSE_ONLY),
1052
1060
  limitPrice: limitPrice,
1053
- keepPositionLvg: containsFlag(BigNumber.from(order.flags), MASK_KEEP_POS_LEVERAGE),
1061
+ keepPositionLvg: containsFlag(BigInt(order.flags), MASK_KEEP_POS_LEVERAGE),
1054
1062
  brokerFeeTbps: order.brokerFeeTbps == 0 ? undefined : Number(order.brokerFeeTbps),
1055
- brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr,
1063
+ brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr.toString(),
1056
1064
  brokerSignature: order.brokerSignature == "0x" ? undefined : order.brokerSignature,
1057
1065
  stopPrice: stopPrice,
1058
1066
  leverage: Number(order.leverageTDR) / 100,
@@ -1077,7 +1085,7 @@ export default class PerpetualDataHandler {
1077
1085
  PerpetualDataHandler.checkOrder(order, perpStaticInfo);
1078
1086
  // translate order
1079
1087
  let flags = PerpetualDataHandler._orderTypeToFlag(order);
1080
- let brokerSig = order.brokerSignature == undefined ? [] : order.brokerSignature;
1088
+ let brokerSig = order.brokerSignature == undefined ? "0x" : order.brokerSignature;
1081
1089
  let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
1082
1090
  let fAmount;
1083
1091
  if (order.side == BUY_SIDE) {
@@ -1089,20 +1097,23 @@ export default class PerpetualDataHandler {
1089
1097
  else {
1090
1098
  throw Error(`invalid side in order spec, use ${BUY_SIDE} or ${SELL_SIDE}`);
1091
1099
  }
1100
+ const isPred = PerpetualDataHandler.isPredictiveMarket(perpStaticInfo.get(order.symbol));
1092
1101
  let fLimitPrice;
1093
1102
  if (order.limitPrice == undefined) {
1094
1103
  // we need to set the limit price to infinity or zero for
1095
1104
  // the trade to go through
1096
1105
  // Also: stop orders always have limits set, so even for this case
1097
1106
  // we set the limit to 0 or infinity
1098
- fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 : BigNumber.from(0);
1107
+ fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 : BigInt(0);
1099
1108
  }
1100
1109
  else {
1101
- fLimitPrice = floatToABK64x64(order.limitPrice);
1110
+ fLimitPrice = floatToABK64x64(isPred ? probToPrice(order.limitPrice) : order.limitPrice);
1102
1111
  }
1103
- let iDeadline = order.deadline == undefined ? Date.now() / 1000 + ORDER_MAX_DURATION_SEC : order.deadline;
1104
- let fTriggerPrice = order.stopPrice == undefined ? BigNumber.from(0) : floatToABK64x64(order.stopPrice);
1105
- let smOrder = {
1112
+ const iDeadline = order.deadline == undefined ? Date.now() / 1000 + ORDER_MAX_DURATION_SEC : order.deadline;
1113
+ const fTriggerPrice = order.stopPrice == undefined
1114
+ ? BigInt(0)
1115
+ : floatToABK64x64(isPred ? probToPrice(order.stopPrice) : order.stopPrice);
1116
+ const smOrder = {
1106
1117
  flags: flags,
1107
1118
  iPerpetualId: perpetualId,
1108
1119
  brokerFeeTbps: order.brokerFeeTbps == undefined ? 0 : order.brokerFeeTbps,
@@ -1184,9 +1195,10 @@ export default class PerpetualDataHandler {
1184
1195
  return order;
1185
1196
  }
1186
1197
  static _flagToOrderType(orderFlags, orderLimitPrice) {
1187
- let flag = BigNumber.from(orderFlags);
1198
+ // TODO: check
1199
+ let flag = BigInt(orderFlags);
1188
1200
  let isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
1189
- let hasLimit = !BigNumber.from(orderLimitPrice).eq(0) || !BigNumber.from(orderLimitPrice).eq(MAX_64x64);
1201
+ let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != MAX_64x64;
1190
1202
  let isStop = containsFlag(flag, MASK_STOP_ORDER);
1191
1203
  if (isStop && hasLimit) {
1192
1204
  return ORDER_TYPE_STOP_LIMIT;
@@ -1374,13 +1386,13 @@ export default class PerpetualDataHandler {
1374
1386
  return ids;
1375
1387
  }
1376
1388
  /**
1377
- * Get the ABI of a function in a given contract
1389
+ * Get the ABI of a function in a given contract. Undefined if it doesn't exist.
1378
1390
  * @param contract A contract instance, e.g. this.proxyContract
1379
1391
  * @param functionName Name of the function whose ABI we want
1380
1392
  * @returns Function ABI as a single JSON string
1381
1393
  */
1382
1394
  static _getABIFromContract(contract, functionName) {
1383
- return contract.interface.getFunction(functionName).format(FormatTypes.full);
1395
+ return contract.interface.getFunction(functionName)?.format("full");
1384
1396
  }
1385
1397
  /**
1386
1398
  * Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
@@ -1498,6 +1510,9 @@ export default class PerpetualDataHandler {
1498
1510
  static checkOrder(order,
1499
1511
  // traderAccount: MarginAccount,
1500
1512
  perpStaticInfo) {
1513
+ if (!perpStaticInfo.has(order.symbol)) {
1514
+ throw new Error(`Perpetual not found for symbol ${order.symbol}`);
1515
+ }
1501
1516
  // check side
1502
1517
  if (order.side != BUY_SIDE && order.side != SELL_SIDE) {
1503
1518
  throw Error(`order side must be ${BUY_SIDE} or ${SELL_SIDE}`);
@@ -1534,14 +1549,14 @@ export default class PerpetualDataHandler {
1534
1549
  static fromClientOrderToTypeSafeOrder(order) {
1535
1550
  return {
1536
1551
  iPerpetualId: +order.iPerpetualId.toString(),
1537
- fLimitPrice: BigInt(BigNumber.from(order.fLimitPrice).toString()),
1552
+ fLimitPrice: order.fLimitPrice,
1538
1553
  leverageTDR: +order.leverageTDR.toString(),
1539
1554
  executionTimestamp: +order.executionTimestamp.toString(),
1540
- flags: BigInt(BigNumber.from(order.flags).toString()),
1555
+ flags: BigInt(order.flags),
1541
1556
  iDeadline: +order.iDeadline.toString(),
1542
1557
  brokerAddr: order.brokerAddr,
1543
- fTriggerPrice: BigInt(BigNumber.from(order.fTriggerPrice).toString()),
1544
- fAmount: BigInt(BigNumber.from(order.fAmount).toString()),
1558
+ fTriggerPrice: order.fTriggerPrice,
1559
+ fAmount: order.fAmount,
1545
1560
  parentChildDigest1: order.parentChildDigest1,
1546
1561
  traderAddr: order.traderAddr,
1547
1562
  parentChildDigest2: order.parentChildDigest2,
@@ -1550,5 +1565,14 @@ export default class PerpetualDataHandler {
1550
1565
  callbackTarget: order.callbackTarget,
1551
1566
  };
1552
1567
  }
1568
+ /**
1569
+ * Determines whether a given perpetual represents a predictive market
1570
+ * @param staticInfo Perpetual static info
1571
+ * @returns True if this is a predictive market
1572
+ */
1573
+ static isPredictiveMarket(staticInfo) {
1574
+ // return true; // for testing
1575
+ return containsFlag(staticInfo.perpFlags, MASK_PREDICTIVE_MARKET);
1576
+ }
1553
1577
  }
1554
1578
  //# sourceMappingURL=perpetualDataHandler.js.map