@d8x/perpetuals-sdk 2.6.23 → 2.7.1

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 (263) 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 +40 -29
  4. package/dist/cjs/d8XMath.js +244 -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/main.d.ts +1 -0
  10. package/dist/cjs/main.js +15 -0
  11. package/dist/cjs/main.js.map +1 -0
  12. package/dist/cjs/marketData.d.ts +7 -11
  13. package/dist/cjs/marketData.js +31 -20
  14. package/dist/cjs/marketData.js.map +1 -1
  15. package/dist/cjs/perpetualDataHandler.d.ts +12 -12
  16. package/dist/cjs/perpetualDataHandler.js +13 -14
  17. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  18. package/dist/cjs/polyMktsPxFeed.js +2 -2
  19. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  20. package/dist/cjs/priceFeeds.d.ts +1 -0
  21. package/dist/cjs/priceFeeds.js +19 -3
  22. package/dist/cjs/priceFeeds.js.map +1 -1
  23. package/dist/cjs/version.d.ts +1 -1
  24. package/dist/cjs/version.js +1 -1
  25. package/dist/esm/config/defaultConfig.json +2 -2
  26. package/dist/esm/constants.js.map +1 -1
  27. package/dist/esm/d8XMath.d.ts +40 -29
  28. package/dist/esm/d8XMath.js +241 -150
  29. package/dist/esm/d8XMath.js.map +1 -1
  30. package/dist/esm/liquidatorTool.d.ts +1 -1
  31. package/dist/esm/liquidatorTool.js +10 -10
  32. package/dist/esm/liquidatorTool.js.map +1 -1
  33. package/dist/esm/main.d.ts +1 -0
  34. package/dist/esm/main.js +13 -0
  35. package/dist/esm/main.js.map +1 -0
  36. package/dist/esm/main2.d.ts +1 -0
  37. package/dist/esm/main2.js +18 -0
  38. package/dist/esm/main2.js.map +1 -0
  39. package/dist/esm/marketData.d.ts +7 -11
  40. package/dist/esm/marketData.js +32 -21
  41. package/dist/esm/marketData.js.map +1 -1
  42. package/dist/esm/perpetualDataHandler.d.ts +12 -12
  43. package/dist/esm/perpetualDataHandler.js +13 -14
  44. package/dist/esm/perpetualDataHandler.js.map +1 -1
  45. package/dist/esm/polyMktsPxFeed.js +2 -2
  46. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  47. package/dist/esm/priceFeeds.d.ts +1 -0
  48. package/dist/esm/priceFeeds.js +19 -3
  49. package/dist/esm/priceFeeds.js.map +1 -1
  50. package/dist/esm/version.d.ts +1 -1
  51. package/dist/esm/version.js +1 -1
  52. package/doc/d8x-perpetuals-sdk.md +109 -81
  53. package/doc/marketData.md +2 -10
  54. package/package.json +5 -2
  55. package/src/config/defaultConfig.json +2 -2
  56. package/src/constants.ts +0 -1
  57. package/src/d8XMath.ts +268 -167
  58. package/src/liquidatorTool.ts +16 -10
  59. package/src/marketData.ts +62 -35
  60. package/src/perpetualDataHandler.ts +28 -34
  61. package/src/polyMktsPxFeed.ts +6 -7
  62. package/src/priceFeeds.ts +20 -4
  63. package/src/version.ts +1 -1
  64. package/dist/cjs/abi/AMMPerpLogic.json +0 -580
  65. package/dist/cjs/abi/BeaconProxy.json +0 -71
  66. package/dist/cjs/abi/IPerpetualManager copy.json +0 -5599
  67. package/dist/cjs/abi/IPerpetualMarginViewLogic.json +0 -286
  68. package/dist/cjs/abi/Maintainer.json +0 -774
  69. package/dist/cjs/abi/MockToken.json +0 -347
  70. package/dist/cjs/abi/MockUSD.json +0 -413
  71. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  72. package/dist/cjs/abi/WeETH.json +0 -310
  73. package/dist/cjs/abi-zkevm/IPerpetualManager.json +0 -5366
  74. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  75. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  76. package/dist/cjs/contracts/AMMPerpLogic.d.ts +0 -303
  77. package/dist/cjs/contracts/AMMPerpLogic.js +0 -3
  78. package/dist/cjs/contracts/AMMPerpLogic.js.map +0 -1
  79. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  80. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  81. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  82. package/dist/cjs/contracts/IPerpetualManagerCopy.d.ts +0 -3223
  83. package/dist/cjs/contracts/IPerpetualManagerCopy.js +0 -3
  84. package/dist/cjs/contracts/IPerpetualManagerCopy.js.map +0 -1
  85. package/dist/cjs/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
  86. package/dist/cjs/contracts/IPerpetualMarginViewLogic.js +0 -3
  87. package/dist/cjs/contracts/IPerpetualMarginViewLogic.js.map +0 -1
  88. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  89. package/dist/cjs/contracts/Maintainer.js +0 -3
  90. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  91. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  92. package/dist/cjs/contracts/MockToken.js +0 -3
  93. package/dist/cjs/contracts/MockToken.js.map +0 -1
  94. package/dist/cjs/contracts/MockUSD.d.ts +0 -186
  95. package/dist/cjs/contracts/MockUSD.js +0 -3
  96. package/dist/cjs/contracts/MockUSD.js.map +0 -1
  97. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  98. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  99. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  100. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  101. package/dist/cjs/contracts/WeETH.js +0 -3
  102. package/dist/cjs/contracts/WeETH.js.map +0 -1
  103. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
  104. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js +0 -598
  105. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
  106. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  107. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  108. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  109. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
  110. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5617
  111. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
  112. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
  113. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -304
  114. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
  115. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  116. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  117. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  118. package/dist/cjs/contracts/factories/MockToken__factory.d.ts +0 -273
  119. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  120. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  121. package/dist/cjs/contracts/factories/MockUSD__factory.d.ts +0 -320
  122. package/dist/cjs/contracts/factories/MockUSD__factory.js +0 -431
  123. package/dist/cjs/contracts/factories/MockUSD__factory.js.map +0 -1
  124. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  125. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  126. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  127. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  128. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  129. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  130. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  131. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  132. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  133. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  134. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  135. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  136. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  137. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  138. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  139. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  140. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  141. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  142. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  143. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  144. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  145. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  146. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  147. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  148. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  149. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  150. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  151. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  152. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  153. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  154. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  155. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  156. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  157. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  158. package/dist/cjs/contracts/lean0/index.js +0 -3
  159. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  160. package/dist/esm/abi/AMMPerpLogic.json +0 -580
  161. package/dist/esm/abi/BeaconProxy.json +0 -71
  162. package/dist/esm/abi/IPerpetualManager copy.json +0 -5599
  163. package/dist/esm/abi/IPerpetualMarginViewLogic.json +0 -286
  164. package/dist/esm/abi/Maintainer.json +0 -774
  165. package/dist/esm/abi/MockToken.json +0 -347
  166. package/dist/esm/abi/MockUSD.json +0 -413
  167. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  168. package/dist/esm/abi/WeETH.json +0 -310
  169. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  170. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  171. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  172. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  173. package/dist/esm/abi-zkevm/IPerpetualManager.json +0 -5366
  174. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  175. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  176. package/dist/esm/contracts/AMMPerpLogic.d.ts +0 -303
  177. package/dist/esm/contracts/AMMPerpLogic.js +0 -2
  178. package/dist/esm/contracts/AMMPerpLogic.js.map +0 -1
  179. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  180. package/dist/esm/contracts/BeaconProxy.js +0 -2
  181. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  182. package/dist/esm/contracts/IPerpetualManagerCopy.d.ts +0 -3223
  183. package/dist/esm/contracts/IPerpetualManagerCopy.js +0 -2
  184. package/dist/esm/contracts/IPerpetualManagerCopy.js.map +0 -1
  185. package/dist/esm/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
  186. package/dist/esm/contracts/IPerpetualMarginViewLogic.js +0 -2
  187. package/dist/esm/contracts/IPerpetualMarginViewLogic.js.map +0 -1
  188. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  189. package/dist/esm/contracts/Maintainer.js +0 -2
  190. package/dist/esm/contracts/Maintainer.js.map +0 -1
  191. package/dist/esm/contracts/MockToken.d.ts +0 -263
  192. package/dist/esm/contracts/MockToken.js +0 -2
  193. package/dist/esm/contracts/MockToken.js.map +0 -1
  194. package/dist/esm/contracts/MockUSD.d.ts +0 -186
  195. package/dist/esm/contracts/MockUSD.js +0 -2
  196. package/dist/esm/contracts/MockUSD.js.map +0 -1
  197. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  198. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  199. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  200. package/dist/esm/contracts/WeETH.d.ts +0 -503
  201. package/dist/esm/contracts/WeETH.js +0 -2
  202. package/dist/esm/contracts/WeETH.js.map +0 -1
  203. package/dist/esm/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
  204. package/dist/esm/contracts/factories/AMMPerpLogic__factory.js +0 -594
  205. package/dist/esm/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
  206. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  207. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  208. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  209. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
  210. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5613
  211. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
  212. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
  213. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -300
  214. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
  215. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  216. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  217. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  218. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  219. package/dist/esm/contracts/factories/MockToken__factory.js +0 -361
  220. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  221. package/dist/esm/contracts/factories/MockUSD__factory.d.ts +0 -320
  222. package/dist/esm/contracts/factories/MockUSD__factory.js +0 -427
  223. package/dist/esm/contracts/factories/MockUSD__factory.js.map +0 -1
  224. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  225. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  226. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  227. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  228. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  229. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  230. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  231. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  232. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  233. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  234. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  235. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  236. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  237. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  238. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  239. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  240. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  241. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  242. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  243. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  244. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  245. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  246. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  247. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  248. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  249. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  250. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  251. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  252. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  253. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  254. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  255. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  256. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  257. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  258. package/dist/esm/contracts/lean0/index.js +0 -2
  259. package/dist/esm/contracts/lean0/index.js.map +0 -1
  260. package/src/contracts/IPerpetualMarginViewLogic.ts +0 -347
  261. package/src/contracts/MockUSD.ts +0 -378
  262. package/src/contracts/factories/IPerpetualMarginViewLogic__factory.ts +0 -313
  263. package/src/contracts/factories/MockUSD__factory.ts +0 -430
