@d8x/perpetuals-sdk 1.3.7 → 2.0.0-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 (271) 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/constants.d.ts +11 -12
  8. package/dist/cjs/constants.js +12 -13
  9. package/dist/cjs/constants.js.map +1 -1
  10. package/dist/cjs/contracts/ERC20.d.ts +146 -171
  11. package/dist/cjs/contracts/IPerpetualManager.d.ts +2534 -2225
  12. package/dist/cjs/contracts/IPyth.d.ts +181 -184
  13. package/dist/cjs/contracts/LimitOrderBook.d.ts +373 -401
  14. package/dist/cjs/contracts/LimitOrderBookBeacon.d.ts +53 -104
  15. package/dist/cjs/contracts/LimitOrderBookFactory.d.ts +129 -185
  16. package/dist/cjs/contracts/MockTokenSwap.d.ts +109 -169
  17. package/dist/cjs/contracts/Multicall3.d.ts +147 -211
  18. package/dist/cjs/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
  19. package/dist/cjs/contracts/OracleFactory.d.ts +258 -238
  20. package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +1099 -891
  21. package/dist/cjs/contracts/RedStoneAbi.d.ts +369 -488
  22. package/dist/cjs/contracts/ShareToken.d.ts +232 -285
  23. package/dist/cjs/contracts/common.d.ts +40 -11
  24. package/dist/cjs/contracts/factories/ERC20__factory.d.ts +2 -3
  25. package/dist/cjs/contracts/factories/ERC20__factory.js +3 -3
  26. package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
  27. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
  28. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +3 -3
  29. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  30. package/dist/cjs/contracts/factories/IPyth__factory.d.ts +2 -3
  31. package/dist/cjs/contracts/factories/IPyth__factory.js +3 -3
  32. package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -1
  33. package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
  34. package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js +3 -3
  35. package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
  36. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
  37. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +3 -3
  38. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  39. package/dist/cjs/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
  40. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +3 -3
  41. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  42. package/dist/cjs/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
  43. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +3 -3
  44. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  45. package/dist/cjs/contracts/factories/Multicall3__factory.d.ts +11 -9
  46. package/dist/cjs/contracts/factories/Multicall3__factory.js +7 -10
  47. package/dist/cjs/contracts/factories/Multicall3__factory.js.map +1 -1
  48. package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
  49. package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js +3 -3
  50. package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
  51. package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +2 -3
  52. package/dist/cjs/contracts/factories/OracleFactory__factory.js +3 -3
  53. package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
  54. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
  55. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +3 -3
  56. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  57. package/dist/cjs/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
  58. package/dist/cjs/contracts/factories/RedStoneAbi__factory.js +3 -3
  59. package/dist/cjs/contracts/factories/RedStoneAbi__factory.js.map +1 -1
  60. package/dist/cjs/contracts/factories/ShareToken__factory.d.ts +2 -3
  61. package/dist/cjs/contracts/factories/ShareToken__factory.js +3 -3
  62. package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
  63. package/dist/cjs/d8XMath.d.ts +16 -16
  64. package/dist/cjs/d8XMath.js +48 -49
  65. package/dist/cjs/d8XMath.js.map +1 -1
  66. package/dist/cjs/liquidatorTool.d.ts +8 -8
  67. package/dist/cjs/liquidatorTool.js +5 -7
  68. package/dist/cjs/liquidatorTool.js.map +1 -1
  69. package/dist/cjs/liquidityProviderTool.d.ts +4 -5
  70. package/dist/cjs/liquidityProviderTool.js.map +1 -1
  71. package/dist/cjs/marketData.d.ts +27 -28
  72. package/dist/cjs/marketData.js +65 -69
  73. package/dist/cjs/marketData.js.map +1 -1
  74. package/dist/cjs/nodeSDKTypes.d.ts +35 -37
  75. package/dist/cjs/onChainPxFeed.d.ts +2 -2
  76. package/dist/cjs/onChainPxFeed.js +3 -3
  77. package/dist/cjs/onChainPxFeed.js.map +1 -1
  78. package/dist/cjs/onChainPxFeedAngle.d.ts +2 -2
  79. package/dist/cjs/onChainPxFeedAngle.js +4 -5
  80. package/dist/cjs/onChainPxFeedAngle.js.map +1 -1
  81. package/dist/cjs/onChainPxFeedRedStone.js +2 -2
  82. package/dist/cjs/onChainPxFeedRedStone.js.map +1 -1
  83. package/dist/cjs/orderExecutorTool.d.ts +7 -9
  84. package/dist/cjs/orderExecutorTool.js +52 -62
  85. package/dist/cjs/orderExecutorTool.js.map +1 -1
  86. package/dist/cjs/perpetualDataHandler.d.ts +38 -35
  87. package/dist/cjs/perpetualDataHandler.js +173 -167
  88. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  89. package/dist/cjs/perpetualEventHandler.d.ts +4 -5
  90. package/dist/cjs/perpetualEventHandler.js +2 -2
  91. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  92. package/dist/cjs/priceFeeds.js +2 -3
  93. package/dist/cjs/priceFeeds.js.map +1 -1
  94. package/dist/cjs/referralCodeSigner.d.ts +1 -1
  95. package/dist/cjs/referralCodeSigner.js +12 -16
  96. package/dist/cjs/referralCodeSigner.js.map +1 -1
  97. package/dist/cjs/traderDigests.d.ts +2 -1
  98. package/dist/cjs/traderDigests.js +9 -11
  99. package/dist/cjs/traderDigests.js.map +1 -1
  100. package/dist/cjs/traderInterface.d.ts +8 -9
  101. package/dist/cjs/traderInterface.js +26 -23
  102. package/dist/cjs/traderInterface.js.map +1 -1
  103. package/dist/cjs/utils.d.ts +2 -3
  104. package/dist/cjs/utils.js +1 -2
  105. package/dist/cjs/utils.js.map +1 -1
  106. package/dist/cjs/version.d.ts +1 -1
  107. package/dist/cjs/version.js +1 -1
  108. package/dist/cjs/version.js.map +1 -1
  109. package/dist/cjs/writeAccessHandler.d.ts +7 -9
  110. package/dist/cjs/writeAccessHandler.js +13 -16
  111. package/dist/cjs/writeAccessHandler.js.map +1 -1
  112. package/dist/esm/accountTrade.d.ts +9 -9
  113. package/dist/esm/accountTrade.js +19 -17
  114. package/dist/esm/accountTrade.js.map +1 -1
  115. package/dist/esm/brokerTool.d.ts +11 -12
  116. package/dist/esm/brokerTool.js +2 -3
  117. package/dist/esm/brokerTool.js.map +1 -1
  118. package/dist/esm/constants.d.ts +11 -12
  119. package/dist/esm/constants.js +12 -13
  120. package/dist/esm/constants.js.map +1 -1
  121. package/dist/esm/contracts/ERC20.d.ts +146 -171
  122. package/dist/esm/contracts/IPerpetualManager.d.ts +2534 -2225
  123. package/dist/esm/contracts/IPyth.d.ts +181 -184
  124. package/dist/esm/contracts/LimitOrderBook.d.ts +373 -401
  125. package/dist/esm/contracts/LimitOrderBookBeacon.d.ts +53 -104
  126. package/dist/esm/contracts/LimitOrderBookFactory.d.ts +129 -185
  127. package/dist/esm/contracts/MockTokenSwap.d.ts +109 -169
  128. package/dist/esm/contracts/Multicall3.d.ts +147 -211
  129. package/dist/esm/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
  130. package/dist/esm/contracts/OracleFactory.d.ts +258 -238
  131. package/dist/esm/contracts/PerpetualManagerProxy.d.ts +1099 -891
  132. package/dist/esm/contracts/RedStoneAbi.d.ts +369 -488
  133. package/dist/esm/contracts/ShareToken.d.ts +232 -285
  134. package/dist/esm/contracts/common.d.ts +40 -11
  135. package/dist/esm/contracts/factories/ERC20__factory.d.ts +2 -3
  136. package/dist/esm/contracts/factories/ERC20__factory.js +4 -4
  137. package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
  138. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
  139. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +4 -4
  140. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  141. package/dist/esm/contracts/factories/IPyth__factory.d.ts +2 -3
  142. package/dist/esm/contracts/factories/IPyth__factory.js +4 -4
  143. package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -1
  144. package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
  145. package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js +4 -4
  146. package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
  147. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
  148. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +4 -4
  149. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  150. package/dist/esm/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
  151. package/dist/esm/contracts/factories/LimitOrderBook__factory.js +4 -4
  152. package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  153. package/dist/esm/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
  154. package/dist/esm/contracts/factories/MockTokenSwap__factory.js +4 -4
  155. package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  156. package/dist/esm/contracts/factories/Multicall3__factory.d.ts +11 -9
  157. package/dist/esm/contracts/factories/Multicall3__factory.js +8 -11
  158. package/dist/esm/contracts/factories/Multicall3__factory.js.map +1 -1
  159. package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
  160. package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js +4 -4
  161. package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
  162. package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +2 -3
  163. package/dist/esm/contracts/factories/OracleFactory__factory.js +4 -4
  164. package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
  165. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
  166. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +4 -4
  167. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  168. package/dist/esm/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
  169. package/dist/esm/contracts/factories/RedStoneAbi__factory.js +4 -4
  170. package/dist/esm/contracts/factories/RedStoneAbi__factory.js.map +1 -1
  171. package/dist/esm/contracts/factories/ShareToken__factory.d.ts +2 -3
  172. package/dist/esm/contracts/factories/ShareToken__factory.js +4 -4
  173. package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
  174. package/dist/esm/d8XMath.d.ts +16 -16
  175. package/dist/esm/d8XMath.js +48 -49
  176. package/dist/esm/d8XMath.js.map +1 -1
  177. package/dist/esm/liquidatorTool.d.ts +8 -8
  178. package/dist/esm/liquidatorTool.js +5 -7
  179. package/dist/esm/liquidatorTool.js.map +1 -1
  180. package/dist/esm/liquidityProviderTool.d.ts +4 -5
  181. package/dist/esm/liquidityProviderTool.js.map +1 -1
  182. package/dist/esm/marketData.d.ts +27 -28
  183. package/dist/esm/marketData.js +55 -59
  184. package/dist/esm/marketData.js.map +1 -1
  185. package/dist/esm/nodeSDKTypes.d.ts +35 -37
  186. package/dist/esm/onChainPxFeed.d.ts +2 -2
  187. package/dist/esm/onChainPxFeed.js +3 -3
  188. package/dist/esm/onChainPxFeed.js.map +1 -1
  189. package/dist/esm/onChainPxFeedAngle.d.ts +2 -2
  190. package/dist/esm/onChainPxFeedAngle.js +2 -3
  191. package/dist/esm/onChainPxFeedAngle.js.map +1 -1
  192. package/dist/esm/onChainPxFeedRedStone.js +1 -1
  193. package/dist/esm/onChainPxFeedRedStone.js.map +1 -1
  194. package/dist/esm/orderExecutorTool.d.ts +7 -9
  195. package/dist/esm/orderExecutorTool.js +38 -48
  196. package/dist/esm/orderExecutorTool.js.map +1 -1
  197. package/dist/esm/perpetualDataHandler.d.ts +38 -35
  198. package/dist/esm/perpetualDataHandler.js +114 -108
  199. package/dist/esm/perpetualDataHandler.js.map +1 -1
  200. package/dist/esm/perpetualEventHandler.d.ts +4 -5
  201. package/dist/esm/perpetualEventHandler.js +2 -2
  202. package/dist/esm/perpetualEventHandler.js.map +1 -1
  203. package/dist/esm/priceFeeds.js +2 -3
  204. package/dist/esm/priceFeeds.js.map +1 -1
  205. package/dist/esm/referralCodeSigner.d.ts +1 -1
  206. package/dist/esm/referralCodeSigner.js +6 -10
  207. package/dist/esm/referralCodeSigner.js.map +1 -1
  208. package/dist/esm/traderDigests.d.ts +2 -1
  209. package/dist/esm/traderDigests.js +2 -4
  210. package/dist/esm/traderDigests.js.map +1 -1
  211. package/dist/esm/traderInterface.d.ts +8 -9
  212. package/dist/esm/traderInterface.js +26 -23
  213. package/dist/esm/traderInterface.js.map +1 -1
  214. package/dist/esm/utils.d.ts +2 -3
  215. package/dist/esm/utils.js +1 -2
  216. package/dist/esm/utils.js.map +1 -1
  217. package/dist/esm/version.d.ts +1 -1
  218. package/dist/esm/version.js +1 -1
  219. package/dist/esm/version.js.map +1 -1
  220. package/dist/esm/writeAccessHandler.d.ts +7 -9
  221. package/dist/esm/writeAccessHandler.js +5 -8
  222. package/dist/esm/writeAccessHandler.js.map +1 -1
  223. package/package.json +7 -17
  224. package/src/accountTrade.ts +32 -34
  225. package/src/brokerTool.ts +17 -20
  226. package/src/constants.ts +12 -13
  227. package/src/contracts/ERC20.ts +236 -350
  228. package/src/contracts/IPerpetualManager.ts +3359 -5050
  229. package/src/contracts/IPyth.ts +272 -409
  230. package/src/contracts/LimitOrderBook.ts +503 -779
  231. package/src/contracts/LimitOrderBookBeacon.ts +123 -171
  232. package/src/contracts/LimitOrderBookFactory.ts +263 -332
  233. package/src/contracts/MockTokenSwap.ts +237 -275
  234. package/src/contracts/Multicall3.ts +208 -374
  235. package/src/contracts/OnDemandOracleUpgradeable.ts +569 -782
  236. package/src/contracts/OracleFactory.ts +410 -538
  237. package/src/contracts/PerpetualManagerProxy.ts +1898 -1426
  238. package/src/contracts/RedStoneAbi.ts +486 -986
  239. package/src/contracts/ShareToken.ts +376 -557
  240. package/src/contracts/common.ts +108 -21
  241. package/src/contracts/factories/ERC20__factory.ts +4 -5
  242. package/src/contracts/factories/IPerpetualManager__factory.ts +4 -5
  243. package/src/contracts/factories/IPyth__factory.ts +4 -5
  244. package/src/contracts/factories/LimitOrderBookBeacon__factory.ts +5 -6
  245. package/src/contracts/factories/LimitOrderBookFactory__factory.ts +5 -6
  246. package/src/contracts/factories/LimitOrderBook__factory.ts +4 -5
  247. package/src/contracts/factories/MockTokenSwap__factory.ts +4 -5
  248. package/src/contracts/factories/Multicall3__factory.ts +21 -19
  249. package/src/contracts/factories/OnDemandOracleUpgradeable__factory.ts +5 -6
  250. package/src/contracts/factories/OracleFactory__factory.ts +4 -5
  251. package/src/contracts/factories/PerpetualManagerProxy__factory.ts +5 -6
  252. package/src/contracts/factories/RedStoneAbi__factory.ts +4 -8
  253. package/src/contracts/factories/ShareToken__factory.ts +4 -8
  254. package/src/d8XMath.ts +57 -57
  255. package/src/liquidatorTool.ts +12 -15
  256. package/src/liquidityProviderTool.ts +7 -5
  257. package/src/marketData.ts +110 -121
  258. package/src/nodeSDKTypes.ts +51 -38
  259. package/src/onChainPxFeed.ts +4 -4
  260. package/src/onChainPxFeedAngle.ts +5 -7
  261. package/src/onChainPxFeedRedStone.ts +1 -3
  262. package/src/orderExecutorTool.ts +100 -108
  263. package/src/perpetualDataHandler.ts +181 -167
  264. package/src/perpetualEventHandler.ts +16 -17
  265. package/src/priceFeeds.ts +2 -3
  266. package/src/referralCodeSigner.ts +6 -10
  267. package/src/traderDigests.ts +8 -5
  268. package/src/traderInterface.ts +45 -31
  269. package/src/utils.ts +3 -4
  270. package/src/version.ts +1 -1
  271. package/src/writeAccessHandler.ts +26 -17
