@d8x/perpetuals-sdk 2.6.23 → 2.7.0

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 (253) hide show
  1. package/dist/cjs/config/defaultConfig.json +2 -2
  2. package/dist/cjs/constants.js.map +1 -1
  3. package/dist/cjs/d8XMath.d.ts +42 -25
  4. package/dist/cjs/d8XMath.js +188 -151
  5. package/dist/cjs/d8XMath.js.map +1 -1
  6. package/dist/cjs/liquidatorTool.d.ts +1 -1
  7. package/dist/cjs/liquidatorTool.js +9 -9
  8. package/dist/cjs/liquidatorTool.js.map +1 -1
  9. package/dist/cjs/marketData.d.ts +6 -6
  10. package/dist/cjs/marketData.js +9 -12
  11. package/dist/cjs/marketData.js.map +1 -1
  12. package/dist/cjs/perpetualDataHandler.d.ts +12 -12
  13. package/dist/cjs/perpetualDataHandler.js +13 -14
  14. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  15. package/dist/cjs/polyMktsPxFeed.js +2 -2
  16. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  17. package/dist/cjs/priceFeeds.d.ts +1 -0
  18. package/dist/cjs/priceFeeds.js +19 -3
  19. package/dist/cjs/priceFeeds.js.map +1 -1
  20. package/dist/cjs/version.d.ts +1 -1
  21. package/dist/cjs/version.js +1 -1
  22. package/dist/esm/config/defaultConfig.json +2 -2
  23. package/dist/esm/constants.js.map +1 -1
  24. package/dist/esm/d8XMath.d.ts +42 -25
  25. package/dist/esm/d8XMath.js +187 -150
  26. package/dist/esm/d8XMath.js.map +1 -1
  27. package/dist/esm/liquidatorTool.d.ts +1 -1
  28. package/dist/esm/liquidatorTool.js +10 -10
  29. package/dist/esm/liquidatorTool.js.map +1 -1
  30. package/dist/esm/marketData.d.ts +6 -6
  31. package/dist/esm/marketData.js +9 -12
  32. package/dist/esm/marketData.js.map +1 -1
  33. package/dist/esm/perpetualDataHandler.d.ts +12 -12
  34. package/dist/esm/perpetualDataHandler.js +13 -14
  35. package/dist/esm/perpetualDataHandler.js.map +1 -1
  36. package/dist/esm/polyMktsPxFeed.js +2 -2
  37. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  38. package/dist/esm/priceFeeds.d.ts +1 -0
  39. package/dist/esm/priceFeeds.js +19 -3
  40. package/dist/esm/priceFeeds.js.map +1 -1
  41. package/dist/esm/version.d.ts +1 -1
  42. package/dist/esm/version.js +1 -1
  43. package/doc/d8x-perpetuals-sdk.md +116 -64
  44. package/package.json +1 -1
  45. package/src/config/defaultConfig.json +2 -2
  46. package/src/constants.ts +0 -1
  47. package/src/d8XMath.ts +210 -167
  48. package/src/liquidatorTool.ts +16 -10
  49. package/src/marketData.ts +33 -25
  50. package/src/perpetualDataHandler.ts +28 -34
  51. package/src/polyMktsPxFeed.ts +6 -7
  52. package/src/priceFeeds.ts +20 -4
  53. package/src/version.ts +1 -1
  54. package/dist/cjs/abi/AMMPerpLogic.json +0 -580
  55. package/dist/cjs/abi/BeaconProxy.json +0 -71
  56. package/dist/cjs/abi/IPerpetualManager copy.json +0 -5599
  57. package/dist/cjs/abi/IPerpetualMarginViewLogic.json +0 -286
  58. package/dist/cjs/abi/Maintainer.json +0 -774
  59. package/dist/cjs/abi/MockToken.json +0 -347
  60. package/dist/cjs/abi/MockUSD.json +0 -413
  61. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  62. package/dist/cjs/abi/WeETH.json +0 -310
  63. package/dist/cjs/abi-zkevm/IPerpetualManager.json +0 -5366
  64. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  65. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  66. package/dist/cjs/contracts/AMMPerpLogic.d.ts +0 -303
  67. package/dist/cjs/contracts/AMMPerpLogic.js +0 -3
  68. package/dist/cjs/contracts/AMMPerpLogic.js.map +0 -1
  69. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  70. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  71. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  72. package/dist/cjs/contracts/IPerpetualManagerCopy.d.ts +0 -3223
  73. package/dist/cjs/contracts/IPerpetualManagerCopy.js +0 -3
  74. package/dist/cjs/contracts/IPerpetualManagerCopy.js.map +0 -1
  75. package/dist/cjs/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
  76. package/dist/cjs/contracts/IPerpetualMarginViewLogic.js +0 -3
  77. package/dist/cjs/contracts/IPerpetualMarginViewLogic.js.map +0 -1
  78. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  79. package/dist/cjs/contracts/Maintainer.js +0 -3
  80. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  81. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  82. package/dist/cjs/contracts/MockToken.js +0 -3
  83. package/dist/cjs/contracts/MockToken.js.map +0 -1
  84. package/dist/cjs/contracts/MockUSD.d.ts +0 -186
  85. package/dist/cjs/contracts/MockUSD.js +0 -3
  86. package/dist/cjs/contracts/MockUSD.js.map +0 -1
  87. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  88. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  89. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  90. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  91. package/dist/cjs/contracts/WeETH.js +0 -3
  92. package/dist/cjs/contracts/WeETH.js.map +0 -1
  93. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
  94. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js +0 -598
  95. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
  96. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  97. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  98. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  99. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
  100. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5617
  101. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
  102. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
  103. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -304
  104. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
  105. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  106. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  107. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  108. package/dist/cjs/contracts/factories/MockToken__factory.d.ts +0 -273
  109. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  110. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  111. package/dist/cjs/contracts/factories/MockUSD__factory.d.ts +0 -320
  112. package/dist/cjs/contracts/factories/MockUSD__factory.js +0 -431
  113. package/dist/cjs/contracts/factories/MockUSD__factory.js.map +0 -1
  114. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  115. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  116. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  117. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  118. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  119. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  120. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  121. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  122. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  123. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  124. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  125. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  126. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  127. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  128. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  129. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  130. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  131. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  132. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  133. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  134. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  135. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  136. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  137. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  138. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  139. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  140. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  141. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  142. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  143. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  144. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  145. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  146. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  147. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  148. package/dist/cjs/contracts/lean0/index.js +0 -3
  149. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  150. package/dist/esm/abi/AMMPerpLogic.json +0 -580
  151. package/dist/esm/abi/BeaconProxy.json +0 -71
  152. package/dist/esm/abi/IPerpetualManager copy.json +0 -5599
  153. package/dist/esm/abi/IPerpetualMarginViewLogic.json +0 -286
  154. package/dist/esm/abi/Maintainer.json +0 -774
  155. package/dist/esm/abi/MockToken.json +0 -347
  156. package/dist/esm/abi/MockUSD.json +0 -413
  157. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  158. package/dist/esm/abi/WeETH.json +0 -310
  159. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  160. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  161. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  162. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  163. package/dist/esm/abi-zkevm/IPerpetualManager.json +0 -5366
  164. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  165. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  166. package/dist/esm/contracts/AMMPerpLogic.d.ts +0 -303
  167. package/dist/esm/contracts/AMMPerpLogic.js +0 -2
  168. package/dist/esm/contracts/AMMPerpLogic.js.map +0 -1
  169. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  170. package/dist/esm/contracts/BeaconProxy.js +0 -2
  171. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  172. package/dist/esm/contracts/IPerpetualManagerCopy.d.ts +0 -3223
  173. package/dist/esm/contracts/IPerpetualManagerCopy.js +0 -2
  174. package/dist/esm/contracts/IPerpetualManagerCopy.js.map +0 -1
  175. package/dist/esm/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
  176. package/dist/esm/contracts/IPerpetualMarginViewLogic.js +0 -2
  177. package/dist/esm/contracts/IPerpetualMarginViewLogic.js.map +0 -1
  178. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  179. package/dist/esm/contracts/Maintainer.js +0 -2
  180. package/dist/esm/contracts/Maintainer.js.map +0 -1
  181. package/dist/esm/contracts/MockToken.d.ts +0 -263
  182. package/dist/esm/contracts/MockToken.js +0 -2
  183. package/dist/esm/contracts/MockToken.js.map +0 -1
  184. package/dist/esm/contracts/MockUSD.d.ts +0 -186
  185. package/dist/esm/contracts/MockUSD.js +0 -2
  186. package/dist/esm/contracts/MockUSD.js.map +0 -1
  187. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  188. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  189. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  190. package/dist/esm/contracts/WeETH.d.ts +0 -503
  191. package/dist/esm/contracts/WeETH.js +0 -2
  192. package/dist/esm/contracts/WeETH.js.map +0 -1
  193. package/dist/esm/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
  194. package/dist/esm/contracts/factories/AMMPerpLogic__factory.js +0 -594
  195. package/dist/esm/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
  196. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  197. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  198. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  199. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
  200. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5613
  201. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
  202. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
  203. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -300
  204. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
  205. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  206. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  207. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  208. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  209. package/dist/esm/contracts/factories/MockToken__factory.js +0 -361
  210. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  211. package/dist/esm/contracts/factories/MockUSD__factory.d.ts +0 -320
  212. package/dist/esm/contracts/factories/MockUSD__factory.js +0 -427
  213. package/dist/esm/contracts/factories/MockUSD__factory.js.map +0 -1
  214. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  215. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  216. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  217. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  218. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  219. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  220. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  221. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  222. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  223. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  224. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  225. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  226. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  227. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  228. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  229. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  230. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  231. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  232. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  233. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  234. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  235. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  236. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  237. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  238. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  239. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  240. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  241. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  242. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  243. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  244. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  245. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  246. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  247. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  248. package/dist/esm/contracts/lean0/index.js +0 -2
  249. package/dist/esm/contracts/lean0/index.js.map +0 -1
  250. package/src/contracts/IPerpetualMarginViewLogic.ts +0 -347
  251. package/src/contracts/MockUSD.ts +0 -378
  252. package/src/contracts/factories/IPerpetualMarginViewLogic__factory.ts +0 -313
  253. package/src/contracts/factories/MockUSD__factory.ts +0 -430
