@d8x/perpetuals-sdk 2.1.0-alpha2 → 2.1.2-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/dist/cjs/abi/BeaconProxy.json +71 -0
  2. package/dist/cjs/abi/IPerpetualManager.json +35 -1
  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/LimitOrderBook.json +910 -0
  8. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +236 -0
  9. package/dist/cjs/accountTrade.d.ts +3 -3
  10. package/dist/cjs/accountTrade.js +1 -1
  11. package/dist/cjs/accountTrade.js.map +1 -1
  12. package/dist/cjs/brokerTool.js +8 -8
  13. package/dist/cjs/brokerTool.js.map +1 -1
  14. package/dist/cjs/config/defaultConfig.json +0 -12
  15. package/dist/cjs/config/priceFeedConfig.json +1 -1
  16. package/dist/cjs/constants.d.ts +0 -1
  17. package/dist/cjs/constants.js +2 -3
  18. package/dist/cjs/constants.js.map +1 -1
  19. package/dist/cjs/contracts/BeaconProxy.d.ts +63 -0
  20. package/dist/cjs/contracts/BeaconProxy.js +3 -0
  21. package/dist/cjs/contracts/BeaconProxy.js.map +1 -0
  22. package/dist/cjs/contracts/IPerpetualManager.d.ts +22 -4
  23. package/dist/cjs/contracts/Maintainer.d.ts +799 -0
  24. package/dist/cjs/contracts/Maintainer.js +3 -0
  25. package/dist/cjs/contracts/Maintainer.js.map +1 -0
  26. package/dist/cjs/contracts/MockToken.d.ts +263 -0
  27. package/dist/cjs/contracts/MockToken.js +3 -0
  28. package/dist/cjs/contracts/MockToken.js.map +1 -0
  29. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +118 -0
  30. package/dist/cjs/contracts/UUPSUpgradeable.js +3 -0
  31. package/dist/cjs/contracts/UUPSUpgradeable.js.map +1 -0
  32. package/dist/cjs/contracts/WeETH.d.ts +503 -0
  33. package/dist/cjs/contracts/WeETH.js +3 -0
  34. package/dist/cjs/contracts/WeETH.js.map +1 -0
  35. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +61 -0
  36. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +89 -0
  37. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +1 -0
  38. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +27 -1
  39. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +35 -1
  40. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  41. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +609 -0
  42. package/dist/cjs/contracts/factories/Maintainer__factory.js +792 -0
  43. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +1 -0
  44. package/dist/{esm/contracts/factories/PerpStorage__factory.d.ts → cjs/contracts/factories/MockToken__factory.d.ts} +128 -115
  45. package/dist/cjs/contracts/factories/MockToken__factory.js +365 -0
  46. package/dist/cjs/contracts/factories/MockToken__factory.js.map +1 -0
  47. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +87 -0
  48. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +122 -0
  49. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +1 -0
  50. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +545 -0
  51. package/dist/cjs/contracts/factories/WeETH__factory.js +721 -0
  52. package/dist/cjs/contracts/factories/WeETH__factory.js.map +1 -0
  53. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +4136 -0
  54. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +5324 -0
  55. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +1 -0
  56. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +189 -0
  57. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +254 -0
  58. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +1 -0
  59. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +715 -0
  60. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +928 -0
  61. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +1 -0
  62. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +344 -0
  63. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +456 -0
  64. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +1 -0
  65. package/dist/cjs/contracts/factories/lean0/index.d.ts +4 -0
  66. package/dist/cjs/contracts/factories/lean0/index.js +15 -0
  67. package/dist/cjs/contracts/factories/lean0/index.js.map +1 -0
  68. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +2821 -0
  69. package/dist/cjs/contracts/lean0/IPerpetualManager.js +3 -0
  70. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +1 -0
  71. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +533 -0
  72. package/dist/cjs/contracts/lean0/LimitOrderBook.js +3 -0
  73. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +1 -0
  74. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +210 -0
  75. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +3 -0
  76. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +1 -0
  77. package/dist/cjs/contracts/lean0/ShareToken.d.ts +320 -0
  78. package/dist/cjs/contracts/lean0/ShareToken.js +3 -0
  79. package/dist/cjs/contracts/lean0/ShareToken.js.map +1 -0
  80. package/dist/cjs/contracts/lean0/index.d.ts +4 -0
  81. package/dist/cjs/contracts/lean0/index.js +3 -0
  82. package/dist/cjs/contracts/lean0/index.js.map +1 -0
  83. package/dist/cjs/d8XMath.d.ts +17 -1
  84. package/dist/cjs/d8XMath.js +29 -5
  85. package/dist/cjs/d8XMath.js.map +1 -1
  86. package/dist/cjs/liquidatorTool.js +2 -2
  87. package/dist/cjs/liquidatorTool.js.map +1 -1
  88. package/dist/cjs/marketData.d.ts +4 -4
  89. package/dist/cjs/marketData.js +45 -17
  90. package/dist/cjs/marketData.js.map +1 -1
  91. package/dist/cjs/nodeSDKTypes.d.ts +3 -2
  92. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  93. package/dist/cjs/perpetualDataHandler.d.ts +9 -8
  94. package/dist/cjs/perpetualDataHandler.js +17 -6
  95. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  96. package/dist/cjs/polyMktsPxFeed.d.ts +1 -1
  97. package/dist/cjs/polyMktsPxFeed.js +15 -4
  98. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  99. package/dist/cjs/priceFeeds.js +2 -2
  100. package/dist/cjs/priceFeeds.js.map +1 -1
  101. package/dist/cjs/version.d.ts +1 -1
  102. package/dist/cjs/version.js +1 -1
  103. package/dist/cjs/writeAccessHandler.js +1 -1
  104. package/dist/cjs/writeAccessHandler.js.map +1 -1
  105. package/dist/esm/abi/BeaconProxy.json +71 -0
  106. package/dist/esm/abi/IPerpetualManager.json +35 -1
  107. package/dist/esm/abi/Maintainer.json +774 -0
  108. package/dist/esm/abi/MockToken.json +347 -0
  109. package/dist/esm/abi/UUPSUpgradeable.json +104 -0
  110. package/dist/esm/abi/WeETH.json +310 -0
  111. package/dist/esm/abi/lean0/IPerpetualManager.json +5306 -0
  112. package/dist/esm/abi/lean0/LimitOrderBook.json +910 -0
  113. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +236 -0
  114. package/dist/esm/abi/lean0/ShareToken.json +438 -0
  115. package/dist/esm/abi-zkevm/LimitOrderBook.json +910 -0
  116. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +236 -0
  117. package/dist/esm/accountTrade.d.ts +3 -3
  118. package/dist/esm/accountTrade.js +1 -1
  119. package/dist/esm/accountTrade.js.map +1 -1
  120. package/dist/esm/brokerTool.js +8 -8
  121. package/dist/esm/brokerTool.js.map +1 -1
  122. package/dist/esm/config/defaultConfig.json +0 -12
  123. package/dist/esm/config/priceFeedConfig.json +1 -1
  124. package/dist/esm/constants.d.ts +0 -1
  125. package/dist/esm/constants.js +1 -2
  126. package/dist/esm/constants.js.map +1 -1
  127. package/dist/esm/contracts/BeaconProxy.d.ts +63 -0
  128. package/dist/esm/contracts/BeaconProxy.js +2 -0
  129. package/dist/esm/contracts/BeaconProxy.js.map +1 -0
  130. package/dist/esm/contracts/IPerpetualManager.d.ts +22 -4
  131. package/dist/esm/contracts/Maintainer.d.ts +799 -0
  132. package/dist/esm/contracts/Maintainer.js +2 -0
  133. package/dist/esm/contracts/Maintainer.js.map +1 -0
  134. package/dist/esm/contracts/MockToken.d.ts +263 -0
  135. package/dist/esm/contracts/MockToken.js +2 -0
  136. package/dist/esm/contracts/MockToken.js.map +1 -0
  137. package/dist/esm/contracts/UUPSUpgradeable.d.ts +118 -0
  138. package/dist/esm/contracts/UUPSUpgradeable.js +2 -0
  139. package/dist/esm/contracts/UUPSUpgradeable.js.map +1 -0
  140. package/dist/esm/contracts/WeETH.d.ts +503 -0
  141. package/dist/esm/contracts/WeETH.js +2 -0
  142. package/dist/esm/contracts/WeETH.js.map +1 -0
  143. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +61 -0
  144. package/dist/esm/contracts/factories/BeaconProxy__factory.js +85 -0
  145. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +1 -0
  146. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +27 -1
  147. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +35 -1
  148. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  149. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +609 -0
  150. package/dist/esm/contracts/factories/Maintainer__factory.js +788 -0
  151. package/dist/esm/contracts/factories/Maintainer__factory.js.map +1 -0
  152. package/dist/esm/contracts/factories/MockToken__factory.d.ts +273 -0
  153. package/dist/esm/contracts/factories/{PerpStorage__factory.js → MockToken__factory.js} +139 -128
  154. package/dist/esm/contracts/factories/MockToken__factory.js.map +1 -0
  155. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +87 -0
  156. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +118 -0
  157. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +1 -0
  158. package/dist/esm/contracts/factories/WeETH__factory.d.ts +545 -0
  159. package/dist/esm/contracts/factories/WeETH__factory.js +717 -0
  160. package/dist/esm/contracts/factories/WeETH__factory.js.map +1 -0
  161. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +4136 -0
  162. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +5320 -0
  163. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +1 -0
  164. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +189 -0
  165. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +250 -0
  166. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +1 -0
  167. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +715 -0
  168. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +924 -0
  169. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +1 -0
  170. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +344 -0
  171. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +452 -0
  172. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +1 -0
  173. package/dist/esm/contracts/factories/lean0/index.d.ts +4 -0
  174. package/dist/esm/contracts/factories/lean0/index.js +8 -0
  175. package/dist/esm/contracts/factories/lean0/index.js.map +1 -0
  176. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +2821 -0
  177. package/dist/esm/contracts/lean0/IPerpetualManager.js +2 -0
  178. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +1 -0
  179. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +533 -0
  180. package/dist/esm/contracts/lean0/LimitOrderBook.js +2 -0
  181. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +1 -0
  182. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +210 -0
  183. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +2 -0
  184. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +1 -0
  185. package/dist/esm/contracts/lean0/ShareToken.d.ts +320 -0
  186. package/dist/esm/contracts/lean0/ShareToken.js +2 -0
  187. package/dist/esm/contracts/lean0/ShareToken.js.map +1 -0
  188. package/dist/esm/contracts/lean0/index.d.ts +4 -0
  189. package/dist/esm/contracts/lean0/index.js +2 -0
  190. package/dist/esm/contracts/lean0/index.js.map +1 -0
  191. package/dist/esm/d8XMath.d.ts +17 -1
  192. package/dist/esm/d8XMath.js +27 -4
  193. package/dist/esm/d8XMath.js.map +1 -1
  194. package/dist/esm/liquidatorTool.js +2 -2
  195. package/dist/esm/liquidatorTool.js.map +1 -1
  196. package/dist/esm/marketData.d.ts +4 -4
  197. package/dist/esm/marketData.js +46 -18
  198. package/dist/esm/marketData.js.map +1 -1
  199. package/dist/esm/nodeSDKTypes.d.ts +3 -2
  200. package/dist/esm/nodeSDKTypes.js.map +1 -1
  201. package/dist/esm/perpetualDataHandler.d.ts +9 -8
  202. package/dist/esm/perpetualDataHandler.js +19 -8
  203. package/dist/esm/perpetualDataHandler.js.map +1 -1
  204. package/dist/esm/polyMktsPxFeed.d.ts +1 -1
  205. package/dist/esm/polyMktsPxFeed.js +15 -4
  206. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  207. package/dist/esm/priceFeeds.js +2 -2
  208. package/dist/esm/priceFeeds.js.map +1 -1
  209. package/dist/esm/version.d.ts +1 -1
  210. package/dist/esm/version.js +1 -1
  211. package/dist/esm/writeAccessHandler.js +3 -3
  212. package/dist/esm/writeAccessHandler.js.map +1 -1
  213. package/doc/brokerTool.md +3 -1
  214. package/doc/d8x-perpetuals-sdk.md +804 -132
  215. package/doc/marketData.md +813 -0
  216. package/doc/perpetualDataHandler.md +76 -7
  217. package/package.json +1 -1
  218. package/src/abi/IPerpetualManager.json +35 -1
  219. package/src/accountTrade.ts +3 -3
  220. package/src/brokerTool.ts +8 -8
  221. package/src/config/defaultConfig.json +0 -13
  222. package/src/config/priceFeedConfig.json +1 -1
  223. package/src/constants.ts +1 -2
  224. package/src/contracts/IPerpetualManager.ts +35 -3
  225. package/src/contracts/factories/IPerpetualManager__factory.ts +35 -1
  226. package/src/d8XMath.ts +28 -4
  227. package/src/liquidatorTool.ts +2 -2
  228. package/src/marketData.ts +49 -20
  229. package/src/nodeSDKTypes.ts +3 -2
  230. package/src/perpetualDataHandler.ts +26 -15
  231. package/src/polyMktsPxFeed.ts +15 -4
  232. package/src/priceFeeds.ts +2 -2
  233. package/src/version.ts +1 -1
  234. package/src/writeAccessHandler.ts +2 -2
  235. package/dist/esm/contracts/factories/PerpStorage__factory.js.map +0 -1
  236. package/src/abi-zkevm/IPerpetualManager.json +0 -5366
