@gainsnetwork/sdk 0.0.0-v10.rc20 → 0.0.0-v10.rc21

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.
@@ -25,7 +25,7 @@ const calculateClosingPositionSizeToken = (positionSizeCollateral, originalPosit
25
25
  const totalPositionSizeCollateral = originalCollateral * originalLeverage;
26
26
  if (totalPositionSizeCollateral === 0)
27
27
  return 0;
28
- // Match contract logic: (positionSizeCollateral * originalPositionSizeToken) / totalPositionSizeCollateral
28
+ // (positionSizeCollateral * originalPositionSizeToken) / totalPositionSizeCollateral
29
29
  return ((positionSizeCollateral * originalPositionSizeToken) /
30
30
  totalPositionSizeCollateral);
31
31
  };
@@ -83,22 +83,18 @@ const getTradeClosingPriceImpact = (input, context) => {
83
83
  }
84
84
  }
85
85
  // Calculate skew price impact (v10+ only)
86
- const skewPriceImpactP = input.contractsVersion === types_1.ContractsVersion.V10
87
- ? (0, skew_1.getTradeSkewPriceImpactWithChecks)({
86
+ const skewPriceImpactP = input.contractsVersion >= types_1.ContractsVersion.V10
87
+ ? (0, skew_1.getTradeSkewPriceImpact)({
88
88
  collateralIndex: input.collateralIndex,
89
89
  pairIndex: input.pairIndex,
90
90
  long: input.trade.long,
91
91
  open: false,
92
- positionSizeCollateral: input.positionSizeCollateral,
93
- currentPrice: input.currentPairPrice,
94
- contractsVersion: input.contractsVersion,
95
- isCounterTrade: input.trade.isCounterTrade,
96
- }, context.skewContext)
92
+ positionSizeToken,
93
+ }, context.skewContext).priceImpactP
97
94
  : 0;
98
95
  // Total price impact (all components)
99
96
  const totalPriceImpactP = fixedSpreadP + cumulVolPriceImpactP + skewPriceImpactP;
100
97
  // Calculate final price after all impacts
101
- // The direction is already handled by getFixedSpreadP (reverses for closing)
102
98
  const priceAfterImpact = (0, __1.getPriceAfterImpact)(input.currentPairPrice, totalPriceImpactP);