package/src/marketData.ts CHANGED
@@ -487,6 +487,7 @@ export default class MarketData extends PerpetualDataHandler {
487
487
  const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3 ?? 0, indexPriceInfo.ema].map((x) =>
488
488
  floatToABK64x64(x)
489
489
  ) as [bigint, bigint, bigint];
490
+
490
491
  const proxyCalls: Multicall3.Call3Struct[] = [
491
492
  // 0: traderState
492
493
  {
@@ -502,7 +503,7 @@ export default class MarketData extends PerpetualDataHandler {
502
503
  perpId,
503
504
  floatToABK64x64(tradeAmountBC),
504
505
  [fS2, fS3],
505
- indexPriceInfo.conf * 10n,
506
+ indexPriceInfo.conf & ((1n << 16n) - 1n),
506
507
  indexPriceInfo.predMktCLOBParams,
507
508
  ]),
508
509
  },
@@ -563,7 +564,7 @@ export default class MarketData extends PerpetualDataHandler {
563
564
  perpId,
564
565
  floatToABK64x64(tradeAmountBC),
565
566
  [floatToABK64x64(indexPriceInfo.s2), floatToABK64x64(indexPriceInfo.s3 ?? 0)],
566
- indexPriceInfo.conf * 10n,
567
+ indexPriceInfo.conf,
567
568
  indexPriceInfo.predMktCLOBParams
568
569
  );