package/src/marketData.ts CHANGED
@@ -31,8 +31,9 @@ import {
31
31
  floatToABK64x64,
32
32
  getDepositAmountForLvgTrade,
33
33
  getMaxSignedPositionSize,
34
- pmExchangeFee,
34
+ pmExitFee,
35
35
  pmMaxSignedOpenTradeSize,
36
+ pmOpenFee,
36
37
  } from "./d8XMath";
37
38
  import {
38
39
  PythMetadata,
@@ -487,6 +488,7 @@ export default class MarketData extends PerpetualDataHandler {
487
488
  const [fS2, fS3, fEma] = [indexPriceInfo.s2, indexPriceInfo.s3 ?? 0, indexPriceInfo.ema].map((x) =>
488
489
  floatToABK64x64(x)
489
490
  ) as [bigint, bigint, bigint];
491
+
490
492
  const proxyCalls: Multicall3.Call3Struct[] = [
491
493
  // 0: traderState
492
494
  {
@@ -502,7 +504,7 @@ export default class MarketData extends PerpetualDataHandler {
502
504
  perpId,
503
505
  floatToABK64x64(tradeAmountBC),
504
506
  [fS2, fS3],
505
- indexPriceInfo.conf * 10n,
507
+ indexPriceInfo.conf & ((1n << 16n) - 1n),
506
508
  indexPriceInfo.predMktCLOBParams,
507
509
  ]),
508
510
  },
@@ -563,7 +565,7 @@ export default class MarketData extends PerpetualDataHandler {
563
565
  perpId,
564
566
  floatToABK64x64(tradeAmountBC),
565
567
  [floatToABK64x64(indexPriceInfo.s2), floatToABK64x64(indexPriceInfo.s3 ?? 0)],
566
- indexPriceInfo.conf * 10n,
568
+ indexPriceInfo.conf,
567
569
  indexPriceInfo.predMktCLOBParams
568
570
  );
569
571
  }
@@ -754,14 +756,23 @@ export default class MarketData extends PerpetualDataHandler {
754
756
  b0 = b0 < 0 ? b0 : 0;
755
757
  pos0 = 0;
756
758
  }
757
- traderDepositCC = getDepositAmountForLvgTrade(pos0, b0, tradeAmountBC, targetLvg, tradePrice, S3, Sm, isPredMkt);
759
+ traderDepositCC = getDepositAmountForLvgTrade(
760
+ pos0,
761
+ b0,
762
+ tradeAmountBC,
763
+ targetLvg,
764
+ tradePrice,
765
+ S3,
766
+ Sm,
767
+ isPredMkt ? initialMarginRate : undefined
768
+ );
758
769
  // fees are paid from wallet in this case
759
770
  traderDepositCC += tradingFeeCC + referralFeeCC;
760
771
  }
