@d8x/perpetuals-sdk 2.0.8-alpha → 2.0.10-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 (191) hide show
  1. package/dist/cjs/abi/BeaconProxy.json +71 -0
  2. package/dist/cjs/abi/IPerpetualManager.json +46 -0
  3. package/dist/cjs/abi/Maintainer.json +774 -0
  4. package/dist/cjs/abi/MockToken.json +347 -0
  5. package/dist/cjs/abi/UUPSUpgradeable.json +104 -0
  6. package/dist/cjs/abi/WeETH.json +310 -0
  7. package/dist/cjs/abi-zkevm/IPerpetualManager.json +2 -2
  8. package/dist/cjs/abi-zkevm/LimitOrderBook.json +910 -0
  9. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +236 -0
  10. package/dist/cjs/contracts/BeaconProxy.d.ts +63 -0
  11. package/dist/cjs/contracts/BeaconProxy.js +3 -0
  12. package/dist/cjs/contracts/BeaconProxy.js.map +1 -0
  13. package/dist/cjs/contracts/IPerpetualManager.d.ts +15 -1
  14. package/dist/cjs/contracts/Maintainer.d.ts +799 -0
  15. package/dist/cjs/contracts/Maintainer.js +3 -0
  16. package/dist/cjs/contracts/Maintainer.js.map +1 -0
  17. package/dist/cjs/contracts/MockToken.d.ts +263 -0
  18. package/dist/cjs/contracts/MockToken.js +3 -0
  19. package/dist/cjs/contracts/MockToken.js.map +1 -0
  20. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +118 -0
  21. package/dist/cjs/contracts/UUPSUpgradeable.js +3 -0
  22. package/dist/cjs/contracts/UUPSUpgradeable.js.map +1 -0
  23. package/dist/cjs/contracts/WeETH.d.ts +503 -0
  24. package/dist/cjs/contracts/WeETH.js +3 -0
  25. package/dist/cjs/contracts/WeETH.js.map +1 -0
  26. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +61 -0
  27. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +89 -0
  28. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +1 -0
  29. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +35 -0
  30. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +46 -0
  31. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  32. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +609 -0
  33. package/dist/cjs/contracts/factories/Maintainer__factory.js +792 -0
  34. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +1 -0
  35. package/dist/{esm/contracts/factories/PerpStorage__factory.d.ts → cjs/contracts/factories/MockToken__factory.d.ts} +128 -115
  36. package/dist/cjs/contracts/factories/MockToken__factory.js +365 -0
  37. package/dist/cjs/contracts/factories/MockToken__factory.js.map +1 -0
  38. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +87 -0
  39. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +122 -0
  40. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +1 -0
  41. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +545 -0
  42. package/dist/cjs/contracts/factories/WeETH__factory.js +721 -0
  43. package/dist/cjs/contracts/factories/WeETH__factory.js.map +1 -0
  44. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +4136 -0
  45. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +5324 -0
  46. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +1 -0
  47. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +189 -0
  48. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +254 -0
  49. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +1 -0
  50. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +715 -0
  51. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +928 -0
  52. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +1 -0
  53. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +344 -0
  54. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +456 -0
  55. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +1 -0
  56. package/dist/cjs/contracts/factories/lean0/index.d.ts +4 -0
  57. package/dist/cjs/contracts/factories/lean0/index.js +15 -0
  58. package/dist/cjs/contracts/factories/lean0/index.js.map +1 -0
  59. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +2821 -0
  60. package/dist/cjs/contracts/lean0/IPerpetualManager.js +3 -0
  61. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +1 -0
  62. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +533 -0
  63. package/dist/cjs/contracts/lean0/LimitOrderBook.js +3 -0
  64. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +1 -0
  65. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +210 -0
  66. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +3 -0
  67. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +1 -0
  68. package/dist/cjs/contracts/lean0/ShareToken.d.ts +320 -0
  69. package/dist/cjs/contracts/lean0/ShareToken.js +3 -0
  70. package/dist/cjs/contracts/lean0/ShareToken.js.map +1 -0
  71. package/dist/cjs/contracts/lean0/index.d.ts +4 -0
  72. package/dist/cjs/contracts/lean0/index.js +3 -0
  73. package/dist/cjs/contracts/lean0/index.js.map +1 -0
  74. package/dist/cjs/marketData.d.ts +2 -1
  75. package/dist/cjs/marketData.js +46 -18
  76. package/dist/cjs/marketData.js.map +1 -1
  77. package/dist/cjs/nodeSDKTypes.d.ts +19 -0
  78. package/dist/cjs/nodeSDKTypes.js +29 -0
  79. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  80. package/dist/cjs/perpetualDataHandler.d.ts +9 -2
  81. package/dist/cjs/perpetualDataHandler.js +50 -13
  82. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  83. package/dist/cjs/referralCodeSigner.d.ts +38 -5
  84. package/dist/cjs/referralCodeSigner.js +107 -18
  85. package/dist/cjs/referralCodeSigner.js.map +1 -1
  86. package/dist/cjs/version.d.ts +1 -1
  87. package/dist/cjs/version.js +1 -1
  88. package/dist/cjs/version.js.map +1 -1
  89. package/dist/esm/abi/BeaconProxy.json +71 -0
  90. package/dist/esm/abi/IPerpetualManager.json +46 -0
  91. package/dist/esm/abi/Maintainer.json +774 -0
  92. package/dist/esm/abi/MockToken.json +347 -0
  93. package/dist/esm/abi/UUPSUpgradeable.json +104 -0
  94. package/dist/esm/abi/WeETH.json +310 -0
  95. package/dist/esm/abi/lean0/IPerpetualManager.json +5306 -0
  96. package/dist/esm/abi/lean0/LimitOrderBook.json +910 -0
  97. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +236 -0
  98. package/dist/esm/abi/lean0/ShareToken.json +438 -0
  99. package/dist/esm/abi-zkevm/IPerpetualManager.json +2 -2
  100. package/dist/esm/abi-zkevm/LimitOrderBook.json +910 -0
  101. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +236 -0
  102. package/dist/esm/contracts/BeaconProxy.d.ts +63 -0
  103. package/dist/esm/contracts/BeaconProxy.js +2 -0
  104. package/dist/esm/contracts/BeaconProxy.js.map +1 -0
  105. package/dist/esm/contracts/IPerpetualManager.d.ts +15 -1
  106. package/dist/esm/contracts/Maintainer.d.ts +799 -0
  107. package/dist/esm/contracts/Maintainer.js +2 -0
  108. package/dist/esm/contracts/Maintainer.js.map +1 -0
  109. package/dist/esm/contracts/MockToken.d.ts +263 -0
  110. package/dist/esm/contracts/MockToken.js +2 -0
  111. package/dist/esm/contracts/MockToken.js.map +1 -0
  112. package/dist/esm/contracts/UUPSUpgradeable.d.ts +118 -0
  113. package/dist/esm/contracts/UUPSUpgradeable.js +2 -0
  114. package/dist/esm/contracts/UUPSUpgradeable.js.map +1 -0
  115. package/dist/esm/contracts/WeETH.d.ts +503 -0
  116. package/dist/esm/contracts/WeETH.js +2 -0
  117. package/dist/esm/contracts/WeETH.js.map +1 -0
  118. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +61 -0
  119. package/dist/esm/contracts/factories/BeaconProxy__factory.js +85 -0
  120. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +1 -0
  121. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +35 -0
  122. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +46 -0
  123. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  124. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +609 -0
  125. package/dist/esm/contracts/factories/Maintainer__factory.js +788 -0
  126. package/dist/esm/contracts/factories/Maintainer__factory.js.map +1 -0
  127. package/dist/esm/contracts/factories/MockToken__factory.d.ts +273 -0
  128. package/dist/esm/contracts/factories/{PerpStorage__factory.js → MockToken__factory.js} +139 -128
  129. package/dist/esm/contracts/factories/MockToken__factory.js.map +1 -0
  130. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +87 -0
  131. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +118 -0
  132. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +1 -0
  133. package/dist/esm/contracts/factories/WeETH__factory.d.ts +545 -0
  134. package/dist/esm/contracts/factories/WeETH__factory.js +717 -0
  135. package/dist/esm/contracts/factories/WeETH__factory.js.map +1 -0
  136. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +4136 -0
  137. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +5320 -0
  138. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +1 -0
  139. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +189 -0
  140. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +250 -0
  141. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +1 -0
  142. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +715 -0
  143. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +924 -0
  144. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +1 -0
  145. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +344 -0
  146. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +452 -0
  147. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +1 -0
  148. package/dist/esm/contracts/factories/lean0/index.d.ts +4 -0
  149. package/dist/esm/contracts/factories/lean0/index.js +8 -0
  150. package/dist/esm/contracts/factories/lean0/index.js.map +1 -0
  151. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +2821 -0
  152. package/dist/esm/contracts/lean0/IPerpetualManager.js +2 -0
  153. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +1 -0
  154. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +533 -0
  155. package/dist/esm/contracts/lean0/LimitOrderBook.js +2 -0
  156. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +1 -0
  157. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +210 -0
  158. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +2 -0
  159. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +1 -0
  160. package/dist/esm/contracts/lean0/ShareToken.d.ts +320 -0
  161. package/dist/esm/contracts/lean0/ShareToken.js +2 -0
  162. package/dist/esm/contracts/lean0/ShareToken.js.map +1 -0
  163. package/dist/esm/contracts/lean0/index.d.ts +4 -0
  164. package/dist/esm/contracts/lean0/index.js +2 -0
  165. package/dist/esm/contracts/lean0/index.js.map +1 -0
  166. package/dist/esm/marketData.d.ts +2 -1
  167. package/dist/esm/marketData.js +46 -18
  168. package/dist/esm/marketData.js.map +1 -1
  169. package/dist/esm/nodeSDKTypes.d.ts +19 -0
  170. package/dist/esm/nodeSDKTypes.js +28 -1
  171. package/dist/esm/nodeSDKTypes.js.map +1 -1
  172. package/dist/esm/perpetualDataHandler.d.ts +9 -2
  173. package/dist/esm/perpetualDataHandler.js +50 -13
  174. package/dist/esm/perpetualDataHandler.js.map +1 -1
  175. package/dist/esm/referralCodeSigner.d.ts +38 -5
  176. package/dist/esm/referralCodeSigner.js +108 -19
  177. package/dist/esm/referralCodeSigner.js.map +1 -1
  178. package/dist/esm/version.d.ts +1 -1
  179. package/dist/esm/version.js +1 -1
  180. package/dist/esm/version.js.map +1 -1
  181. package/package.json +4 -2
  182. package/src/abi/IPerpetualManager.json +46 -0
  183. package/src/abi-zkevm/IPerpetualManager.json +2 -2
  184. package/src/contracts/IPerpetualManager.ts +22 -0
  185. package/src/contracts/factories/IPerpetualManager__factory.ts +46 -0
  186. package/src/marketData.ts +54 -17
  187. package/src/nodeSDKTypes.ts +31 -0
  188. package/src/perpetualDataHandler.ts +54 -17
  189. package/src/referralCodeSigner.ts +174 -22
  190. package/src/version.ts +1 -1
  191. package/dist/esm/contracts/factories/PerpStorage__factory.js.map +0 -1