569
570
  }
@@ -754,14 +755,23 @@ export default class MarketData extends PerpetualDataHandler {
754
755
  b0 = b0 < 0 ? b0 : 0;
755
756
  pos0 = 0;
756
757
  }
757
- traderDepositCC = getDepositAmountForLvgTrade(pos0, b0, tradeAmountBC, targetLvg, tradePrice, S3, Sm, isPredMkt);
758
+ traderDepositCC = getDepositAmountForLvgTrade(
759
+ pos0,
760
+ b0,
761
+ tradeAmountBC,
762
+ targetLvg,
763
+ tradePrice,
764
+ S3,
765
+ Sm,
766
+ isPredMkt ? initialMarginRate : undefined
767
+ );
758
768
  // fees are paid from wallet in this case
759
769
  traderDepositCC += tradingFeeCC + referralFeeCC;
760
770
  }
761
771
 
762
772
  // Contract: _executeTrade
763
- let deltaCashCC = (-tradeAmountBC * (tradePrice - S2)) / S3;
764
- let deltaLockedQC = tradeAmountBC * S2;
773
+ let deltaCashCC = 0; // (-tradeAmountBC * (tradePrice - S2)) / S3;
774
+ let deltaLockedQC = tradeAmountBC * tradePrice; // tradeAmountBC * S2;
765
775
  if (isClose) {
766
776
  let pnl = account.entryPrice * tradeAmountBC - deltaLockedQC;
767
777
  deltaLockedQC += pnl;
@@ -991,11 +1001,10 @@ export default class MarketData extends PerpetualDataHandler {
991
1001
  markPrice: number,
992
1002
  collToQuoteConversion: number,
993
1003
  S2: number,
994
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1004
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
995
1005
  ): [number, number | undefined, number] {
996
1006
  let S2Liq: number, S3Liq: number | undefined;
997
1007
  const staticInfo = symbolToPerpStaticInfo.get(symbol)!;
998
-
999
1008
  let ccyType = staticInfo.collateralCurrencyType;
1000
1009
  const isPred = MarketData.isPredictionMarketStatic(staticInfo);
1001
1010
  const idx_availableCashCC = 2;
@@ -1689,7 +1698,7 @@ export default class MarketData extends PerpetualDataHandler {
1689
1698
  this.symbolToPerpStaticInfo,
1690
1699
  this.proxyContract,
1691
1700
  [priceInfo.s2, priceInfo.s3 ?? 0], //s2,s3
1692
- priceInfo.conf, //conf, no times 10n here (done when calling contract)
1701
+ priceInfo.conf,
1693
1702
  priceInfo.predMktCLOBParams, //params
1694
1703
  overrides
1695
1704
  );
@@ -1820,7 +1829,7 @@ export default class MarketData extends PerpetualDataHandler {
1820
1829
  protected static async openOrdersOnOrderBook(
1821
1830
  traderAddr: string,
1822
1831
  orderBookContract: LimitOrderBook,
1823
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1832
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1824
1833
  overrides?: Overrides
1825
1834
  ): Promise<Order[]> {
1826
1835
  //eliminate empty orders and map to user friendly orders
@@ -1857,7 +1866,7 @@ export default class MarketData extends PerpetualDataHandler {
1857
1866
  traderAddr: string,
1858
1867
  orderBookContracts: LimitOrderBook[],
1859
1868
  multicall: Multicall3,
1860
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1869
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1861
1870
  overrides?: Overrides
1862
1871
  ): Promise<{ orders: Order[][]; digests: string[][] }> {
1863
1872
  // eliminate empty orders and map to user friendly orders
@@ -2103,7 +2112,7 @@ export default class MarketData extends PerpetualDataHandler {
2103
2112
  */
2104
2113
  private static async _isMarketClosed(
2105
2114
  symbol: string,
2106
- _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2115
+ _symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
2107
2116
  _priceFeedGetter: PriceFeeds
2108
2117
  ): Promise<boolean> {
2109
2118
  const sInfo: PerpetualStaticInfo | undefined = _symbolToPerpStaticInfo.get(symbol);
@@ -2219,7 +2228,7 @@ export default class MarketData extends PerpetualDataHandler {
2219
2228
  private static async _queryPoolAndPerpetualStates(
2220
2229
  _proxyContract: Contract,
2221
2230
  _multicall: Multicall3,
2222
- _poolStaticInfos: readonly PoolStaticInfo[],
2231
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>,
2223
2232
  _symbolList: ReadonlyMap<string, string>,
2224
2233
  _nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
2225
2234
  overrides?: Overrides
@@ -2299,7 +2308,7 @@ export default class MarketData extends PerpetualDataHandler {
2299
2308
  */
2300
2309
  protected static _poolDataToPoolState(
2301
2310
  _liquidityPools: Partial<PerpStorage.LiquidityPoolDataStructOutput>[],
2302
- _poolStaticInfos: readonly PoolStaticInfo[]
2311
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>
2303
2312
  ): PoolState[] {
2304
2313
  const poolStates = _liquidityPools.map(
2305
2314
  (pool, k) =>
@@ -2327,8 +2336,8 @@ export default class MarketData extends PerpetualDataHandler {
2327
2336
  * @ignore
2328
2337
  */
2329
2338
  protected static _perpetualDataToPerpetualState(
2330
- _perpetuals: readonly any[],
2331
- _longShortBC: readonly [bigint, bigint][],
2339
+ _perpetuals: any[],
2340
+ _longShortBC: [bigint, bigint][],
2332
2341
  _symbolList: ReadonlyMap<string, string>
2333
2342
  ): PerpetualState[] {
2334
2343
  const perpStates = new Array<PerpetualState>();
@@ -2371,11 +2380,11 @@ export default class MarketData extends PerpetualDataHandler {
2371
2380
  public static async _exchangeInfo(
2372
2381
  _proxyContract: Contract,
2373
2382
  _multicall: Multicall3,
2374
- _poolStaticInfos: Array<PoolStaticInfo>,
2375
- _symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
2376
- _perpetualIdToSymbol: Map<number, string>,
2377
- _nestedPerpetualIDs: Array<Array<number>>,
2378
- _symbolList: Map<string, string>,
2383
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>,
2384
+ _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2385
+ _perpetualIdToSymbol: ReadonlyMap<number, string>,
2386
+ _nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
2387
+ _symbolList: ReadonlyMap<string, string>,
2379
2388
  _priceFeedGetter: PriceFeeds,
2380
2389
  _oracleFactoryAddr: string,
2381
2390
  overrides?: Overrides
@@ -2428,17 +2437,16 @@ export default class MarketData extends PerpetualDataHandler {
2428
2437
  ) {
2429
2438
  perp.isMarketClosed = true;
2430
2439
  } else {
2431
- const indexSymbol = MarketData.getIndexSymbol(_symbolList, info);
2432
- const idxPriceS2Pair = idxPriceMap.get(indexSymbol)!; // checked in if
2440
+ const idxPriceS2Pair = idxPriceMap.get(MarketData.getIndexSymbol(_symbolList, info))!;
2433
2441
  let idxPriceS3Pair: [number, boolean] = [0, false];
2434
2442
  perp.isMarketClosed =
2435
2443
  idxPriceS2Pair[1] ||
2436
- (MarketData.isPredictionMarketStatic(info) &&
2437
- (isNaN(idxPriceS2Pair[0]) || idxPriceS2Pair[0] < 1.01 || idxPriceS2Pair[0] > 1.99));
2444
+ (MarketData.isPredictionMarketStatic(info) && (idxPriceS2Pair[0] == 1 || idxPriceS2Pair[0] == 2));
2438
2445
  if (info.S3Symbol != "" && idxPriceMap.has(info.S3Symbol)) {
2439
2446
  idxPriceS3Pair = idxPriceMap.get(info.S3Symbol)!;
2440
2447
  perp.isMarketClosed = perp.isMarketClosed || idxPriceS3Pair[1];
2441
2448
  }
2449
+
2442
2450
  perp.indexPrice = idxPriceS2Pair[0];
2443
2451
  let indexS3 = 1;
2444
2452
  if (info.collateralCurrencyType == COLLATERAL_CURRENCY_BASE) {
@@ -2448,7 +2456,7 @@ export default class MarketData extends PerpetualDataHandler {
2448
2456
  }
2449
2457
  perp.collToQuoteIndexPrice = indexS3;
2450
2458
 
2451
- const emaKey = indexSymbol + ":ema";
2459
+ const emaKey = info.S2Symbol + ":ema";
2452
2460
  let markPrice: number;
2453
2461
  if (idxPriceMap.has(emaKey)) {
2454
2462
  let ema: number;
@@ -225,6 +225,7 @@ export default class PerpetualDataHandler {
225
225
  throw new Error(`failed to fetch config (${res.status}): ${res.statusText} ${this.config.configSource}`);
226
226
  }
227
227
  let symlist = await res.json();
228
+ console.log("fetched symbol list from source", this.config.configSource + "/symbolList.json");
228
229
  this.symbolList = new Map<string, string>(Object.entries(symlist));
229
230
  }
230
231
 
@@ -302,7 +303,7 @@ export default class PerpetualDataHandler {
302
303
  const tokenOverrides = require("./config/tokenOverrides.json") as TokenOverride[];
303
304
 
304
305
  let poolInfo = await PerpetualDataHandler.getPoolStaticInfo(this.proxyContract);
305
-
306
+ console.log({ poolInfo });
306
307
  const IERC20 = ERC20__factory.createInterface();
307
308
 
308
309
  const proxyCalls: Multicall3.Call3Struct[] = poolInfo.poolMarginTokenAddr.map((tokenAddr) => ({
@@ -323,6 +324,7 @@ export default class PerpetualDataHandler {
323
324
 
324
325
  // multicall
325
326
  const encodedResults = await this.multicall.aggregate3.staticCall(proxyCalls, overrides || {});
327
+ console.log({ encodedResults });
326
328
 
327
329
  // pre-allocate all pool static infos with id and margin token info
328
330
  const poolStaticInfos: PoolStaticInfo[] = [];
@@ -369,29 +371,25 @@ export default class PerpetualDataHandler {
369
371
  overrides
370
372
  );
371
373
 
372
- // fetch slots from api
373
374
  const slotsInfo = await PerpetualDataHandler.fetchSlotsInfo(this.chainId);
374
375
 
375
376
  // replace symbols, if any
376
377
  for (const slot of slotsInfo) {
378
+ const slotSymbol = slot.slot + "-USD";
377
379
  const perpIdx = perpStaticInfos.findIndex(
378
- (p) => p.S2Symbol.split("-").at(0) == slot.slot && Number(this.chainId) == slot.chain_id
380
+ (p) => p.S2Symbol == slotSymbol && Number(this.chainId) == slot.chain_id
379
381
  );
380
382
  if (perpIdx < 0) {
381
383
  // not a known perp - ignore
382
384
  continue;
383
385
  }
384
386
  // set symbol for this slot
385
- const quote = perpStaticInfos[perpIdx].S2Symbol.split("-").at(1);
386
- this.symbolList.set(slot.slot, slot.contract_id); // slot e.g. SP07 now maps to NHL_..etc (w/o -quote-base suffix)
387
- perpStaticInfos[perpIdx].S2Symbol = slot.contract_id + "-" + quote; // SP07-X -> NHL_...-USD
388
-
387
+ this.symbolList.set(slot.slot, slot.contract_id);
388
+ perpStaticInfos[perpIdx].S2Symbol = slot.contract_id + "-USD";
389
389
  // set expiry for this symbol
390
- const slotExpiry = Number(new Date(slot.expiry));
391
390
  this.indexSymbol.set(slot.slot, {
392
- indexSymbol: slot.slot + "-" + quote + ":" + slot.chain_id,
393
- // shouldn't be here, but jic force a refetch in a minute
394
- expiry: isNaN(slotExpiry) ? Date.now() / 1_000 + 60 : slotExpiry,
391
+ indexSymbol: slot.slot + "-USD:" + slot.chain_id,
392
+ expiry: Number(slot.expiry),
395
393
  });
396
394
  }
397
395
 
@@ -733,7 +731,7 @@ export default class PerpetualDataHandler {
733
731
  */
734
732
  protected static async fetchSlotsInfo(chainId: bigint | number | string) {
735
733
  let result: SlotInfo[] = [];
736
- const query = `https://sports.quantena.org/slots-info/${Number(chainId)}`;
734
+ const query = `https://sports-v2.quantena.org/slots-info/${Number(chainId)}`;
737
735
  const res = await fetch(query);
738
736
  if (res.status == 200 && res.ok) {
739
737
  result = await res.json();
@@ -749,8 +747,8 @@ export default class PerpetualDataHandler {
749
747
  */
750
748
  public static async getPerpetualStaticInfo(
751
749
  _proxyContract: IPerpetualManager,
752
- nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
753
- symbolList: ReadonlyMap<string, string>,
750
+ nestedPerpetualIDs: Array<Array<number>>,
751
+ symbolList: Map<string, string>,
754
752
  overrides?: Overrides
755
753
  ): Promise<Array<PerpetualStaticInfo>> {
756
754
  // flatten perpetual ids into chunks
@@ -834,7 +832,7 @@ export default class PerpetualDataHandler {
834
832
  fromIdx: number,
835
833
  toIdx: number,
836
834
  _proxyContract: IPerpetualManager,
837
- _symbolList: ReadonlyMap<string, string>,
835
+ _symbolList: Map<string, string>,
838
836
  overrides?: Overrides
839
837
  ): Promise<LiquidityPoolData[]> {
840
838
  if (fromIdx < 1) {
@@ -1334,7 +1332,7 @@ export default class PerpetualDataHandler {
1334
1332
  perpId,
1335
1333
  floatToABK64x64(tradeAmount),
1336
1334
  fIndexPrices as [bigint, bigint],
1337
- conf * 10n,
1335
+ conf & ((1n << 16n) - 1n),
1338
1336
  params,
1339
1337
  overrides || {}
1340
1338
  );
@@ -1486,9 +1484,9 @@ export default class PerpetualDataHandler {
1486
1484
  */
1487
1485
  protected static _calculateLiquidationPrice(
1488
1486
  symbol: string,
1489
- traderState: readonly bigint[],
1487
+ traderState: bigint[],
1490
1488
  S2: number,
1491
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1489
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1492
1490
  isPredMarket: boolean
1493
1491
  ): [number, number, number, number, number] {
1494
1492
  const idx_availableCashCC = 2;
@@ -1514,10 +1512,10 @@ export default class PerpetualDataHandler {
1514
1512
  let unpaidFunding = unpaidFundingCC;
1515
1513
 
1516
1514
  if (isPredMarket) {
1517
- const S2Liq = pmFindLiquidationPrice(position, S3Liq, lockedInValueQC, cashCC, tau, S2);
1515
+ const S2Liq = pmFindLiquidationPrice(position, S3Liq, lockedInValueQC, cashCC, tau);
1518
1516
  let pnl = position * Sm - lockedInValueQC + unpaidFunding / S3Liq;
1519
1517
  // liquidation margin rate
1520
- const tauLiq = pmMaintenanceMarginRate(position, S2Liq, tau);
1518
+ const tauLiq = pmMaintenanceMarginRate(position, lockedInValueQC, S2Liq, tau);
1521
1519
  return [S2Liq, S3Liq, tauLiq, pnl, unpaidFundingCC];
1522
1520
  }
1523
1521
  // regular perpetuals:
@@ -1552,7 +1550,7 @@ export default class PerpetualDataHandler {
1552
1550
  */
1553
1551
  protected static symbolToPerpetualId(
1554
1552
  symbol: string,
1555
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1553
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
1556
1554
  ): number {
1557
1555
  let id = symbolToPerpStaticInfo.get(symbol)?.id;
1558
1556
  if (id == undefined) {
@@ -1577,7 +1575,7 @@ export default class PerpetualDataHandler {
1577
1575
  return symbols[0] + "-" + symbols[1] + "-" + symbols[2];
1578
1576
  }
1579
1577
 
1580
- private static _getByValue<K>(map: ReadonlyMap<K, any>, searchValue: any, valueField: string | number) {
1578
+ private static _getByValue(map: any, searchValue: any, valueField: any) {
1581
1579
  for (let [key, value] of map.entries()) {
1582
1580
  if (value[valueField] === searchValue) {
1583
1581
  return key;
@@ -1602,7 +1600,7 @@ export default class PerpetualDataHandler {
1602
1600
  | IPerpetualOrder.OrderStructOutput
1603
1601
  | IClientOrder.ClientOrderStruct
1604
1602
  | IClientOrder.ClientOrderStructOutput,
1605
- symbolToPerpInfoMap: ReadonlyMap<string, PerpetualStaticInfo>
1603
+ symbolToPerpInfoMap: Map<string, PerpetualStaticInfo>
1606
1604
  ): Order {
1607
1605
  // find symbol of perpetual id
1608
1606
  const symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, Number(order.iPerpetualId), "id");
@@ -1664,7 +1662,7 @@ export default class PerpetualDataHandler {
1664
1662
  protected static toSmartContractOrder(
1665
1663
  order: Order,
1666
1664
  traderAddr: string,
1667
- perpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1665
+ perpStaticInfo: Map<string, PerpetualStaticInfo>
1668
1666
  ): SmartContractOrder {
1669
1667
  // this revers if order is invalid
1670
1668
  PerpetualDataHandler.checkOrder(order, perpStaticInfo);
@@ -1756,7 +1754,7 @@ export default class PerpetualDataHandler {
1756
1754
  public static toClientOrder(
1757
1755
  order: Order,
1758
1756
  traderAddr: string,
1759
- perpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1757
+ perpStaticInfo: Map<string, PerpetualStaticInfo>,
1760
1758
  parentChildIds?: [string, string]
1761
1759
  ): ClientOrder {
1762
1760
  const scOrder = PerpetualDataHandler.toSmartContractOrder(order, traderAddr, perpStaticInfo);
@@ -1770,7 +1768,7 @@ export default class PerpetualDataHandler {
1770
1768
  */
1771
1769
  public static fromClientOrder(
1772
1770
  obOrder: IClientOrder.ClientOrderStruct | IClientOrder.ClientOrderStructOutput,
1773
- perpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1771
+ perpStaticInfo: Map<string, PerpetualStaticInfo>
1774
1772
  ): Order {
1775
1773
  const scOrder = {
1776
1774
  flags: obOrder.flags,
@@ -1792,7 +1790,6 @@ export default class PerpetualDataHandler {
1792
1790
  }
1793
1791
 
1794
1792
  private static _flagToOrderType(orderFlags: bigint, orderLimitPrice: bigint): string {
1795
- // TODO: check
1796
1793
  let flag = BigInt(orderFlags);
1797
1794
  let isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
1798
1795
  let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != MAX_64x64;
@@ -1856,10 +1853,7 @@ export default class PerpetualDataHandler {
1856
1853
  return flag;
1857
1854
  }
1858
1855
 
1859
- protected static _getLotSize(
1860
- symbol: string,
1861
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1862
- ): number {
1856
+ protected static _getLotSize(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): number {
1863
1857
  let perpInfo: PerpetualStaticInfo | undefined = symbolToPerpStaticInfo.get(symbol);
1864
1858
  if (perpInfo == undefined) {
1865
1859
  throw new Error(`no info for perpetual ${symbol}`);
@@ -1869,7 +1863,7 @@ export default class PerpetualDataHandler {
1869
1863
 
1870
1864
  protected static _getMinimalPositionSize(
1871
1865
  symbol: string,
1872
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1866
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
1873
1867
  ): number {
1874
1868
  return 10 * PerpetualDataHandler._getLotSize(symbol, symbolToPerpStaticInfo);
1875
1869
  }
@@ -2120,7 +2114,7 @@ export default class PerpetualDataHandler {
2120
2114
  protected static checkOrder(
2121
2115
  order: Order,
2122
2116
  // traderAccount: MarginAccount,
2123
- perpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
2117
+ perpStaticInfo: Map<string, PerpetualStaticInfo>
2124
2118
  ) {
2125
2119
  if (!perpStaticInfo.has(order.symbol)) {
2126
2120
  throw new Error(`Perpetual not found for symbol ${order.symbol}`);
@@ -2468,7 +2462,7 @@ export default class PerpetualDataHandler {
2468
2462
  * @returns Array of [perpetual Id, perpetual state (string)]
2469
2463
  */
2470
2464
  public static extractStatesFromStaticInfos(
2471
- perpInfos: ReadonlyMap<string, PerpetualStaticInfo> | readonly PerpetualStaticInfo[] | undefined
2465
+ perpInfos: Map<string, PerpetualStaticInfo> | PerpetualStaticInfo[] | undefined
2472
2466
  ) {
2473
2467
  const states: [number, string][] = [];
2474
2468
  perpInfos?.forEach(({ state, id }, _keyOrIndex) => states.push([id, state]));
@@ -1,6 +1,5 @@
1
1
  import { probToPrice } from "./d8XMath";
2
2
  import type { PredMktPriceInfo, PriceFeedConfig, PriceFeedJson } from "./nodeSDKTypes";
3
- import { sleepForSec } from "./utils";
4
3
 
5
4
  interface PolyConfig {
6
5
  sym: string;
@@ -43,7 +42,7 @@ export default class PolyMktsPxFeed {
43
42
  }
44
43
  }
45
44
 
46
- this.oracleEndpoint = this.oracleEndpoint.replace(/\/$/, "") + "/v2/updates/price/latest?encoding=base64&ids[]=";
45
+ this.oracleEndpoint = this.oracleEndpoint.replace(/\/$/, "") + "/v3/updates/price/latest?encoding=base64&ids[]=";
47
46
  }
48
47
 
49
48
  public isPolyMktsSym(sym: string) {
@@ -98,21 +97,21 @@ export default class PolyMktsPxFeed {
98
97
  | { price: PriceFeedJson; ema_price: PriceFeedJson; metadata: { market_closed: boolean } }
99
98
  | undefined;
100
99
 
101
- const emaObj = parsed?.ema_price as PriceFeedJson | undefined;
102
- const pxObj = parsed?.price as PriceFeedJson | undefined;
100
+ const emaObj = parsed?.ema_price;
101
+ const pxObj = parsed?.price;
103
102
  const marketClosed = Boolean(parsed?.metadata.market_closed);
104
103
 
105
104
  const s2 = pxObj == undefined || pxObj.price == "NaN" ? 0 : Number(pxObj.price) * Math.pow(10, pxObj.expo);
106
105
  const ema = emaObj == undefined || emaObj.price == "NaN" ? 0 : Number(emaObj.price) * Math.pow(10, emaObj.expo);
107
106
  const params = emaObj?.conf == undefined ? 0n : BigInt(emaObj.conf);
108
107
  const conf = pxObj?.conf == undefined ? 0n : BigInt(pxObj.conf);
109
- const info = {
108
+ const info: PredMktPriceInfo = {
110
109
  s2,
111
110
  ema,
112
111
  s2MktClosed: marketClosed || s2 == 0 || ema == 0,
113
- conf: conf,
112
+ conf,
114
113
  predMktCLOBParams: params,
115
- } as PredMktPriceInfo;
114
+ };
116
115
  res.push(info);
117
116
  }
118
117
  return res;
package/src/priceFeeds.ts CHANGED
@@ -69,6 +69,7 @@ export default class PriceFeeds {
69
69
  throw new Error(`failed to fetch config (${res.status}): ${res.statusText} ${configSrc}`);
70
70
  }
71
71
  configs = await res.json();
72
+ console.log("fetched price config from source", configSrc + "/priceFeedConfig.json");
72
73
  }
73
74
  this.config = PriceFeeds._selectConfig(configs, this.priceFeedConfigNetwork);
74
75
 
@@ -232,7 +233,7 @@ export default class PriceFeeds {
232
233
  continue;
233
234
  }
234
235
  // only report ema if corresponding symbol is requested
235
- const keyNoEma = key.substring(0, key.length - 4);
236
+ const keyNoEma = key.substring(0, key.length - 5);
236
237
  if (!symbols.includes(keyNoEma)) {
237
238
  continue;
238
239
  }
@@ -257,7 +258,7 @@ export default class PriceFeeds {
257
258
  let priceObj = (await this.polyMktsPxFeed.fetchPricesForSyms([indexSymbols[0]]))[0];
258
259
  const s3map = await this.fetchFeedPrices([indexSymbols[1]]);
259
260
  const s3 = s3map.get(indexSymbols[1])!;
260
- return {
261
+ const pxInfo: IdxPriceInfo = {
261
262
  s2: priceObj.s2,
262
263
  s3: s3[0],
263
264
  ema: priceObj.ema,
@@ -265,7 +266,8 @@ export default class PriceFeeds {
265
266
  s3MktClosed: s3[1],
266
267
  conf: priceObj.conf,
267
268
  predMktCLOBParams: priceObj.predMktCLOBParams,
268
- } as IdxPriceInfo;
269
+ };
270
+ return pxInfo;
269
271
  }
270
272
  // determine relevant price feeds
271
273
  let feedSymbols = new Array<string>();
@@ -464,6 +466,20 @@ export default class PriceFeeds {
464
466
  return this.fetchFeedPrices(this.dataHandler.requiredSymbols);
465
467
  }
466
468
 
469
+ private _buildQuery(baseUrl: string, id: string) {
470
+ // odin-sports use v3 api, all else v2
471
+ let method = "";
472
+ if (baseUrl.includes("odin-sport")) {
473
+ method = "/v3/updates/price/latest?encoding=base64&ids[]=";
474
+ } else {
475
+ method = "/v2/updates/price/latest?encoding=base64&ids[]=";
476
+ }
477
+ // e.g.
478
+ // 'https://odin-sport.quantena.org/v3/updates/price/latest?encoding=base64&ids[]=0x5b622123024d99bea493662fe91bf9785b8b0decd46c65cdbeef6a0a1672b057',
479
+ // 'https://hermes.pyth.network/v2/updates/price/latest?encoding=base64&ids[]=0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b'
480
+ return baseUrl + method + id;
481
+ }
482
+
467
483
  /**
468
484
  * Get the latest prices for a given perpetual from the offchain oracle
469
485
  * networks. Uses write price feed endpoints.
@@ -487,7 +503,7 @@ export default class PriceFeeds {
487
503
  // we use the first endpoint for a given symbol even if there is another symbol with the same id
488
504
  let idx = info[0].endpointId;
489
505
  let feedId = feedIds[k];
490
- queries.push(this.writeFeedEndpoints[idx] + "/v2/updates/price/latest?encoding=base64&ids[]=" + feedId);
506
+ queries.push(this._buildQuery(this.writeFeedEndpoints[idx], feedId));
491
507
 
492
508
  for (let j = 0; j < info.length; j++) {
493
509
  if (symbols.has(feedId)) {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const D8X_SDK_VERSION = "2.6.23";
1
+ export const D8X_SDK_VERSION = "2.7.00";