761
772
 
762
773
  // Contract: _executeTrade
763
- let deltaCashCC = (-tradeAmountBC * (tradePrice - S2)) / S3;
764
- let deltaLockedQC = tradeAmountBC * S2;
774
+ let deltaCashCC = 0; // (-tradeAmountBC * (tradePrice - S2)) / S3;
775
+ let deltaLockedQC = tradeAmountBC * tradePrice; // tradeAmountBC * S2;
765
776
  if (isClose) {
766
777
  let pnl = account.entryPrice * tradeAmountBC - deltaLockedQC;
767
778
  deltaLockedQC += pnl;
@@ -828,27 +839,44 @@ export default class MarketData extends PerpetualDataHandler {
828
839
 
829
840
  /**
830
841
  * Fee is relative to base-currency amount (=trade amount)
831
- * @param maxMaintMgnRate maintenance margin rate param for pred mkts
832
- * @param Sm Mark price
833
- * @param tradeAmtBC signed trade amount
834
- * @param tradeMgnRate margin rate param from perpetual
835
842
  * @returns relative exchange fee in decimals
836
843
  */
837
844
  public static exchangeFeePrdMkts(
838
- maxMaintMgnRate: number,
839
845
  Sm: number,
840
846
  tradeAmtBC: number,
841
847
  traderPosBC: number,
842
- tradeMgnRate: number
848
+ traderLockedInQC: number,
849
+ mu_m: number,
850
+ mr: number,
851
+ m_0: number,
852
+ sigt: number,
853
+ jump: number
843
854
  ): number {
844
855
  const isClose = Math.sign(traderPosBC) != Math.sign(tradeAmtBC);
845
856
  const isFlip =
846
857
  Math.abs(traderPosBC + tradeAmtBC) > 0.01 && Math.sign(traderPosBC + tradeAmtBC) != Math.sign(traderPosBC);
858
+
859
+ const varphiBar = tradeAmtBC > 0 ? Sm - 1 : 2 - Sm;
860
+ const varphi =
861
+ traderPosBC == 0
862
+ ? varphiBar
863
+ : traderPosBC > 0
864
+ ? traderLockedInQC / traderPosBC - 1
865
+ : 2 - traderLockedInQC / traderPosBC;
866
+ let fee: number;
847
867
  if (isClose && !isFlip) {
848
- // 0.1cents if is close
849
- return 0.001;
868
+ // exit fee
869
+ fee = pmExitFee(varphi, varphiBar, mu_m, m_0, sigt, jump);
870
+ } else {
871
+ // open fee
872
+ fee = pmOpenFee(varphi, varphiBar, mu_m, mr, sigt, jump);
850
873
  }
851
- return pmExchangeFee(Sm - 1, maxMaintMgnRate, tradeAmtBC, tradeMgnRate);
874
+ if (fee < 0.001) {
875
+ fee = 0.001;
876
+ } else if (fee > 0.65535) {
877
+ fee = 0.65535;
878
+ }
879
+ return fee;
852
880
  }
853
881
 
854
882
  /**
@@ -991,11 +1019,10 @@ export default class MarketData extends PerpetualDataHandler {
991
1019
  markPrice: number,
992
1020
  collToQuoteConversion: number,
993
1021
  S2: number,
994
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
1022
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
995
1023
  ): [number, number | undefined, number] {
996
1024
  let S2Liq: number, S3Liq: number | undefined;
997
1025
  const staticInfo = symbolToPerpStaticInfo.get(symbol)!;
998
-
999
1026
  let ccyType = staticInfo.collateralCurrencyType;
1000
1027
  const isPred = MarketData.isPredictionMarketStatic(staticInfo);
1001
1028
  const idx_availableCashCC = 2;
@@ -1260,6 +1287,7 @@ export default class MarketData extends PerpetualDataHandler {
1260
1287
 
1261
1288
  let maxLong = pmMaxSignedOpenTradeSize(longOI, shortOI, indexPriceInfo.ema, true, mr, ammFunds);
1262
1289
  let maxShort = pmMaxSignedOpenTradeSize(longOI, shortOI, indexPriceInfo.ema, false, mr, ammFunds);
1290
+ console.log({ maxLong, maxShort });
1263
1291
  if (traderPos > 0n) {
1264
1292
  // pos > 0, so short is closing direction
1265
1293
  maxShort = -Math.max(Math.abs(maxShort), ABK64x64ToFloat(traderPos));
@@ -1689,7 +1717,7 @@ export default class MarketData extends PerpetualDataHandler {
1689
1717
  this.symbolToPerpStaticInfo,
1690
1718
  this.proxyContract,
1691
1719
  [priceInfo.s2, priceInfo.s3 ?? 0], //s2,s3
1692
- priceInfo.conf, //conf, no times 10n here (done when calling contract)
1720
+ priceInfo.conf,
1693
1721
  priceInfo.predMktCLOBParams, //params
1694
1722
  overrides
1695
1723
  );
@@ -1820,7 +1848,7 @@ export default class MarketData extends PerpetualDataHandler {
1820
1848
  protected static async openOrdersOnOrderBook(
1821
1849
  traderAddr: string,
1822
1850
  orderBookContract: LimitOrderBook,
1823
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1851
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1824
1852
  overrides?: Overrides
1825
1853
  ): Promise<Order[]> {
1826
1854
  //eliminate empty orders and map to user friendly orders
@@ -1857,7 +1885,7 @@ export default class MarketData extends PerpetualDataHandler {
1857
1885
  traderAddr: string,
1858
1886
  orderBookContracts: LimitOrderBook[],
1859
1887
  multicall: Multicall3,
1860
- symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1888
+ symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1861
1889
  overrides?: Overrides
1862
1890
  ): Promise<{ orders: Order[][]; digests: string[][] }> {
1863
1891
  // eliminate empty orders and map to user friendly orders
@@ -2103,7 +2131,7 @@ export default class MarketData extends PerpetualDataHandler {
2103
2131
  */
2104
2132
  private static async _isMarketClosed(
2105
2133
  symbol: string,
2106
- _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2134
+ _symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
2107
2135
  _priceFeedGetter: PriceFeeds
2108
2136
  ): Promise<boolean> {
2109
2137
  const sInfo: PerpetualStaticInfo | undefined = _symbolToPerpStaticInfo.get(symbol);
@@ -2219,7 +2247,7 @@ export default class MarketData extends PerpetualDataHandler {
2219
2247
  private static async _queryPoolAndPerpetualStates(
2220
2248
  _proxyContract: Contract,
2221
2249
  _multicall: Multicall3,
2222
- _poolStaticInfos: readonly PoolStaticInfo[],
2250
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>,
2223
2251
  _symbolList: ReadonlyMap<string, string>,
2224
2252
  _nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
2225
2253
  overrides?: Overrides
@@ -2299,7 +2327,7 @@ export default class MarketData extends PerpetualDataHandler {
2299
2327
  */
2300
2328
  protected static _poolDataToPoolState(
2301
2329
  _liquidityPools: Partial<PerpStorage.LiquidityPoolDataStructOutput>[],
2302
- _poolStaticInfos: readonly PoolStaticInfo[]
2330
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>
2303
2331
  ): PoolState[] {
2304
2332
  const poolStates = _liquidityPools.map(
2305
2333
  (pool, k) =>
@@ -2327,8 +2355,8 @@ export default class MarketData extends PerpetualDataHandler {
2327
2355
  * @ignore
2328
2356
  */
2329
2357
  protected static _perpetualDataToPerpetualState(
2330
- _perpetuals: readonly any[],
2331
- _longShortBC: readonly [bigint, bigint][],
2358
+ _perpetuals: any[],
2359
+ _longShortBC: [bigint, bigint][],
2332
2360
  _symbolList: ReadonlyMap<string, string>
2333
2361
  ): PerpetualState[] {
2334
2362
  const perpStates = new Array<PerpetualState>();
@@ -2371,11 +2399,11 @@ export default class MarketData extends PerpetualDataHandler {
2371
2399
  public static async _exchangeInfo(
2372
2400
  _proxyContract: Contract,
2373
2401
  _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>,
2402
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>,
2403
+ _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2404
+ _perpetualIdToSymbol: ReadonlyMap<number, string>,
2405
+ _nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
2406
+ _symbolList: ReadonlyMap<string, string>,
2379
2407
  _priceFeedGetter: PriceFeeds,
2380
2408
  _oracleFactoryAddr: string,
2381
2409
  overrides?: Overrides
@@ -2428,17 +2456,16 @@ export default class MarketData extends PerpetualDataHandler {
2428
2456
  ) {
2429
2457
  perp.isMarketClosed = true;
2430
2458
  } else {
2431
- const indexSymbol = MarketData.getIndexSymbol(_symbolList, info);
2432
- const idxPriceS2Pair = idxPriceMap.get(indexSymbol)!; // checked in if
2459
+ const idxPriceS2Pair = idxPriceMap.get(MarketData.getIndexSymbol(_symbolList, info))!;
2433
2460
  let idxPriceS3Pair: [number, boolean] = [0, false];
2434
2461
  perp.isMarketClosed =
2435
2462
  idxPriceS2Pair[1] ||
2436
- (MarketData.isPredictionMarketStatic(info) &&
2437
- (isNaN(idxPriceS2Pair[0]) || idxPriceS2Pair[0] < 1.01 || idxPriceS2Pair[0] > 1.99));
2463
+ (MarketData.isPredictionMarketStatic(info) && (idxPriceS2Pair[0] == 1 || idxPriceS2Pair[0] == 2));
2438
2464
  if (info.S3Symbol != "" && idxPriceMap.has(info.S3Symbol)) {
2439
2465
  idxPriceS3Pair = idxPriceMap.get(info.S3Symbol)!;
2440
2466
  perp.isMarketClosed = perp.isMarketClosed || idxPriceS3Pair[1];
2441
2467
  }
2468
+
2442
2469
  perp.indexPrice = idxPriceS2Pair[0];
2443
2470
  let indexS3 = 1;
2444
2471
  if (info.collateralCurrencyType == COLLATERAL_CURRENCY_BASE) {
@@ -2448,7 +2475,7 @@ export default class MarketData extends PerpetualDataHandler {
2448
2475
  }
2449
2476
  perp.collToQuoteIndexPrice = indexS3;
2450
2477
 
2451
- const emaKey = indexSymbol + ":ema";
2478
+ const emaKey = info.S2Symbol + ":ema";
2452
2479
  let markPrice: number;
2453
2480
  if (idxPriceMap.has(emaKey)) {
2454
2481
  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.01";