@@ -2694,6 +2694,52 @@
2694
2694
  "stateMutability": "view",
2695
2695
  "type": "function"
2696
2696
  },
2697
+ {
2698
+ "inputs": [
2699
+ {
2700
+ "internalType": "uint24[]",
2701
+ "name": "_perpetualIds",
2702
+ "type": "uint24[]"
2703
+ },
2704
+ {
2705
+ "internalType": "address",
2706
+ "name": "_traderAddress",
2707
+ "type": "address"
2708
+ }
2709
+ ],
2710
+ "name": "getMarginAccounts",
2711
+ "outputs": [
2712
+ {
2713
+ "components": [
2714
+ {
2715
+ "internalType": "int128",
2716
+ "name": "fLockedInValueQC",
2717
+ "type": "int128"
2718
+ },
2719
+ {
2720
+ "internalType": "int128",
2721
+ "name": "fCashCC",
2722
+ "type": "int128"
2723
+ },
2724
+ {
2725
+ "internalType": "int128",
2726
+ "name": "fPositionBC",
2727
+ "type": "int128"
2728
+ },
2729
+ {
2730
+ "internalType": "int128",
2731
+ "name": "fUnitAccumulatedFundingStart",
2732
+ "type": "int128"
2733
+ }
2734
+ ],
2735
+ "internalType": "struct PerpStorage.MarginAccount[]",
2736
+ "name": "",
2737
+ "type": "tuple[]"
2738
+ }
2739
+ ],
2740
+ "stateMutability": "view",
2741
+ "type": "function"
2742
+ },
2697
2743
  {
2698
2744
  "inputs": [
2699
2745
  {
@@ -3036,7 +3036,7 @@
3036
3036
  },
3037
3037
  {
3038
3038
  "internalType": "int128",
3039
- "name": "fAMMMinSizeCC",
3039
+ "name": "perpFlags",
3040
3040
  "type": "int128"
3041
3041
  },
3042
3042
  {
@@ -3443,7 +3443,7 @@
3443
3443
  },
3444
3444
  {
3445
3445
  "internalType": "int128",
3446
- "name": "fAMMMinSizeCC",
3446
+ "name": "perpFlags",
3447
3447
  "type": "int128"
3448
3448
  },
3449
3449
  {
@@ -467,6 +467,7 @@ export interface IPerpetualManagerInterface extends Interface {
467
467
  | "getLiquidityPool"
468
468
  | "getLiquidityPools"
469
469
  | "getMarginAccount"
470
+ | "getMarginAccounts"
470
471
  | "getMaxSignedOpenTradeSizeForPos"
471
472
  | "getNextLiquidatableTrader"
472
473
  | "getOracleFactory"
@@ -814,6 +815,10 @@ export interface IPerpetualManagerInterface extends Interface {
814
815
  functionFragment: "getMarginAccount",
815
816
  values: [BigNumberish, AddressLike]
816
817
  ): string;
818
+ encodeFunctionData(
819
+ functionFragment: "getMarginAccounts",
820
+ values: [BigNumberish[], AddressLike]
821
+ ): string;
817
822
  encodeFunctionData(
818
823
  functionFragment: "getMaxSignedOpenTradeSizeForPos",
819
824
  values: [BigNumberish, BigNumberish, boolean]
@@ -1355,6 +1360,10 @@ export interface IPerpetualManagerInterface extends Interface {
1355
1360
  functionFragment: "getMarginAccount",
1356
1361
  data: BytesLike
1357
1362
  ): Result;
1363
+ decodeFunctionResult(
1364
+ functionFragment: "getMarginAccounts",
1365
+ data: BytesLike
1366
+ ): Result;
1358
1367
  decodeFunctionResult(
1359
1368
  functionFragment: "getMaxSignedOpenTradeSizeForPos",
1360
1369
  data: BytesLike
@@ -2872,6 +2881,12 @@ export interface IPerpetualManager extends BaseContract {
2872
2881
  "view"
2873
2882
  >;
2874
2883
 
2884
+ getMarginAccounts: TypedContractMethod<
2885
+ [_perpetualIds: BigNumberish[], _traderAddress: AddressLike],
2886
+ [PerpStorage.MarginAccountStructOutput[]],
2887
+ "view"
2888
+ >;
2889
+
2875
2890
  getMaxSignedOpenTradeSizeForPos: TypedContractMethod<
2876
2891
  [
2877
2892
  _perpetualId: BigNumberish,
@@ -3772,6 +3787,13 @@ export interface IPerpetualManager extends BaseContract {
3772
3787
  [PerpStorage.MarginAccountStructOutput],
3773
3788
  "view"
3774
3789
  >;
3790
+ getFunction(
3791
+ nameOrSignature: "getMarginAccounts"
3792
+ ): TypedContractMethod<
3793
+ [_perpetualIds: BigNumberish[], _traderAddress: AddressLike],
3794
+ [PerpStorage.MarginAccountStructOutput[]],
3795
+ "view"
3796
+ >;
3775
3797
  getFunction(
3776
3798
  nameOrSignature: "getMaxSignedOpenTradeSizeForPos"
3777
3799
  ): TypedContractMethod<
@@ -2704,6 +2704,52 @@ const _abi = [
2704
2704
  stateMutability: "view",
2705
2705
  type: "function",
2706
2706
  },
2707
+ {
2708
+ inputs: [
2709
+ {
2710
+ internalType: "uint24[]",
2711
+ name: "_perpetualIds",
2712
+ type: "uint24[]",
2713
+ },
2714
+ {
2715
+ internalType: "address",
2716
+ name: "_traderAddress",
2717
+ type: "address",
2718
+ },
2719
+ ],
2720
+ name: "getMarginAccounts",
2721
+ outputs: [
2722
+ {
2723
+ components: [
2724
+ {
2725
+ internalType: "int128",
2726
+ name: "fLockedInValueQC",
2727
+ type: "int128",
2728
+ },
2729
+ {
2730
+ internalType: "int128",
2731
+ name: "fCashCC",
2732
+ type: "int128",
2733
+ },
2734
+ {
2735
+ internalType: "int128",
2736
+ name: "fPositionBC",
2737
+ type: "int128",
2738
+ },
2739
+ {
2740
+ internalType: "int128",
2741
+ name: "fUnitAccumulatedFundingStart",
2742
+ type: "int128",
2743
+ },
2744
+ ],
2745
+ internalType: "struct PerpStorage.MarginAccount[]",
2746
+ name: "",
2747
+ type: "tuple[]",
2748
+ },
2749
+ ],
2750
+ stateMutability: "view",
2751
+ type: "function",
2752
+ },
2707
2753
  {
2708
2754
  inputs: [
2709
2755
  {
package/src/marketData.ts CHANGED
@@ -601,6 +601,7 @@ export default class MarketData extends PerpetualDataHandler {
601
601
  const perpetualState = PerpetualDataHandler._parseAMMState(
602
602
  order.symbol,
603
603
  ammState,
604
+ [0n, 0n], // not used below
604
605
  indexPriceInfo,
605
606
  this.symbolToPerpStaticInfo
606
607
  );
@@ -1505,7 +1506,7 @@ export default class MarketData extends PerpetualDataHandler {
1505
1506
  indexPriceInfo?: [number, number, boolean, boolean],
1506
1507
  overrides?: Overrides
1507
1508
  ): Promise<PerpetualState> {
1508
- if (this.proxyContract == null) {
1509
+ if (this.proxyContract == null || this.multicall == null) {
1509
1510
  throw Error("no proxy contract initialized. Use createProxyInstance().");
1510
1511
  }
1511
1512
  if (indexPriceInfo == undefined) {
@@ -1516,6 +1517,7 @@ export default class MarketData extends PerpetualDataHandler {
1516
1517
  symbol,
1517
1518
  this.symbolToPerpStaticInfo,
1518
1519
  this.proxyContract,
1520
+ this.multicall,
1519
1521
  indexPriceInfo,
1520
1522
  overrides
1521
1523
  );
@@ -1996,6 +1998,7 @@ export default class MarketData extends PerpetualDataHandler {
1996
1998
  let iFrom = 1;
1997
1999
  let poolStates: Array<PoolState> = [];
1998
2000
  let perpStates: Array<PerpetualState> = [];
2001
+ let longShort: Array<[bigint, bigint]> = [];
1999
2002
  while (iFrom <= numPools) {
2000
2003
  const proxyCalls: Multicall3.Call3Struct[] = [
2001
2004
  // getLiquidityPools
@@ -2012,7 +2015,16 @@ export default class MarketData extends PerpetualDataHandler {
2012
2015
  _nestedPerpetualIDs.slice(iFrom - 1, iFrom + chunkSize - 1).flat(), // from-to does not include "to"
2013
2016
  ]),
2014
2017
  },
2018
+ {
2019
+ target: _proxyContract.target,
2020
+ allowFailure: false,
2021
+ callData: _proxyContract.interface.encodeFunctionData("getMarginAccounts", [
2022
+ _nestedPerpetualIDs.slice(iFrom - 1, iFrom + chunkSize - 1).flat(), // from-to does not include "to"
2023
+ ZERO_ADDRESS,
2024
+ ]),
2025
+ },
2015
2026
  ];
2027
+
2016
2028
  // multicall
2017
2029
  const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
2018
2030
  const pools = _proxyContract.interface.decodeFunctionResult(
@@ -2022,15 +2034,32 @@ export default class MarketData extends PerpetualDataHandler {
2022
2034
  const perps = _proxyContract.interface.decodeFunctionResult(
2023
2035
  "getPerpetuals",
2024
2036
  encodedResults[1].returnData
2025
- )[0] as any[];
2026
-
2037
+ )[0] as PerpStorage.PerpetualDataStructOutput[];
2038
+ const margins = _proxyContract.interface.decodeFunctionResult(
2039
+ "getMarginAccounts",
2040
+ encodedResults[2].returnData
2041
+ )[0] as PerpStorage.MarginAccountStructOutput[];
2042
+ longShort = longShort.concat(MarketData._marginAccountsToPosBC(margins, perps));
2027
2043
  poolStates = poolStates.concat(MarketData._poolDataToPoolState(pools, _poolStaticInfos));
2028
- perpStates = perpStates.concat(MarketData._perpetualDataToPerpetualState(perps, _symbolList));
2044
+ perpStates = perpStates.concat(MarketData._perpetualDataToPerpetualState(perps, longShort, _symbolList));
2029
2045
  iFrom = iFrom + chunkSize + 1;
2030
2046
  }
2031
2047
  return { pools: poolStates, perpetuals: perpStates };
2032
2048
  }
2033
2049
 
2050
+ protected static _marginAccountsToPosBC(
2051
+ ms: PerpStorage.MarginAccountStructOutput[],
2052
+ p: PerpStorage.PerpetualDataStructOutput[]
2053
+ ): Array<[bigint, bigint]> {
2054
+ let longShort = new Array<[bigint, bigint]>();
2055
+ for (let k = 0; k < ms.length; k++) {
2056
+ const oi = p[k].fOpenInterest;
2057
+ const ammPos = ms[k].fPositionBC;
2058
+ longShort.push(PerpetualDataHandler._oiAndAmmPosToLongShort(oi, ammPos));
2059
+ }
2060
+ return longShort;
2061
+ }
2062
+
2034
2063
  /**
2035
2064
  * Parse liquidity pool state obtained on-chain
2036
2065
  * @param _liquidityPools
@@ -2068,21 +2097,29 @@ export default class MarketData extends PerpetualDataHandler {
2068
2097
  */
2069
2098
  protected static _perpetualDataToPerpetualState(
2070
2099
  _perpetuals: any[],
2100
+ _longShortBC: [bigint, bigint][],
2071
2101
  _symbolList: Map<string, string>
2072
2102
  ): PerpetualState[] {
2073
- const perpStates = _perpetuals.map((perp) => ({
2074
- id: Number(perp.id!),
2075
- state: PERP_STATE_STR[perp.state!],
2076
- baseCurrency: contractSymbolToSymbol(perp.S2BaseCCY!, _symbolList)!,
2077
- quoteCurrency: contractSymbolToSymbol(perp.S2QuoteCCY!, _symbolList)!,
2078
- indexPrice: 0, //fill later
2079
- collToQuoteIndexPrice: 0, //fill later
2080
- markPrice: ABK64x64ToFloat(perp.currentMarkPremiumRate!.fPrice), // fill later: indexS2 * (1 + markPremiumRate),
2081
- midPrice: 0, // fill later
2082
- currentFundingRateBps: 1e4 * ABK64x64ToFloat(perp.fCurrentFundingRate!),
2083
- openInterestBC: ABK64x64ToFloat(perp.fOpenInterest!),
2084
- isMarketClosed: false, //fill later
2085
- }));
2103
+ const perpStates = new Array<PerpetualState>();
2104
+ for (let k = 0; k < _perpetuals.length; k++) {
2105
+ const perp = _perpetuals[k];
2106
+ perpStates.push({
2107
+ //PerpetualState
2108
+ id: Number(perp.id!),
2109
+ state: PERP_STATE_STR[perp.state!],
2110
+ baseCurrency: contractSymbolToSymbol(perp.S2BaseCCY!, _symbolList)!,
2111
+ quoteCurrency: contractSymbolToSymbol(perp.S2QuoteCCY!, _symbolList)!,
2112
+ indexPrice: 0, //fill later
2113
+ collToQuoteIndexPrice: 0, //fill later
2114
+ markPrice: ABK64x64ToFloat(perp.currentMarkPremiumRate!.fPrice), // fill later: indexS2 * (1 + markPremiumRate),
2115
+ midPrice: 0, // fill later
2116
+ currentFundingRateBps: 1e4 * ABK64x64ToFloat(perp.fCurrentFundingRate!),
2117
+ openInterestBC: ABK64x64ToFloat(perp.fOpenInterest!),
2118
+ isMarketClosed: false, //fill later
2119
+ longBC: ABK64x64ToFloat(_longShortBC[k][0]),
2120
+ shortBC: ABK64x64ToFloat(_longShortBC[k][1]),
2121
+ });
2122
+ }
2086
2123
  return perpStates;
2087
2124
  }
2088
2125
 
@@ -150,6 +150,8 @@ export interface PerpetualState {
150
150
  midPrice: number;
151
151
  currentFundingRateBps: number;
152
152
  openInterestBC: number;
153
+ longBC: number;
154
+ shortBC: number;
153
155
  isMarketClosed: boolean;
154
156
  }
155
157
 
@@ -495,3 +497,32 @@ export interface LiquidityPoolData {
495
497
  totalSupplyShareToken: number; // state
496
498
  fBrokerFundCashCC: number; // state: amount of cash in broker fund
497
499
  }
500
+
501
+ // referral types:
502
+ export const referralDomain = {
503
+ name: "Referral System",
504
+ };
505
+ export const referralTypes = {
506
+ // ["string", "address", "uint32", "uint256"],
507
+ // [rc.code, rc.referrerAddr, passOnPercTwoDigitsFormat, Math.round(rc.createdOn)]
508
+ NewCode: [
509
+ { name: "Code", type: "string" },
510
+ { name: "ReferrerAddr", type: "address" },
511
+ { name: "PassOnPercTDF", type: "uint32" },
512
+ { name: "CreatedOn", type: "uint256" },
513
+ ],
514
+ // ["address", "address", "uint32", "uint256"],
515
+ // [rc.parentAddr, rc.referToAddr, passOnPercTwoDigitsFormat, Math.round(rc.createdOn)]
516
+ NewReferral: [
517
+ { name: "ParentAddr", type: "address" },
518
+ { name: "ReferToAddr", type: "address" },
519
+ { name: "PassOnPercTDF", type: "uint32" },
520
+ { name: "CreatedOn", type: "uint256" },
521
+ ],
522
+ // ["string", "address", "uint256"], [rc.code, rc.traderAddr, Math.round(rc.createdOn)]
523
+ CodeSelection: [
524
+ { name: "Code", type: "string" },
525
+ { name: "TraderAddr", type: "address" },
526
+ { name: "CreatedOn", type: "uint256" },
527
+ ],
528
+ };
@@ -648,7 +648,7 @@ export default class PerpetualDataHandler {
648
648
  referralRebate: ABK64x64ToFloat(perpInfos[j].fReferralRebateCC),
649
649
  priceIds: perpInfos[j].priceIds,
650
650
  isPyth: perpInfos[j].isPyth,
651
- perpFlags: BigInt(perpInfos[j].perpFlags.toString()),
651
+ perpFlags: BigInt(perpInfos[j].perpFlags?.toString() ?? 0),
652
652
  };
653
653
  infoArr.push(info);
654
654
  }
@@ -780,7 +780,7 @@ export default class PerpetualDataHandler {
780
780
  fTargetDFSize: ABK64x64ToFloat(BigInt(orig.fTargetDFSize)), // target default fund size
781
781
  fkStar: ABK64x64ToFloat(BigInt(orig.fkStar)), // signed trade size that minimizes the AMM risk
782
782
  fAMMTargetDD: ABK64x64ToFloat(BigInt(orig.fAMMTargetDD)), // parameter: target distance to default (=inverse of default probability)
783
- perpFlags: BigInt(orig.perpFlags?.toString()), // flags for perpetual
783
+ perpFlags: BigInt(orig.perpFlags?.toString() ?? 0), // flags for perpetual
784
784
  fMinimalTraderExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalTraderExposureEMA)), // parameter: minimal value for fCurrentTraderExposureEMA that we don't want to undershoot
785
785
  fMinimalAMMExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalAMMExposureEMA)), // parameter: minimal abs value for fCurrentAMMExposureEMA that we don't want to undershoot
786
786
  fSettlementS3PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS3PriceData)), //quanto index
@@ -1172,6 +1172,7 @@ export default class PerpetualDataHandler {
1172
1172
  symbol: string,
1173
1173
  symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1174
1174
  _proxyContract: Contract,
1175
+ _multicall: Multicall3,
1175
1176
  indexPrices: [number, number, boolean, boolean],
1176
1177
  overrides?: Overrides
1177
1178
  ): Promise<PerpetualState> {
@@ -1183,17 +1184,56 @@ export default class PerpetualDataHandler {
1183
1184
  } else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
1184
1185
  S3 = 1;
1185
1186
  }
1186
- let ammState = await _proxyContract.getAMMState(
1187
- perpId,
1188
- [S2, S3].map(floatToABK64x64) as [bigint, bigint],
1189
- overrides || {}
1190
- );
1191
- return PerpetualDataHandler._parseAMMState(symbol, ammState, indexPrices, symbolToPerpStaticInfo);
1187
+ // multicall
1188
+ const proxyCalls: Multicall3.Call3Struct[] = [
1189
+ {
1190
+ target: _proxyContract.target,
1191
+ allowFailure: false,
1192
+ callData: _proxyContract.interface.encodeFunctionData("getAMMState", [
1193
+ perpId,
1194
+ [S2, S3].map(floatToABK64x64) as [bigint, bigint],
1195
+ ]),
1196
+ },
1197
+ {
1198
+ target: _proxyContract.target,
1199
+ allowFailure: false,
1200
+ callData: _proxyContract.interface.encodeFunctionData("getMarginAccounts", [[perpId], ZERO_ADDRESS]),
1201
+ },
1202
+ ];
1203
+ // multicall
1204
+ const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
1205
+ let ammState = _proxyContract.interface.decodeFunctionResult("getAMMState", encodedResults[0].returnData)[0];
1206
+ const margin = _proxyContract.interface.decodeFunctionResult(
1207
+ "getMarginAccounts",
1208
+ encodedResults[1].returnData
1209
+ )[0] as any;
1210
+
1211
+ let longShort = PerpetualDataHandler._oiAndAmmPosToLongShort(ammState[11], margin[0].fPositionBC);
1212
+ return PerpetualDataHandler._parseAMMState(symbol, ammState, longShort, indexPrices, symbolToPerpStaticInfo);
1213
+ }
1214
+
1215
+ /**
1216
+ * Calculate long and short exposures from open interest and long/short
1217
+ * @param oi open interest
1218
+ * @param ammPos amm net exposure
1219
+ * @returns long, short exposure
1220
+ */
1221
+ protected static _oiAndAmmPosToLongShort(oi: bigint, ammPos: bigint): [bigint, bigint] {
1222
+ let short, long: bigint;
1223
+ if (ammPos > 0n) {
1224
+ short = oi;
1225
+ long = oi - ammPos;
1226
+ } else {
1227
+ long = oi;
1228
+ short = oi + ammPos;
1229
+ }
1230
+ return [long, short];
1192
1231
  }
1193
1232
 
1194
1233
  protected static _parseAMMState(
1195
1234
  symbol: string,
1196
1235
  ammState: bigint[],
1236
+ longShort: [bigint, bigint],
1197
1237
  indexPrices: [number, number, boolean, boolean],
1198
1238
  symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
1199
1239
  ) {
@@ -1219,6 +1259,8 @@ export default class PerpetualDataHandler {
1219
1259
  currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
1220
1260
  openInterestBC: ABK64x64ToFloat(ammState[11]),
1221
1261
  isMarketClosed: indexPrices[2] || indexPrices[3],
1262
+ longBC: ABK64x64ToFloat(longShort[0]),
1263
+ shortBC: ABK64x64ToFloat(longShort[1]),
1222
1264
  };
1223
1265
  return state;
1224
1266
  }
@@ -1374,10 +1416,10 @@ export default class PerpetualDataHandler {
1374
1416
  leverage: Number(order.leverageTDR) / 100,
1375
1417
  deadline: Number(order.iDeadline),
1376
1418
  executionTimestamp: Number(order.executionTimestamp),
1377
- submittedTimestamp: "submittedTimestamp" in order ? Number(order.submittedTimestamp) : undefined,
1419
+ submittedTimestamp: order["submittedTimestamp"] ? Number(order["submittedTimestamp"]) : undefined,
1378
1420
  parentChildOrderIds:
1379
- "parentChildDigest1" && "parentChildDigest2" in order
1380
- ? [order.parentChildDigest1.toString(), order.parentChildDigest2.toString()]
1421
+ order["parentChildDigest1"] && order["parentChildDigest2"]
1422
+ ? [order["parentChildDigest1"].toString(), order["parentChildDigest2"].toString()]
1381
1423
  : undefined,
1382
1424
  };
1383
1425
  return userOrder;
@@ -1515,12 +1557,7 @@ export default class PerpetualDataHandler {
1515
1557
  executionTimestamp: obOrder.executionTimestamp,
1516
1558
  } as SmartContractOrder;
1517
1559
  const order = PerpetualDataHandler.fromSmartContractOrder(scOrder, perpStaticInfo);
1518
- if (
1519
- obOrder.parentChildDigest1.toString() != ZERO_ORDER_ID ||
1520
- obOrder.parentChildDigest2.toString() != ZERO_ORDER_ID
1521
- ) {
1522
- order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
1523
- }
1560
+ order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
1524
1561
  return order;
1525
1562
  }
1526
1563