@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.
- package/dist/cjs/config/defaultConfig.json +2 -2
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +40 -29
- package/dist/cjs/d8XMath.js +244 -151
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.d.ts +1 -1
- package/dist/cjs/liquidatorTool.js +9 -9
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/main.d.ts +1 -0
- package/dist/cjs/main.js +15 -0
- package/dist/cjs/main.js.map +1 -0
- package/dist/cjs/marketData.d.ts +7 -11
- package/dist/cjs/marketData.js +31 -20
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +12 -12
- package/dist/cjs/perpetualDataHandler.js +13 -14
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/polyMktsPxFeed.js +2 -2
- package/dist/cjs/polyMktsPxFeed.js.map +1 -1
- package/dist/cjs/priceFeeds.d.ts +1 -0
- package/dist/cjs/priceFeeds.js +19 -3
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/config/defaultConfig.json +2 -2
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +40 -29
- package/dist/esm/d8XMath.js +241 -150
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.d.ts +1 -1
- package/dist/esm/liquidatorTool.js +10 -10
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/main.d.ts +1 -0
- package/dist/esm/main.js +13 -0
- package/dist/esm/main.js.map +1 -0
- package/dist/esm/main2.d.ts +1 -0
- package/dist/esm/main2.js +18 -0
- package/dist/esm/main2.js.map +1 -0
- package/dist/esm/marketData.d.ts +7 -11
- package/dist/esm/marketData.js +32 -21
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +12 -12
- package/dist/esm/perpetualDataHandler.js +13 -14
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/polyMktsPxFeed.js +2 -2
- package/dist/esm/polyMktsPxFeed.js.map +1 -1
- package/dist/esm/priceFeeds.d.ts +1 -0
- package/dist/esm/priceFeeds.js +19 -3
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/doc/d8x-perpetuals-sdk.md +109 -81
- package/doc/marketData.md +2 -10
- package/package.json +5 -2
- package/src/config/defaultConfig.json +2 -2
- package/src/constants.ts +0 -1
- package/src/d8XMath.ts +268 -167
- package/src/liquidatorTool.ts +16 -10
- package/src/marketData.ts +62 -35
- package/src/perpetualDataHandler.ts +28 -34
- package/src/polyMktsPxFeed.ts +6 -7
- package/src/priceFeeds.ts +20 -4
- package/src/version.ts +1 -1
- package/dist/cjs/abi/AMMPerpLogic.json +0 -580
- package/dist/cjs/abi/BeaconProxy.json +0 -71
- package/dist/cjs/abi/IPerpetualManager copy.json +0 -5599
- package/dist/cjs/abi/IPerpetualMarginViewLogic.json +0 -286
- package/dist/cjs/abi/Maintainer.json +0 -774
- package/dist/cjs/abi/MockToken.json +0 -347
- package/dist/cjs/abi/MockUSD.json +0 -413
- package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
- package/dist/cjs/abi/WeETH.json +0 -310
- package/dist/cjs/abi-zkevm/IPerpetualManager.json +0 -5366
- package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
- package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
- package/dist/cjs/contracts/AMMPerpLogic.d.ts +0 -303
- package/dist/cjs/contracts/AMMPerpLogic.js +0 -3
- package/dist/cjs/contracts/AMMPerpLogic.js.map +0 -1
- package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
- package/dist/cjs/contracts/BeaconProxy.js +0 -3
- package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
- package/dist/cjs/contracts/IPerpetualManagerCopy.d.ts +0 -3223
- package/dist/cjs/contracts/IPerpetualManagerCopy.js +0 -3
- package/dist/cjs/contracts/IPerpetualManagerCopy.js.map +0 -1
- package/dist/cjs/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
- package/dist/cjs/contracts/IPerpetualMarginViewLogic.js +0 -3
- package/dist/cjs/contracts/IPerpetualMarginViewLogic.js.map +0 -1
- package/dist/cjs/contracts/Maintainer.d.ts +0 -799
- package/dist/cjs/contracts/Maintainer.js +0 -3
- package/dist/cjs/contracts/Maintainer.js.map +0 -1
- package/dist/cjs/contracts/MockToken.d.ts +0 -263
- package/dist/cjs/contracts/MockToken.js +0 -3
- package/dist/cjs/contracts/MockToken.js.map +0 -1
- package/dist/cjs/contracts/MockUSD.d.ts +0 -186
- package/dist/cjs/contracts/MockUSD.js +0 -3
- package/dist/cjs/contracts/MockUSD.js.map +0 -1
- package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
- package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
- package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
- package/dist/cjs/contracts/WeETH.d.ts +0 -503
- package/dist/cjs/contracts/WeETH.js +0 -3
- package/dist/cjs/contracts/WeETH.js.map +0 -1
- package/dist/cjs/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
- package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js +0 -598
- package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
- package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5617
- package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
- package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -304
- package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
- package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
- package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/MockToken__factory.d.ts +0 -273
- package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
- package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/MockUSD__factory.d.ts +0 -320
- package/dist/cjs/contracts/factories/MockUSD__factory.js +0 -431
- package/dist/cjs/contracts/factories/MockUSD__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
- package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
- package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
- package/dist/cjs/contracts/factories/lean0/index.js +0 -15
- package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
- package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
- package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
- package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
- package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
- package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
- package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
- package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
- package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
- package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
- package/dist/cjs/contracts/lean0/index.d.ts +0 -4
- package/dist/cjs/contracts/lean0/index.js +0 -3
- package/dist/cjs/contracts/lean0/index.js.map +0 -1
- package/dist/esm/abi/AMMPerpLogic.json +0 -580
- package/dist/esm/abi/BeaconProxy.json +0 -71
- package/dist/esm/abi/IPerpetualManager copy.json +0 -5599
- package/dist/esm/abi/IPerpetualMarginViewLogic.json +0 -286
- package/dist/esm/abi/Maintainer.json +0 -774
- package/dist/esm/abi/MockToken.json +0 -347
- package/dist/esm/abi/MockUSD.json +0 -413
- package/dist/esm/abi/UUPSUpgradeable.json +0 -104
- package/dist/esm/abi/WeETH.json +0 -310
- package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
- package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
- package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
- package/dist/esm/abi/lean0/ShareToken.json +0 -438
- package/dist/esm/abi-zkevm/IPerpetualManager.json +0 -5366
- package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
- package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
- package/dist/esm/contracts/AMMPerpLogic.d.ts +0 -303
- package/dist/esm/contracts/AMMPerpLogic.js +0 -2
- package/dist/esm/contracts/AMMPerpLogic.js.map +0 -1
- package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
- package/dist/esm/contracts/BeaconProxy.js +0 -2
- package/dist/esm/contracts/BeaconProxy.js.map +0 -1
- package/dist/esm/contracts/IPerpetualManagerCopy.d.ts +0 -3223
- package/dist/esm/contracts/IPerpetualManagerCopy.js +0 -2
- package/dist/esm/contracts/IPerpetualManagerCopy.js.map +0 -1
- package/dist/esm/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
- package/dist/esm/contracts/IPerpetualMarginViewLogic.js +0 -2
- package/dist/esm/contracts/IPerpetualMarginViewLogic.js.map +0 -1
- package/dist/esm/contracts/Maintainer.d.ts +0 -799
- package/dist/esm/contracts/Maintainer.js +0 -2
- package/dist/esm/contracts/Maintainer.js.map +0 -1
- package/dist/esm/contracts/MockToken.d.ts +0 -263
- package/dist/esm/contracts/MockToken.js +0 -2
- package/dist/esm/contracts/MockToken.js.map +0 -1
- package/dist/esm/contracts/MockUSD.d.ts +0 -186
- package/dist/esm/contracts/MockUSD.js +0 -2
- package/dist/esm/contracts/MockUSD.js.map +0 -1
- package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
- package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
- package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
- package/dist/esm/contracts/WeETH.d.ts +0 -503
- package/dist/esm/contracts/WeETH.js +0 -2
- package/dist/esm/contracts/WeETH.js.map +0 -1
- package/dist/esm/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
- package/dist/esm/contracts/factories/AMMPerpLogic__factory.js +0 -594
- package/dist/esm/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
- package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
- package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
- package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
- package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
- package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5613
- package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
- package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
- package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -300
- package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
- package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
- package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
- package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
- package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
- package/dist/esm/contracts/factories/MockToken__factory.js +0 -361
- package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
- package/dist/esm/contracts/factories/MockUSD__factory.d.ts +0 -320
- package/dist/esm/contracts/factories/MockUSD__factory.js +0 -427
- package/dist/esm/contracts/factories/MockUSD__factory.js.map +0 -1
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
- package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
- package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
- package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
- package/dist/esm/contracts/factories/lean0/index.js +0 -8
- package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
- package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
- package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
- package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
- package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
- package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
- package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
- package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
- package/dist/esm/contracts/lean0/ShareToken.js +0 -2
- package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
- package/dist/esm/contracts/lean0/index.d.ts +0 -4
- package/dist/esm/contracts/lean0/index.js +0 -2
- package/dist/esm/contracts/lean0/index.js.map +0 -1
- package/src/contracts/IPerpetualMarginViewLogic.ts +0 -347
- package/src/contracts/MockUSD.ts +0 -378
- package/src/contracts/factories/IPerpetualMarginViewLogic__factory.ts +0 -313
- 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
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
-
//
|
|
849
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
2331
|
-
_longShortBC:
|
|
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:
|
|
2375
|
-
_symbolToPerpStaticInfo:
|
|
2376
|
-
_perpetualIdToSymbol:
|
|
2377
|
-
_nestedPerpetualIDs:
|
|
2378
|
-
_symbolList:
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
|
|
386
|
-
|
|
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 + "-
|
|
393
|
-
|
|
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:
|
|
753
|
-
symbolList:
|
|
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:
|
|
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
|
|
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:
|
|
1487
|
+
traderState: bigint[],
|
|
1490
1488
|
S2: number,
|
|
1491
|
-
symbolToPerpStaticInfo:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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]));
|
package/src/polyMktsPxFeed.ts
CHANGED
|
@@ -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(/\/$/, "") + "/
|
|
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
|
|
102
|
-
const pxObj = parsed?.price
|
|
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
|
|
112
|
+
conf,
|
|
114
113
|
predMktCLOBParams: params,
|
|
115
|
-
}
|
|
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 -
|
|
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
|
-
|
|
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
|
-
}
|
|
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]
|
|
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.
|
|
1
|
+
export const D8X_SDK_VERSION = "2.7.01";
|