@d8x/perpetuals-sdk 2.7.0 → 2.7.2

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/src/marketData.ts CHANGED
@@ -28,11 +28,13 @@ import {
28
28
  ABK64x64ToFloat,
29
29
  dec18ToFloat,
30
30
  decNToFloat,
31
+ extractLvgFeeParams,
31
32
  floatToABK64x64,
32
33
  getDepositAmountForLvgTrade,
33
34
  getMaxSignedPositionSize,
34
- pmExchangeFee,
35
+ pmExitFee,
35
36
  pmMaxSignedOpenTradeSize,
37
+ pmOpenFee,
36
38
  } from "./d8XMath";
37
39
  import {
38
40
  PythMetadata,
@@ -838,27 +840,44 @@ export default class MarketData extends PerpetualDataHandler {
838
840
 
839
841
  /**
840
842
  * Fee is relative to base-currency amount (=trade amount)
841
- * @param maxMaintMgnRate maintenance margin rate param for pred mkts
842
- * @param Sm Mark price
843
- * @param tradeAmtBC signed trade amount
844
- * @param tradeMgnRate margin rate param from perpetual
845
843
  * @returns relative exchange fee in decimals
846
844
  */
847
845
  public static exchangeFeePrdMkts(
848
- maxMaintMgnRate: number,
849
846
  Sm: number,
850
847
  tradeAmtBC: number,
851
848
  traderPosBC: number,
852
- tradeMgnRate: number
849
+ traderLockedInQC: number,
850
+ mu_m: number,
851
+ mr: number,
852
+ m_0: number,
853
+ conf: bigint
853
854
  ): number {
854
855
  const isClose = Math.sign(traderPosBC) != Math.sign(tradeAmtBC);
855
856
  const isFlip =
856
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;
867
+ const { jump, sigt } = extractLvgFeeParams(conf);
857
868
  if (isClose && !isFlip) {
858
- // 0.1cents if is close
859
- return 0.001;
869
+ // exit fee
870
+ fee = pmExitFee(varphi, varphiBar, mu_m, m_0, sigt, jump);
871
+ } else {
872
+ // open fee
873
+ fee = pmOpenFee(varphi, varphiBar, mu_m, mr, sigt, jump);
874
+ }
875
+ if (fee < 0.001) {
876
+ fee = 0.001;
877
+ } else if (fee > 0.65535) {
878
+ fee = 0.65535;
860
879
  }
861
- return pmExchangeFee(Sm - 1, maxMaintMgnRate, tradeAmtBC, tradeMgnRate);
880
+ return fee;
862
881
  }
863
882
 
864
883
  /**
@@ -1269,6 +1288,7 @@ export default class MarketData extends PerpetualDataHandler {
1269
1288
 
1270
1289
  let maxLong = pmMaxSignedOpenTradeSize(longOI, shortOI, indexPriceInfo.ema, true, mr, ammFunds);
1271
1290
  let maxShort = pmMaxSignedOpenTradeSize(longOI, shortOI, indexPriceInfo.ema, false, mr, ammFunds);
1291
+ console.log({ maxLong, maxShort });
1272
1292
  if (traderPos > 0n) {
1273
1293
  // pos > 0, so short is closing direction
1274
1294
  maxShort = -Math.max(Math.abs(maxShort), ABK64x64ToFloat(traderPos));
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const D8X_SDK_VERSION = "2.7.00";
1
+ export const D8X_SDK_VERSION = "2.7.2";