package/src/marketData.ts CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  } from "./constants";
17
17
  import {
18
18
  ERC20__factory,
19
+ IPerpetualManager__factory,
19
20
  LimitOrderBook__factory,
20
21
  Multicall3__factory,
21
22
  type LimitOrderBook,
@@ -114,7 +115,7 @@ export default class MarketData extends PerpetualDataHandler {
114
115
  const mktData = providerOrMarketData;
115
116
  this.nodeURL = mktData.config.nodeURL;
116
117
  this.provider = new JsonRpcProvider(mktData.config.nodeURL, mktData.network, { staticNetwork: true });
117
- this.proxyContract = new Contract(mktData.getProxyAddress(), this.config.proxyABI!, this.provider);
118
+ this.proxyContract = IPerpetualManager__factory.connect(mktData.getProxyAddress(), this.provider);
118
119
  this.multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, this.provider);
119
120
  ({
120
121
  nestedPerpetualIDs: this.nestedPerpetualIDs,
@@ -179,9 +180,9 @@ export default class MarketData extends PerpetualDataHandler {
179
180
  * }
180
181
  * main();
181
182
  *
182
- * @returns {Contract} read-only proxy instance
183
+ * @returns read-only proxy instance
183
184
  */
184
- public getReadOnlyProxyInstance(): Contract {
185
+ public getReadOnlyProxyInstance() {
185
186
  if (this.proxyContract == null) {
186
187
  throw Error("no proxy contract initialized. Use createProxyInstance().");
187
188
  }
@@ -478,7 +479,7 @@ export default class MarketData extends PerpetualDataHandler {
478
479
  const isPredMkt = this.isPredictionMarket(symbol);
479
480
  // create all calls
480
481
  const perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
481
- const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3, indexPriceInfo.ema].map((x) =>
482
+ const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3 ?? 0, indexPriceInfo.ema].map((x) =>
482
483
  floatToABK64x64(x)
483
484
  ) as [bigint, bigint, bigint];
484
485
  const proxyCalls: Multicall3.Call3Struct[] = [
@@ -556,7 +557,7 @@ export default class MarketData extends PerpetualDataHandler {
556
557
  fPrice = await this.proxyContract.queryPerpetualPrice(
557
558
  perpId,
558
559
  floatToABK64x64(tradeAmountBC),
559
- [indexPriceInfo.s2, indexPriceInfo.s3],
560
+ [floatToABK64x64(indexPriceInfo.s2), floatToABK64x64(indexPriceInfo.s3 ?? 0)],
560
561
  indexPriceInfo.conf,
561
562
  indexPriceInfo.predMktCLOBParams
562
563
  );
@@ -748,12 +749,20 @@ export default class MarketData extends PerpetualDataHandler {
748
749
  let newMarginCashCC = currentMarginCashCC + deltaCashCC + traderDepositCC;
749
750
  let newEntryPrice = newPositionBC == 0 ? 0 : Math.abs(newLockedInValueQC / newPositionBC);
750
751
  let newMarginBalanceCC = newMarginCashCC + (newPositionBC * Sm - newLockedInValueQC) / S3;
751
- let newLeverage =
752
- newPositionBC == 0
753
- ? 0
754
- : newMarginBalanceCC <= 0
755
- ? Infinity
756
- : (Math.abs(newPositionBC) * Sm) / S3 / newMarginBalanceCC;
752
+
753
+ let newLeverage: number;
754
+ if (newPositionBC === 0) {
755
+ newLeverage = 0;
756
+ } else if (newMarginBalanceCC <= 0) {
757
+ newLeverage = Infinity;
758
+ } else {
759
+ let p = Sm;
760
+ if (isPredMkt) {
761
+ p -= 1;
762
+ p = newPositionBC > 0 ? p : 1 - p;
763
+ }
764
+ newLeverage = Math.abs(newPositionBC * p) / S3 / newMarginBalanceCC;
765
+ }
757
766
 
758
767
  // Liquidation params
759
768
  let [S2Liq, S3Liq, tau] = MarketData._getLiquidationParams(
@@ -804,8 +813,16 @@ export default class MarketData extends PerpetualDataHandler {
804
813
  maxMaintMgnRate: number,
805
814
  Sm: number,
806
815
  tradeAmtBC: number,
816
+ traderPosBC: number,
807
817
  tradeMgnRate: number
808
818
  ): number {
819
+ const isClose = Math.sign(traderPosBC) != Math.sign(tradeAmtBC);
820
+ const isFlip =
821
+ Math.abs(traderPosBC + tradeAmtBC) > 0.01 && Math.sign(traderPosBC + tradeAmtBC) != Math.sign(traderPosBC);
822
+ if (isClose && !isFlip) {
823
+ // 0.1cents if is close
824
+ return 0.001;
825
+ }
809
826
  return pmExchangeFee(Sm - 1, maxMaintMgnRate, state.shortBC, state.longBC, tradeAmtBC, tradeMgnRate);
810
827
  }
811
828
 
@@ -1185,7 +1202,7 @@ export default class MarketData extends PerpetualDataHandler {
1185
1202
  const perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
1186
1203
  const poolInfo = this.poolStaticInfos[this.getPoolStaticInfoIndexFromSymbol(symbol)];
1187
1204
  const indexPriceInfo = await this.priceFeedGetter.fetchPricesForPerpetual(symbol);
1188
- const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3, indexPriceInfo.ema].map((x) =>
1205
+ const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3 ?? 0, indexPriceInfo.ema].map((x) =>
1189
1206
  floatToABK64x64(x)
1190
1207
  ) as [bigint, bigint, bigint];
1191
1208
  const proxyCalls: Multicall3.Call3Struct[] = [
@@ -1258,20 +1275,20 @@ export default class MarketData extends PerpetualDataHandler {
1258
1275
  account.entryPrice * currentPositionBC,
1259
1276
  Sm,
1260
1277
  Sm,
1261
- indexPriceInfo.s3,
1278
+ indexPriceInfo.s3 ?? 0,
1262
1279
  totLong,
1263
1280
  totShort,
1264
1281
  maxShortPosPerp,
1265
1282
  maxLongPosPerp
1266
1283
  );
1267
1284
  const maxLong = pmFindMaxTradeSize(
1268
- -1,
1285
+ 1,
1269
1286
  currentPositionBC,
1270
1287
  availCashCC,
1271
1288
  account.entryPrice * currentPositionBC,
1272
1289
  Sm,
1273
1290
  Sm,
1274
- indexPriceInfo.s3,
1291
+ indexPriceInfo.s3 ?? 0,
1275
1292
  totLong,
1276
1293
  totShort,
1277
1294
  maxShortPosPerp,
@@ -1355,7 +1372,7 @@ export default class MarketData extends PerpetualDataHandler {
1355
1372
  const isPredMkt = false;
1356
1373
  const indexPriceInfo = await this.priceFeedGetter.fetchPricesForPerpetual(symbol);
1357
1374
  let coll2SettlePromise = this.fetchCollateralToSettlementConversion(symbol);
1358
- const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3, indexPriceInfo.ema].map((x) =>
1375
+ const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3 ?? 0, indexPriceInfo.ema].map((x) =>
1359
1376
  floatToABK64x64(x)
1360
1377
  ) as [bigint, bigint, bigint];
1361
1378
  if (!this.proxyContract || !this.multicall) {
@@ -1516,12 +1533,11 @@ export default class MarketData extends PerpetualDataHandler {
1516
1533
  *
1517
1534
  * @returns {number} Price of index in given currency.
1518
1535
  */
1519
- public async getOraclePrice(base: string, quote: string, overrides?: Overrides): Promise<number | undefined> {
1536
+ public async getOraclePrice(base: string, quote: string, overrides?: Overrides) {
1520
1537
  if (!this.proxyContract) {
1521
1538
  throw Error("no proxy contract initialized. Use createProxyInstance().");
1522
1539
  }
1523
- let px = await this.proxyContract.getOraclePrice([toBytes4(base), toBytes4(quote)], overrides || {});
1524
- return px == undefined ? undefined : ABK64x64ToFloat(px);
1540
+ return await this.proxyContract.getOraclePrice([toBytes4(base), toBytes4(quote)], overrides || {});
1525
1541
  }
1526
1542
 
1527
1543
  /**
@@ -1669,7 +1685,7 @@ export default class MarketData extends PerpetualDataHandler {
1669
1685
  quantity,
1670
1686
  this.symbolToPerpStaticInfo,
1671
1687
  this.proxyContract,
1672
- [priceInfo.s2, priceInfo.s3], //s2,s3
1688
+ [priceInfo.s2, priceInfo.s3 ?? 0], //s2,s3
1673
1689
  priceInfo.conf, //conf
1674
1690
  priceInfo.predMktCLOBParams, //params
1675
1691
  overrides
@@ -2293,6 +2309,7 @@ export default class MarketData extends PerpetualDataHandler {
2293
2309
  indexPrice: 0, //fill later
2294
2310
  collToQuoteIndexPrice: 0, //fill later
2295
2311
  markPremium: ABK64x64ToFloat(perp.currentMarkPremiumRate!.fPrice),
2312
+ markPrice: 0, //fill later
2296
2313
  midPrice: 0, // fill later
2297
2314
  currentFundingRateBps: 1e4 * ABK64x64ToFloat(perp.fCurrentFundingRate!),
2298
2315
  openInterestBC: ABK64x64ToFloat(perp.fOpenInterest!),
@@ -2376,6 +2393,18 @@ export default class MarketData extends PerpetualDataHandler {
2376
2393
  indexS3 = idxPriceS3Pair[0];
2377
2394
  }
2378
2395
  perp.collToQuoteIndexPrice = indexS3;
2396
+
2397
+ const emaKey = info!.S2Symbol + ":ema";
2398
+ let markPrice: number;
2399
+ if (idxPriceMap.has(emaKey)) {
2400
+ let ema: number;
2401
+ let res = idxPriceMap.get(emaKey);
2402
+ ema = res![0];
2403
+ markPrice = ema + perp.markPremium;
2404
+ } else {
2405
+ markPrice = perp.indexPrice * (1 + perp.markPremium);
2406
+ }
2407
+ perp.markPrice = markPrice;
2379
2408
  perp.midPrice = midPriceMap.get(symbol3s!)!;
2380
2409
  // which pool?
2381
2410
  const poolId = info!.poolId;
@@ -147,6 +147,7 @@ export interface PerpetualState {
147
147
  indexPrice: number;
148
148
  collToQuoteIndexPrice: number;
149
149
  markPremium: number;
150
+ markPrice: number;
150
151
  midPrice: number;
151
152
  currentFundingRateBps: number;
152
153
  openInterestBC: number;
@@ -539,10 +540,10 @@ export const referralTypes = {
539
540
  // prediction markets and regular markets
540
541
  export interface IdxPriceInfo {
541
542
  s2: number;
542
- s3: number;
543
+ s3?: number;
543
544
  ema: number;
544
545
  s2MktClosed: boolean;
545
- s3MktClosed: boolean;
546
+ s3MktClosed?: boolean;
546
547
  conf: bigint;
547
548
  predMktCLOBParams: bigint;
548
549
  }
@@ -37,6 +37,7 @@ import {
37
37
  } from "./constants";
38
38
  import {
39
39
  ERC20__factory,
40
+ IPerpetualManager__factory,
40
41
  LimitOrderBook,
41
42
  LimitOrderBookFactory,
42
43
  LimitOrderBookFactory__factory,
@@ -45,7 +46,7 @@ import {
45
46
  Multicall3__factory,
46
47
  OracleFactory__factory,
47
48
  } from "./contracts";
48
- import { IPerpetualInfo } from "./contracts/IPerpetualManager";
49
+ import { IPerpetualInfo, IPerpetualManager } from "./contracts/IPerpetualManager";
49
50
  import { IClientOrder, IPerpetualOrder } from "./contracts/LimitOrderBook";
50
51
 
51
52
  import {
@@ -111,7 +112,7 @@ export default class PerpetualDataHandler {
111
112
  protected symbolToTokenAddrMap: Map<string, string>;
112
113
  public chainId: bigint;
113
114
  public network: Network;
114
- protected proxyContract: Contract | null = null;
115
+ protected proxyContract: IPerpetualManager | null = null;
115
116
  protected proxyABI: Interface;
116
117
  protected proxyAddr: string;
117
118
  // oracle
@@ -181,7 +182,7 @@ export default class PerpetualDataHandler {
181
182
  if (network.chainId !== this.chainId) {
182
183
  throw new Error(`Provider: chain id ${network.chainId} does not match config (${this.chainId})`);
183
184
  }
184
- this.proxyContract = new Contract(this.proxyAddr, this.config.proxyABI!, signerOrProvider);
185
+ this.proxyContract = IPerpetualManager__factory.connect(this.proxyAddr, signerOrProvider);
185
186
  this.multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, this.signerOrProvider);
186
187
  await this._fillSymbolMaps(overrides);
187
188
  }
@@ -616,7 +617,7 @@ export default class PerpetualDataHandler {
616
617
  * @returns array with PerpetualStaticInfo for each perpetual
617
618
  */
618
619
  public static async getPerpetualStaticInfo(
619
- _proxyContract: Contract,
620
+ _proxyContract: IPerpetualManager,
620
621
  nestedPerpetualIDs: Array<Array<number>>,
621
622
  symbolList: Map<string, string>,
622
623
  overrides?: Overrides
@@ -695,7 +696,7 @@ export default class PerpetualDataHandler {
695
696
  public static async _getLiquidityPools(
696
697
  fromIdx: number,
697
698
  toIdx: number,
698
- _proxyContract: Contract,
699
+ _proxyContract: IPerpetualManager,
699
700
  _symbolList: Map<string, string>,
700
701
  overrides?: Overrides
701
702
  ): Promise<LiquidityPoolData[]> {
@@ -742,7 +743,7 @@ export default class PerpetualDataHandler {
742
743
  */
743
744
  public static async _getPerpetuals(
744
745
  ids: number[],
745
- _proxyContract: Contract,
746
+ _proxyContract: IPerpetualManager,
746
747
  _symbolList: Map<string, string>,
747
748
  overrides?: Overrides
748
749
  ): Promise<PerpetualData[]> {
@@ -813,7 +814,7 @@ export default class PerpetualDataHandler {
813
814
  }
814
815
 
815
816
  public static async getPoolStaticInfo(
816
- _proxyContract: Contract,
817
+ _proxyContract: IPerpetualManager,
817
818
  overrides?: Overrides
818
819
  ): Promise<{
819
820
  nestedPerpetualIDs: Array<Array<number>>;
@@ -932,7 +933,7 @@ export default class PerpetualDataHandler {
932
933
  let traderState = await _proxyContract.getTraderState(
933
934
  perpId,
934
935
  traderAddr,
935
- [_pxInfo.ema, _pxInfo.s3].map((x) => floatToABK64x64(x)) as [bigint, bigint],
936
+ [_pxInfo.ema, _pxInfo.s3 ?? 0].map((x) => floatToABK64x64(x)) as [bigint, bigint],
936
937
  overrides || {}
937
938
  );
938
939
  return PerpetualDataHandler.buildMarginAccountFromState(
@@ -1132,7 +1133,7 @@ export default class PerpetualDataHandler {
1132
1133
  callData: _proxyContract.interface.encodeFunctionData("getTraderState", [
1133
1134
  PerpetualDataHandler.symbolToPerpetualId(symbols[i], symbolToPerpStaticInfo),
1134
1135
  _addr,
1135
- [_pxInfo[i].ema, _pxInfo[i].s3].map((x) => floatToABK64x64(x)) as [bigint, bigint],
1136
+ [_pxInfo[i].ema, _pxInfo[i].s3 ?? 0].map((x) => floatToABK64x64(x)) as [bigint, bigint],
1136
1137
  ]),
1137
1138
  }));
1138
1139
  const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
@@ -1155,7 +1156,7 @@ export default class PerpetualDataHandler {
1155
1156
  symbol: string,
1156
1157
  tradeAmount: number,
1157
1158
  symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1158
- _proxyContract: Contract,
1159
+ _proxyContract: IPerpetualManager,
1159
1160
  indexPrices: [number, number],
1160
1161
  conf: bigint,
1161
1162
  params: bigint,
@@ -1187,7 +1188,7 @@ export default class PerpetualDataHandler {
1187
1188
  protected static async _queryPerpetualMarkPrice(
1188
1189
  symbol: string,
1189
1190
  symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1190
- _proxyContract: Contract,
1191
+ _proxyContract: IPerpetualManager,
1191
1192
  indexPrices: IdxPriceInfo,
1192
1193
  isPredMkt: boolean,
1193
1194
  overrides?: Overrides
@@ -1207,7 +1208,7 @@ export default class PerpetualDataHandler {
1207
1208
  protected static async _queryPerpetualState(
1208
1209
  symbol: string,
1209
1210
  symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1210
- _proxyContract: Contract,
1211
+ _proxyContract: IPerpetualManager,
1211
1212
  _multicall: Multicall3,
1212
1213
  indexPrices: IdxPriceInfo,
1213
1214
  overrides?: Overrides
@@ -1226,7 +1227,7 @@ export default class PerpetualDataHandler {
1226
1227
  allowFailure: false,
1227
1228
  callData: _proxyContract.interface.encodeFunctionData("getAMMState", [
1228
1229
  perpId,
1229
- [indexPrices.s2, indexPrices.s3].map(floatToABK64x64) as [bigint, bigint],
1230
+ [indexPrices.s2, indexPrices.s3 ?? 0].map(floatToABK64x64) as [bigint, bigint],
1230
1231
  ]),
1231
1232
  },
1232
1233
  {
@@ -1281,18 +1282,28 @@ export default class PerpetualDataHandler {
1281
1282
  } else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
1282
1283
  S3 = 1;
1283
1284
  }
1285
+ const isPred = PerpetualDataHandler.isPredictionMarketStatic(staticInfo);
1286
+ let markPrice: number;
1287
+ if (isPred) {
1288
+ // ema + premium
1289
+ markPrice = indexPrices.ema + ABK64x64ToFloat(ammState[8]);
1290
+ } else {
1291
+ // S2 * (1+premium)
1292
+ markPrice = indexPrices.s2 * (1 + ABK64x64ToFloat(ammState[8]));
1293
+ }
1284
1294
  let state: PerpetualState = {
1285
1295
  id: perpId,
1286
1296
  state: PERP_STATE_STR[Number(ammState[13])],
1287
1297
  baseCurrency: ccy[0],
1288
1298
  quoteCurrency: ccy[1],
1289
1299
  indexPrice: S2,
1290
- collToQuoteIndexPrice: S3,
1300
+ collToQuoteIndexPrice: S3 ?? (ccy[0] === ccy[1] ? S2 : 1),
1291
1301
  markPremium: ABK64x64ToFloat(ammState[8]),
1302
+ markPrice: markPrice,
1292
1303
  midPrice: ABK64x64ToFloat(ammState[10]),
1293
1304
  currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
1294
1305
  openInterestBC: ABK64x64ToFloat(ammState[11]),
1295
- isMarketClosed: indexPrices.s2MktClosed || indexPrices.s3MktClosed,
1306
+ isMarketClosed: indexPrices.s2MktClosed || (indexPrices.s3MktClosed !== undefined && indexPrices.s3MktClosed),
1296
1307
  longBC: ABK64x64ToFloat(longShort[0]),
1297
1308
  shortBC: ABK64x64ToFloat(longShort[1]),
1298
1309
  };
@@ -16,8 +16,19 @@ export default class PolyMktsPxFeed {
16
16
  private ids: Map<string, PolyConfig>;
17
17
  private oracleEndpoint: string;
18
18
 
19
- constructor(config: PriceFeedConfig, oracleEndpoint: string) {
19
+ constructor(config: PriceFeedConfig) {
20
20
  this.ids = new Map<string, PolyConfig>();
21
+ this.oracleEndpoint = "";
22
+ for (let k = 0; k < config.endpoints.length; k++) {
23
+ if (config.endpoints[k].type == "polymarket") {
24
+ let endp = config.endpoints[k].writeEndpoints;
25
+ this.oracleEndpoint = endp[Math.floor(Math.random() * endp.length)];
26
+ break;
27
+ }
28
+ }
29
+ if (this.oracleEndpoint == "") {
30
+ throw Error("no polymarkets write endpoint defined in priceFeedConfig");
31
+ }
21
32
  for (let k = 0; k < config.ids.length; k++) {
22
33
  if (config.ids[k].type == "polymarket") {
23
34
  const sym = config.ids[k].symbol;
@@ -31,7 +42,7 @@ export default class PolyMktsPxFeed {
31
42
  }
32
43
  }
33
44
 
34
- this.oracleEndpoint = oracleEndpoint.replace(/\/$/, "") + "v2/updates/price/latest?encoding=base64&ids[]=";
45
+ this.oracleEndpoint = this.oracleEndpoint.replace(/\/$/, "") + "/v2/updates/price/latest?encoding=base64&ids[]=";
35
46
  }
36
47
 
37
48
  public isPolyMktsSym(sym: string) {
@@ -58,8 +69,8 @@ export default class PolyMktsPxFeed {
58
69
  throw new Error(`failed to fetch posts (${response.status}): ${response.statusText} ${query}`);
59
70
  }
60
71
  const data = await response.json();
61
- const emaObj = data.parsed.ema_price as PriceFeedJson;
62
- const pxObj = data.parsed.price as PriceFeedJson;
72
+ const emaObj = data.parsed[0].ema_price as PriceFeedJson;
73
+ const pxObj = data.parsed[0].price as PriceFeedJson;
63
74
 
64
75
  const px = Number(pxObj.price) * Math.pow(10, pxObj.expo);
65
76
  const ema = Number(emaObj.price) * Math.pow(10, emaObj.expo);
package/src/priceFeeds.ts CHANGED
@@ -68,8 +68,7 @@ export default class PriceFeeds {
68
68
  if (this.writeFeedEndpoints.length == 0) {
69
69
  throw new Error("PriceFeeds: no writeEndpoints provided in config");
70
70
  }
71
- const idx = Math.floor(Math.random() * this.writeFeedEndpoints.length);
72
- this.polyMktsPxFeed = new PolyMktsPxFeed(this.config, this.writeFeedEndpoints[idx]);
71
+ this.polyMktsPxFeed = new PolyMktsPxFeed(this.config);
73
72
  this.dataHandler = dataHandler;
74
73
  this.triangulations = new Map<string, [string[], boolean[]]>();
75
74
  }
@@ -352,6 +351,7 @@ export default class PriceFeeds {
352
351
  prices.push(info);
353
352
  } catch (error) {
354
353
  console.log("fetchPriceForSym failed for " + symbols[k]);
354
+ console.log(error);
355
355
  prices.push(undefined);
356
356
  }
357
357
  if (k > 0) {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const D8X_SDK_VERSION = "2.1.0-alpha2";
1
+ export const D8X_SDK_VERSION = "2.1.2-alpha2";
@@ -9,7 +9,7 @@ import {
9
9
  Wallet,
10
10
  } from "ethers";
11
11
  import { MAX_UINT_256, MULTICALL_ADDRESS } from "./constants";
12
- import { ERC20__factory, MockTokenSwap__factory, Multicall3__factory } from "./contracts";
12
+ import { ERC20__factory, IPerpetualManager__factory, MockTokenSwap__factory, Multicall3__factory } from "./contracts";
13
13
  import { PayableOverrides } from "./contracts/common";
14
14
  import { floatToDecN } from "./d8XMath";
15
15
  import MarketData from "./marketData";
@@ -66,7 +66,7 @@ export default class WriteAccessHandler extends PerpetualDataHandler {
66
66
  const mktData = providerOrMarketData;
67
67
  this.nodeURL = mktData.config.nodeURL;
68
68
  this.provider = new JsonRpcProvider(mktData.config.nodeURL, mktData.network, { staticNetwork: true });
69
- this.proxyContract = new Contract(mktData.getProxyAddress(), this.config.proxyABI!, this.provider);
69
+ this.proxyContract = IPerpetualManager__factory.connect(mktData.getProxyAddress(), this.provider);
70
70
  this.multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, this.provider);
71
71
  ({
72
72
  nestedPerpetualIDs: this.nestedPerpetualIDs,
@@ -1 +0,0 @@
1
- {"version":3,"file":"PerpStorage__factory.js","sourceRoot":"","sources":["../../../../src/contracts/factories/PerpStorage__factory.ts"],"names":[],"mappings":"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"}