103
99
  return {
104
100
  positionSizeToken,
@@ -15,7 +15,7 @@ export { getTradeClosingPriceImpact, getTradeClosingPriceImpactAtOracle, buildTr
15
15
  export { getTradeCumulVolPriceImpactP, getCumulVolPriceImpact, // Convenience function
16
16
  getSpreadWithCumulVolPriceImpactP, getSpreadWithPriceImpactP, // Legacy alias
17
17
  getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, buildCumulVolContext, CumulVolContext, } from "./cumulVol";
18
- export { getNetSkewToken, getNetSkewCollateral, getTradeSkewDirection, calculateSkewPriceImpactP, getTradeSkewPriceImpact, getTradeSkewPriceImpactWithChecks, calculatePartialSizeToken, SkewPriceImpact, } from "./skew";
18
+ export { getNetSkewToken, getNetSkewCollateral, getTradeSkewDirection, calculateSkewPriceImpactP, getTradeSkewPriceImpact, calculatePartialSizeToken, SkewPriceImpact, } from "./skew";
19
19
  export { convertPairOiToken, convertPairOiTokenArray, convertPairOiCollateral, convertPairOiCollateralArray, convertSkewDepth, convertPairSkewDepths, } from "./skew/converter";
20
20
  export { buildSkewPriceImpactContext } from "./skew/builder";
21
21
  export type { PairOiToken, PairOiCollateral, SkewPriceImpactInput, SkewPriceImpactResult, SkewPriceImpactContext, TradeSkewParams, PositionSizeResult, } from "./skew/types";
@@ -4,7 +4,7 @@
4
4
  * @dev Exports cumulative volume, skew, and combined opening/closing price impact functionality
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.buildSkewPriceImpactContext = exports.convertPairSkewDepths = exports.convertSkewDepth = exports.convertPairOiCollateralArray = exports.convertPairOiCollateral = exports.convertPairOiTokenArray = exports.convertPairOiToken = exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpactWithChecks = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = exports.buildCumulVolContext = exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadP = exports.getFixedSpreadP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = exports.getSpreadWithPriceImpactP = exports.getSpreadWithCumulVolPriceImpactP = exports.getCumulVolPriceImpact = exports.getTradeCumulVolPriceImpactP = exports.buildTradeClosingPriceImpactContext = exports.getTradeClosingPriceImpactAtOracle = exports.getTradeClosingPriceImpact = exports.buildTradeOpeningPriceImpactContext = exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = exports.getPriceAfterImpact = void 0;
7
+ exports.buildSkewPriceImpactContext = exports.convertPairSkewDepths = exports.convertSkewDepth = exports.convertPairOiCollateralArray = exports.convertPairOiCollateral = exports.convertPairOiTokenArray = exports.convertPairOiToken = exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = exports.buildCumulVolContext = exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadP = exports.getFixedSpreadP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = exports.getSpreadWithPriceImpactP = exports.getSpreadWithCumulVolPriceImpactP = exports.getCumulVolPriceImpact = exports.getTradeCumulVolPriceImpactP = exports.buildTradeClosingPriceImpactContext = exports.getTradeClosingPriceImpactAtOracle = exports.getTradeClosingPriceImpact = exports.buildTradeOpeningPriceImpactContext = exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = exports.getPriceAfterImpact = void 0;
8
8
  /**
9
9
  * @dev Calculates price after impact using the same formula as the Solidity contract
10
10
  * @dev Mirrors contract's getPriceAfterImpact function
@@ -63,7 +63,6 @@ Object.defineProperty(exports, "getNetSkewCollateral", { enumerable: true, get:
63
63
  Object.defineProperty(exports, "getTradeSkewDirection", { enumerable: true, get: function () { return skew_1.getTradeSkewDirection; } });
64
64
  Object.defineProperty(exports, "calculateSkewPriceImpactP", { enumerable: true, get: function () { return skew_1.calculateSkewPriceImpactP; } });
65
65
  Object.defineProperty(exports, "getTradeSkewPriceImpact", { enumerable: true, get: function () { return skew_1.getTradeSkewPriceImpact; } });
66
- Object.defineProperty(exports, "getTradeSkewPriceImpactWithChecks", { enumerable: true, get: function () { return skew_1.getTradeSkewPriceImpactWithChecks; } });
67
66
  Object.defineProperty(exports, "calculatePartialSizeToken", { enumerable: true, get: function () { return skew_1.calculatePartialSizeToken; } });
68
67
  // Types namespace
69
68
  Object.defineProperty(exports, "SkewPriceImpact", { enumerable: true, get: function () { return skew_1.SkewPriceImpact; } });
@@ -31,19 +31,20 @@ const getTradeOpeningPriceImpact = (input, context) => {
31
31
  true, // open
32
32
  0, // lastPosIncreaseBlock - not relevant for opening
33
33
  context.cumulVolContext);
34
+ // Calculate price after spread and cumulative volume impact (before skew)
35
+ const priceAfterSpreadAndCumulVolPriceImpact = (0, __1.getPriceAfterImpact)(input.openPrice, spreadP + cumulVolPriceImpactP);
36
+ // Calculate position size in tokens using the price after fixed spread and cumul vol impact
37
+ const positionSizeToken = positionSizeCollateral / priceAfterSpreadAndCumulVolPriceImpact;
34
38
  // Calculate skew price impact (v10+ only)
35
- const skewPriceImpactP = (0, skew_1.getTradeSkewPriceImpactWithChecks)({
39
+ const skewResult = (0, skew_1.getTradeSkewPriceImpact)({
36
40
  collateralIndex: input.collateralIndex,
37
41
  pairIndex: input.pairIndex,
38
42
  long: input.long,
39
43
  open: true,
40
- positionSizeCollateral,
41
- currentPrice: input.openPrice,
42
- contractsVersion: input.contractsVersion,
43
- isCounterTrade: input.isCounterTrade,
44
+ positionSizeToken,
44
45
  }, context.skewContext);
46
+ const skewPriceImpactP = skewResult.priceImpactP;
45
47
  // Total price impact (signed - can be positive or negative)
46
- // Spread is always positive, impacts can be negative
47
48
  const totalPriceImpactP = spreadP + cumulVolPriceImpactP + skewPriceImpactP;
48
49
  // Calculate final price after impact using the same formula as Solidity
49
50
  const priceAfterImpact = (0, __1.getPriceAfterImpact)(input.openPrice, totalPriceImpactP);
@@ -53,7 +54,6 @@ const getTradeOpeningPriceImpact = (input, context) => {
53
54
  const percentProfitP = -totalPriceImpactP;
54
55
  return {
55
56
  priceAfterImpact,
56
- priceImpactP: Math.abs(totalPriceImpactP),
57
57
  percentProfitP,
58
58
  cumulVolPriceImpactP,
59
59
  skewPriceImpactP,
@@ -34,7 +34,6 @@ export type TradeOpeningPriceImpactContext = {
34
34
  */
35
35
  export type TradeOpeningPriceImpactResult = {
36
36
  priceAfterImpact: number;
37
- priceImpactP: number;
38
37
  percentProfitP: number;
39
38
  cumulVolPriceImpactP: number;
40
39
  skewPriceImpactP: number;
@@ -2,7 +2,7 @@
2
2
  * @dev Skew price impact calculations for v10+ trades
3
3
  * @dev Based on formula: (existingSkew + tradeSize/2) / skewDepth
4
4
  */
5
- import { PairOiToken, SkewPriceImpactInput, SkewPriceImpactResult, SkewPriceImpactContext, TradeSkewParams } from "./types";
5
+ import { PairOiToken, SkewPriceImpactInput, SkewPriceImpactResult, SkewPriceImpactContext } from "./types";
6
6
  /**
7
7
  * @dev Calculates net skew in tokens (long - short)
8
8
  * @param pairOi Pair OI data with long and short token amounts
@@ -28,10 +28,10 @@ export declare const getTradeSkewDirection: (long: boolean, open: boolean) => bo
28
28
  * @param existingSkewToken Current net skew in tokens (signed)
29
29
  * @param tradeSizeToken Trade size in tokens (always positive)
30
30
  * @param skewDepth Skew depth in tokens
31
- * @param tradeIncreasesSkew Whether trade increases skew in its direction
31
+ * @param tradePositiveSkew Whether trade increases skew in its direction
32
32
  * @returns Price impact percentage (can be positive or negative)
33
33
  */
34
- export declare const calculateSkewPriceImpactP: (existingSkewToken: number, tradeSizeToken: number, skewDepth: number, tradeIncreasesSkew: boolean) => number;
34
+ export declare const calculateSkewPriceImpactP: (existingSkewToken: number, tradeSizeToken: number, skewDepth: number, tradePositiveSkew: boolean) => number;
35
35
  /**
36
36
  * @dev Main function to calculate skew price impact for a trade
37
37
  * @param input Trade parameters
@@ -39,13 +39,6 @@ export declare const calculateSkewPriceImpactP: (existingSkewToken: number, trad
39
39
  * @returns Skew price impact result
40
40
  */
41
41
  export declare const getTradeSkewPriceImpact: (input: SkewPriceImpactInput, context: SkewPriceImpactContext) => SkewPriceImpactResult;
42
- /**
43
- * @dev Calculate skew price impact for a trade with all parameters
44
- * @param params Trade parameters including price and version checks
45
- * @param context Skew price impact context
46
- * @returns Price impact percentage or 0 if not applicable
47
- */
48
- export declare const getTradeSkewPriceImpactWithChecks: (params: TradeSkewParams, context: SkewPriceImpactContext) => number;
49
42
  /**
50
43
  * @dev Calculate position sizes for partial operations
51
44
  * @param originalSizeCollateral Original position size in collateral
@@ -30,9 +30,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
30
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpactWithChecks = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = void 0;
34
- const utils_1 = require("../../utils");
35
- const types_1 = require("../../../contracts/types");
33
+ exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = void 0;
36
34
  // Constants
37
35
  const PRICE_IMPACT_DIVIDER = 2; // Half price impact to match cumulative volume impact scale
38
36
  /**
@@ -71,18 +69,18 @@ exports.getTradeSkewDirection = getTradeSkewDirection;
71
69
  * @param existingSkewToken Current net skew in tokens (signed)
72
70
  * @param tradeSizeToken Trade size in tokens (always positive)
73
71
  * @param skewDepth Skew depth in tokens
74
- * @param tradeIncreasesSkew Whether trade increases skew in its direction
72
+ * @param tradePositiveSkew Whether trade increases skew in its direction
75
73
  * @returns Price impact percentage (can be positive or negative)
76
74
  */
77
- const calculateSkewPriceImpactP = (existingSkewToken, tradeSizeToken, skewDepth, tradeIncreasesSkew) => {
75
+ const calculateSkewPriceImpactP = (existingSkewToken, tradeSizeToken, skewDepth, tradePositiveSkew) => {
78
76
  if (skewDepth === 0) {
79
77
  return 0; // No impact if depth is 0
80
78
  }
81
79
  // Convert signed values based on trade direction
82
- const tradeSkewMultiplier = tradeIncreasesSkew ? 1 : -1;
80
+ const tradeSkewMultiplier = tradePositiveSkew ? 1 : -1;
83
81
  const signedExistingSkew = existingSkewToken;
84
82
  const signedTradeSize = tradeSizeToken * tradeSkewMultiplier;
85
- // Formula: (existingSkew + tradeSize/2) / skewDepth
83
+ // (existingSkew + tradeSize/2) / skewDepth
86
84
  const numerator = signedExistingSkew + signedTradeSize / 2;
87
85
  const priceImpactP = numerator / skewDepth;
88
86
  // Apply divider to match cumulative volume impact scale
@@ -100,10 +98,10 @@ const getTradeSkewPriceImpact = (input, context) => {
100
98
  const { skewDepth, pairOiToken: pairOi } = context;
101
99
  // Calculate net skew
102
100
  const netSkewToken = (0, exports.getNetSkewToken)(pairOi);
103
- // Determine trade direction impact
104
- const tradeIncreasesSkew = (0, exports.getTradeSkewDirection)(input.long, input.open);
101
+ // Determine trade direction
102
+ const tradePositiveSkew = (0, exports.getTradeSkewDirection)(input.long, input.open);
105
103
  // Calculate price impact
106
- const priceImpactP = (0, exports.calculateSkewPriceImpactP)(netSkewToken, input.positionSizeToken, skewDepth, tradeIncreasesSkew);
104
+ const priceImpactP = (0, exports.calculateSkewPriceImpactP)(netSkewToken, input.positionSizeToken, skewDepth, tradePositiveSkew);
107
105
  // Determine trade direction relative to skew
108
106
  let tradeDirection;
109
107
  if (priceImpactP > 0) {
@@ -123,34 +121,6 @@ const getTradeSkewPriceImpact = (input, context) => {
123
121
  };
124
122
  };
125
123
  exports.getTradeSkewPriceImpact = getTradeSkewPriceImpact;
126
- /**
127
- * @dev Calculate skew price impact for a trade with all parameters
128
- * @param params Trade parameters including price and version checks
129
- * @param context Skew price impact context
130
- * @returns Price impact percentage or 0 if not applicable
131
- */
132
- const getTradeSkewPriceImpactWithChecks = (params, context) => {
133
- // v10+ trades only
134
- if (params.contractsVersion < types_1.ContractsVersion.V10) {
135
- return 0;
136
- }
137
- // Counter trades don't pay skew impact
138
- if (params.isCounterTrade) {
139
- return 0;
140
- }
141
- // Calculate position size in tokens
142
- const positionSizeToken = (0, utils_1.calculatePositionSizeToken)(params.positionSizeCollateral, params.currentPrice);
143
- // Get skew price impact
144
- const result = (0, exports.getTradeSkewPriceImpact)({
145
- collateralIndex: params.collateralIndex,
146
- pairIndex: params.pairIndex,
147
- long: params.long,
148
- open: params.open,
149
- positionSizeToken,
150
- }, context);
151
- return result.priceImpactP;
152
- };
153
- exports.getTradeSkewPriceImpactWithChecks = getTradeSkewPriceImpactWithChecks;
154
124
  /**
155
125
  * @dev Calculate position sizes for partial operations
156
126
  * @param originalSizeCollateral Original position size in collateral
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gainsnetwork/sdk",
3
- "version": "0.0.0-v10.rc20",
3
+ "version": "0.0.0-v10.rc21",
4
4
  "description": "Gains Network SDK",
5
5
  "main": "./lib/index.js",
6
6
  "files": [