@@ -1,11 +1,6 @@
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";
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_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";
9
4
  import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, } from "./d8XMath";
10
5
  import PriceFeeds from "./priceFeeds";
11
6
  import { combineFlags, containsFlag, contractSymbolToSymbol, loadConfigAbis, symbol4BToLongSymbol, fromBytes4, to4Chars, } from "./utils";
@@ -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,12 +462,12 @@ 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),
@@ -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,24 +1022,24 @@ 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
+ let 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
+ let side = order.fAmount > BigInt(0) ? BUY_SIDE : SELL_SIDE;
1028
1030
  let limitPrice, stopPrice;
1029
- let fLimitPrice = BigNumber.from(order.fLimitPrice);
1030
- if (fLimitPrice.eq(0)) {
1031
+ let 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
+ let fStopPrice = BigInt(order.fTriggerPrice);
1042
+ if (fStopPrice == 0n || fStopPrice == MAX_64x64) {
1041
1043
  stopPrice = undefined;
1042
1044
  }
1043
1045
  else {
@@ -1046,13 +1048,13 @@ export default class PerpetualDataHandler {
1046
1048
  let userOrder = {
1047
1049
  symbol: symbol,
1048
1050
  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),
1051
+ type: PerpetualDataHandler._flagToOrderType(BigInt(order.flags), BigInt(order.fLimitPrice)),
1052
+ quantity: Math.abs(ABK64x64ToFloat(BigInt(order.fAmount))),
1053
+ reduceOnly: containsFlag(BigInt(order.flags), MASK_CLOSE_ONLY),
1052
1054
  limitPrice: limitPrice,
1053
- keepPositionLvg: containsFlag(BigNumber.from(order.flags), MASK_KEEP_POS_LEVERAGE),
1055
+ keepPositionLvg: containsFlag(BigInt(order.flags), MASK_KEEP_POS_LEVERAGE),
1054
1056
  brokerFeeTbps: order.brokerFeeTbps == 0 ? undefined : Number(order.brokerFeeTbps),
1055
- brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr,
1057
+ brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr.toString(),
1056
1058
  brokerSignature: order.brokerSignature == "0x" ? undefined : order.brokerSignature,
1057
1059
  stopPrice: stopPrice,
1058
1060
  leverage: Number(order.leverageTDR) / 100,
@@ -1077,7 +1079,7 @@ export default class PerpetualDataHandler {
1077
1079
  PerpetualDataHandler.checkOrder(order, perpStaticInfo);
1078
1080
  // translate order
1079
1081
  let flags = PerpetualDataHandler._orderTypeToFlag(order);
1080
- let brokerSig = order.brokerSignature == undefined ? [] : order.brokerSignature;
1082
+ let brokerSig = order.brokerSignature == undefined ? "0x" : order.brokerSignature;
1081
1083
  let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
1082
1084
  let fAmount;
1083
1085
  if (order.side == BUY_SIDE) {
@@ -1095,13 +1097,13 @@ export default class PerpetualDataHandler {
1095
1097
  // the trade to go through
1096
1098
  // Also: stop orders always have limits set, so even for this case
1097
1099
  // we set the limit to 0 or infinity
1098
- fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 : BigNumber.from(0);
1100
+ fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 : BigInt(0);
1099
1101
  }
1100
1102
  else {
1101
1103
  fLimitPrice = floatToABK64x64(order.limitPrice);
1102
1104
  }
1103
1105
  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);
1106
+ let fTriggerPrice = order.stopPrice == undefined ? BigInt(0) : floatToABK64x64(order.stopPrice);
1105
1107
  let smOrder = {
1106
1108
  flags: flags,
1107
1109
  iPerpetualId: perpetualId,
@@ -1184,9 +1186,10 @@ export default class PerpetualDataHandler {
1184
1186
  return order;
1185
1187
  }
1186
1188
  static _flagToOrderType(orderFlags, orderLimitPrice) {
1187
- let flag = BigNumber.from(orderFlags);
1189
+ // TODO: check
1190
+ let flag = BigInt(orderFlags);
1188
1191
  let isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
1189
- let hasLimit = !BigNumber.from(orderLimitPrice).eq(0) || !BigNumber.from(orderLimitPrice).eq(MAX_64x64);
1192
+ let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != MAX_64x64;
1190
1193
  let isStop = containsFlag(flag, MASK_STOP_ORDER);
1191
1194
  if (isStop && hasLimit) {
1192
1195
  return ORDER_TYPE_STOP_LIMIT;
@@ -1374,13 +1377,13 @@ export default class PerpetualDataHandler {
1374
1377
  return ids;
1375
1378
  }
1376
1379
  /**
1377
- * Get the ABI of a function in a given contract
1380
+ * Get the ABI of a function in a given contract. Undefined if it doesn't exist.
1378
1381
  * @param contract A contract instance, e.g. this.proxyContract
1379
1382
  * @param functionName Name of the function whose ABI we want
1380
1383
  * @returns Function ABI as a single JSON string
1381
1384
  */
1382
1385
  static _getABIFromContract(contract, functionName) {
1383
- return contract.interface.getFunction(functionName).format(FormatTypes.full);
1386
+ return contract.interface.getFunction(functionName)?.format("full");
1384
1387
  }
1385
1388
  /**
1386
1389
  * Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
@@ -1498,6 +1501,9 @@ export default class PerpetualDataHandler {
1498
1501
  static checkOrder(order,
1499
1502
  // traderAccount: MarginAccount,
1500
1503
  perpStaticInfo) {
1504
+ if (!perpStaticInfo.has(order.symbol)) {
1505
+ throw new Error(`Perpetual not found for symbol ${order.symbol}`);
1506
+ }
1501
1507
  // check side
1502
1508
  if (order.side != BUY_SIDE && order.side != SELL_SIDE) {
1503
1509
  throw Error(`order side must be ${BUY_SIDE} or ${SELL_SIDE}`);
@@ -1534,14 +1540,14 @@ export default class PerpetualDataHandler {
1534
1540
  static fromClientOrderToTypeSafeOrder(order) {
1535
1541
  return {
1536
1542
  iPerpetualId: +order.iPerpetualId.toString(),
1537
- fLimitPrice: BigInt(BigNumber.from(order.fLimitPrice).toString()),
1543
+ fLimitPrice: order.fLimitPrice,
1538
1544
  leverageTDR: +order.leverageTDR.toString(),
1539
1545
  executionTimestamp: +order.executionTimestamp.toString(),
1540
- flags: BigInt(BigNumber.from(order.flags).toString()),
1546
+ flags: BigInt(order.flags),
1541
1547
  iDeadline: +order.iDeadline.toString(),
1542
1548
  brokerAddr: order.brokerAddr,
1543
- fTriggerPrice: BigInt(BigNumber.from(order.fTriggerPrice).toString()),
1544
- fAmount: BigInt(BigNumber.from(order.fAmount).toString()),
1549
+ fTriggerPrice: order.fTriggerPrice,
1550
+ fAmount: order.fAmount,
1545
1551
  parentChildDigest1: order.parentChildDigest1,
1546
1552
  traderAddr: order.traderAddr,
1547
1553
  parentChildDigest2: order.parentChildDigest2,