@gainsnetwork/sdk 0.0.0-v10.rc8 → 0.0.0-v10.rc9

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.
@@ -0,0 +1,22 @@
1
+ import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
2
+ import { CumulVolContext } from "./index";
3
+ /**
4
+ * @dev Builds cumulative volume price impact sub-context for a specific pair
5
+ * @param globalTradingVariables The transformed global trading variables from backend
6
+ * @param collateralIndex The collateral index (1-based)
7
+ * @param pairIndex The pair index
8
+ * @param additionalParams Additional parameters not available in trading variables
9
+ * @returns Cumulative volume context ready for getTradeCumulVolPriceImpactP
10
+ */
11
+ export declare const buildCumulVolContext: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, additionalParams: {
12
+ currentBlock: number;
13
+ contractsVersion?: number;
14
+ isPnlPositive?: boolean;
15
+ isOpen?: boolean;
16
+ createdBlock?: number;
17
+ userPriceImpact?: {
18
+ cumulVolPriceImpactMultiplier: number;
19
+ fixedSpreadP: number;
20
+ };
21
+ protectionCloseFactorWhitelist?: boolean;
22
+ }) => CumulVolContext | undefined;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCumulVolContext = void 0;
4
+ /**
5
+ * @dev Builds cumulative volume price impact sub-context for a specific pair
6
+ * @param globalTradingVariables The transformed global trading variables from backend
7
+ * @param collateralIndex The collateral index (1-based)
8
+ * @param pairIndex The pair index
9
+ * @param additionalParams Additional parameters not available in trading variables
10
+ * @returns Cumulative volume context ready for getTradeCumulVolPriceImpactP
11
+ */
12
+ const buildCumulVolContext = (globalTradingVariables, collateralIndex, pairIndex, additionalParams) => {
13
+ var _a, _b, _c, _d, _e, _f, _g, _h;
14
+ const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
15
+ if (!collateral) {
16
+ return undefined;
17
+ }
18
+ // Get pair-specific data from global variables
19
+ const pairDepth = (_a = globalTradingVariables.pairDepths) === null || _a === void 0 ? void 0 : _a[pairIndex];
20
+ const pairFactor = (_b = globalTradingVariables.pairFactors) === null || _b === void 0 ? void 0 : _b[pairIndex];
21
+ const oiWindows = (_c = globalTradingVariables.oiWindows) === null || _c === void 0 ? void 0 : _c[pairIndex];
22
+ // Get OI windows settings (same for all pairs)
23
+ // OI windows settings from global trading variables are already in SDK format
24
+ const oiWindowsSettings = globalTradingVariables.oiWindowsSettings;
25
+ // Get user-specific parameters from additionalParams
26
+ const userPriceImpact = additionalParams.userPriceImpact;
27
+ const protectionCloseFactorWhitelist = additionalParams.protectionCloseFactorWhitelist;
28
+ // Get liquidation params - check both pair and group level
29
+ const liquidationParams = ((_e = (_d = globalTradingVariables.liquidationParams) === null || _d === void 0 ? void 0 : _d.pairs) === null || _e === void 0 ? void 0 : _e[pairIndex]) ||
30
+ ((_g = (_f = globalTradingVariables.liquidationParams) === null || _f === void 0 ? void 0 : _f.groups) === null || _g === void 0 ? void 0 : _g[0]); // fallback to first group
31
+ return Object.assign({
32
+ // Trade state
33
+ isOpen: additionalParams.isOpen, isPnlPositive: additionalParams.isPnlPositive, createdBlock: additionalParams.createdBlock,
34
+ // Protection factors
35
+ liquidationParams, currentBlock: additionalParams.currentBlock, contractsVersion: additionalParams.contractsVersion, protectionCloseFactorWhitelist,
36
+ // Price impact data
37
+ pairDepth,
38
+ oiWindowsSettings,
39
+ oiWindows,
40
+ // User/collateral specific
41
+ userPriceImpact, collateralPriceUsd: ((_h = collateral.prices) === null || _h === void 0 ? void 0 : _h.collateralPriceUsd) || 1 }, pairFactor);
42
+ };
43
+ exports.buildCumulVolContext = buildCumulVolContext;
@@ -105,3 +105,4 @@ export declare const getCumulVolPriceImpact: (buy: boolean, collateral: number,
105
105
  }) => number;
106
106
  export declare const getSpreadWithPriceImpactP: (pairSpreadP: number, buy: boolean, collateral: number, leverage: number, pairDepth: PairDepth | undefined, oiWindowsSettings?: OiWindowsSettings | undefined, oiWindows?: OiWindows | undefined, context?: CumulVolContext | undefined) => number;
107
107
  export { convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, } from "./converter";
108
+ export { buildCumulVolContext } from "./builder";
@@ -4,7 +4,7 @@
4
4
  * @dev Mirrors contract's getTradeCumulVolPriceImpactP functionality
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadWithPriceImpactP = exports.getCumulVolPriceImpact = exports.getSpreadWithCumulVolPriceImpactP = exports.getSpreadP = exports.getFixedSpreadP = exports.getTradeCumulVolPriceImpactP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = void 0;
7
+ exports.buildCumulVolContext = exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadWithPriceImpactP = exports.getCumulVolPriceImpact = exports.getSpreadWithCumulVolPriceImpactP = exports.getSpreadP = exports.getFixedSpreadP = exports.getTradeCumulVolPriceImpactP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = void 0;
8
8
  const oiWindows_1 = require("../../oiWindows");
9
9
  const constants_1 = require("../../../constants");
10
10
  const types_1 = require("../../../contracts/types");
@@ -119,12 +119,12 @@ const getTradeCumulVolPriceImpactP = (trader, pairIndex, long, tradeOpenInterest
119
119
  if (!onePercentDepth || activeOi === undefined) {
120
120
  return 0;
121
121
  }
122
- return (((activeOi * (0, exports.getCumulativeFactor)(updatedContext) +
122
+ const finalPriceImpactP = ((activeOi * (0, exports.getCumulativeFactor)(updatedContext) +
123
123
  tradeOpenInterestUsd / 2) /
124
124
  onePercentDepth /
125
- 100 /
126
125
  (0, exports.getLegacyFactor)(updatedContext)) *
127
- (0, exports.getProtectionCloseFactor)(updatedContext));
126
+ (0, exports.getProtectionCloseFactor)(updatedContext);
127
+ return finalPriceImpactP;
128
128
  };
129
129
  exports.getTradeCumulVolPriceImpactP = getTradeCumulVolPriceImpactP;
130
130
  /**
@@ -226,3 +226,6 @@ Object.defineProperty(exports, "convertOiWindowsSettings", { enumerable: true, g
226
226
  Object.defineProperty(exports, "convertOiWindow", { enumerable: true, get: function () { return converter_1.convertOiWindow; } });
227
227
  Object.defineProperty(exports, "convertOiWindows", { enumerable: true, get: function () { return converter_1.convertOiWindows; } });
228
228
  Object.defineProperty(exports, "convertOiWindowsSettingsArray", { enumerable: true, get: function () { return converter_1.convertOiWindowsSettingsArray; } });
229
+ // Export builder
230
+ var builder_1 = require("./builder");
231
+ Object.defineProperty(exports, "buildCumulVolContext", { enumerable: true, get: function () { return builder_1.buildCumulVolContext; } });
@@ -2,11 +2,11 @@
2
2
  * @dev Main price impact module
3
3
  * @dev Exports cumulative volume, skew, and combined opening/closing price impact functionality
4
4
  */
5
- export { getTradeOpeningPriceImpact, getTradeOpeningPriceImpactAtMarket, TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, } from "./open";
5
+ export { getTradeOpeningPriceImpact, getTradeOpeningPriceImpactAtMarket, buildTradeOpeningPriceImpactContext, TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, } from "./open";
6
6
  export { getTradeClosingPriceImpact, getTradeClosingPriceImpactAtOracle, TradeClosingPriceImpactInput, TradeClosingPriceImpactContext, TradeClosingPriceImpactResult, } from "./close";
7
7
  export { getTradeCumulVolPriceImpactP, getCumulVolPriceImpact, // Convenience function
8
8
  getSpreadWithCumulVolPriceImpactP, getSpreadWithPriceImpactP, // Legacy alias
9
- getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, CumulVolContext, } from "./cumulVol";
9
+ getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, buildCumulVolContext, CumulVolContext, } from "./cumulVol";
10
10
  export { getNetSkewToken, getNetSkewCollateral, getTradeSkewDirection, calculateSkewPriceImpactP, getTradeSkewPriceImpact, getTradeSkewPriceImpactWithChecks, calculatePartialSizeToken, SkewPriceImpact, } from "./skew";
11
11
  export { convertPairOiToken, convertPairOiTokenArray, convertPairOiCollateral, convertPairOiCollateralArray, convertSkewDepth, convertPairSkewDepths, } from "./skew/converter";
12
12
  export { buildSkewPriceImpactContext } from "./skew/builder";
@@ -4,12 +4,14 @@
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.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.getTradeClosingPriceImpactAtOracle = exports.getTradeClosingPriceImpact = exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = void 0;
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.getTradeClosingPriceImpactAtOracle = exports.getTradeClosingPriceImpact = exports.buildTradeOpeningPriceImpactContext = exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = void 0;
8
8
  // Export trade opening price impact functionality
9
9
  var open_1 = require("./open");
10
10
  // Core functions
11
11
  Object.defineProperty(exports, "getTradeOpeningPriceImpact", { enumerable: true, get: function () { return open_1.getTradeOpeningPriceImpact; } });
12
12
  Object.defineProperty(exports, "getTradeOpeningPriceImpactAtMarket", { enumerable: true, get: function () { return open_1.getTradeOpeningPriceImpactAtMarket; } });
13
+ // Builder
14
+ Object.defineProperty(exports, "buildTradeOpeningPriceImpactContext", { enumerable: true, get: function () { return open_1.buildTradeOpeningPriceImpactContext; } });
13
15
  // Export trade closing price impact functionality
14
16
  var close_1 = require("./close");
15
17
  // Core functions
@@ -33,6 +35,8 @@ Object.defineProperty(exports, "convertOiWindowsSettings", { enumerable: true, g
33
35
  Object.defineProperty(exports, "convertOiWindow", { enumerable: true, get: function () { return cumulVol_1.convertOiWindow; } });
34
36
  Object.defineProperty(exports, "convertOiWindows", { enumerable: true, get: function () { return cumulVol_1.convertOiWindows; } });
35
37
  Object.defineProperty(exports, "convertOiWindowsSettingsArray", { enumerable: true, get: function () { return cumulVol_1.convertOiWindowsSettingsArray; } });
38
+ // Builder
39
+ Object.defineProperty(exports, "buildCumulVolContext", { enumerable: true, get: function () { return cumulVol_1.buildCumulVolContext; } });
36
40
  // Export skew price impact functionality
37
41
  var skew_1 = require("./skew");
38
42
  // Core functions
@@ -0,0 +1,21 @@
1
+ import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
2
+ import { TradeOpeningPriceImpactContext } from "./types";
3
+ /**
4
+ * @dev Builds a complete context for trade opening price impact calculations
5
+ * @dev Uses sub-context builders to create properly scoped contexts
6
+ * @param globalTradingVariables The transformed global trading variables from backend
7
+ * @param collateralIndex The collateral index (1-based)
8
+ * @param pairIndex The pair index
9
+ * @param additionalParams Additional parameters not available in trading variables
10
+ * @returns Complete context ready for getTradeOpeningPriceImpact
11
+ */
12
+ export declare const buildTradeOpeningPriceImpactContext: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, additionalParams: {
13
+ currentBlock: number;
14
+ contractsVersion?: number;
15
+ trader?: string;
16
+ userPriceImpact?: {
17
+ cumulVolPriceImpactMultiplier: number;
18
+ fixedSpreadP: number;
19
+ };
20
+ protectionCloseFactorWhitelist?: boolean;
21
+ }) => TradeOpeningPriceImpactContext | undefined;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTradeOpeningPriceImpactContext = void 0;
4
+ const builder_1 = require("../cumulVol/builder");
5
+ const builder_2 = require("../skew/builder");
6
+ /**
7
+ * @dev Builds a complete context for trade opening price impact calculations
8
+ * @dev Uses sub-context builders to create properly scoped contexts
9
+ * @param globalTradingVariables The transformed global trading variables from backend
10
+ * @param collateralIndex The collateral index (1-based)
11
+ * @param pairIndex The pair index
12
+ * @param additionalParams Additional parameters not available in trading variables
13
+ * @returns Complete context ready for getTradeOpeningPriceImpact
14
+ */
15
+ const buildTradeOpeningPriceImpactContext = (globalTradingVariables, collateralIndex, pairIndex, additionalParams) => {
16
+ var _a;
17
+ const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
18
+ if (!collateral) {
19
+ return undefined;
20
+ }
21
+ // Build cumulative volume subcontext
22
+ const cumulVolContext = (0, builder_1.buildCumulVolContext)(globalTradingVariables, collateralIndex, pairIndex, {
23
+ currentBlock: additionalParams.currentBlock,
24
+ contractsVersion: additionalParams.contractsVersion,
25
+ isPnlPositive: false,
26
+ isOpen: true,
27
+ createdBlock: undefined,
28
+ userPriceImpact: additionalParams.userPriceImpact,
29
+ protectionCloseFactorWhitelist: additionalParams.protectionCloseFactorWhitelist,
30
+ });
31
+ // Build skew price impact subcontext
32
+ const skewContext = (0, builder_2.buildSkewPriceImpactContext)(collateral, pairIndex);
33
+ if (!cumulVolContext || !skewContext) {
34
+ return undefined;
35
+ }
36
+ // Return structured context with proper subcontexts
37
+ return {
38
+ collateralPriceUsd: ((_a = collateral.prices) === null || _a === void 0 ? void 0 : _a.collateralPriceUsd) || 1,
39
+ cumulVolContext,
40
+ skewContext,
41
+ };
42
+ };
43
+ exports.buildTradeOpeningPriceImpactContext = buildTradeOpeningPriceImpactContext;
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult } from "./types";
6
6
  export type { TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, };
7
+ export { buildTradeOpeningPriceImpactContext } from "./builder";
7
8
  /**
8
9
  * @dev Calculates all price impacts for trade opening
9
10
  * @dev Mirrors contract's getTradeOpeningPriceImpact function
@@ -4,9 +4,12 @@
4
4
  * @dev Mirrors contract's TradingCommonUtils.getTradeOpeningPriceImpact
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = void 0;
7
+ exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = exports.buildTradeOpeningPriceImpactContext = void 0;
8
8
  const cumulVol_1 = require("../cumulVol");
9
9
  const skew_1 = require("../skew");
10
+ // Export builder
11
+ var builder_1 = require("./builder");
12
+ Object.defineProperty(exports, "buildTradeOpeningPriceImpactContext", { enumerable: true, get: function () { return builder_1.buildTradeOpeningPriceImpactContext; } });
10
13
  /**
11
14
  * @dev Calculates all price impacts for trade opening
12
15
  * @dev Mirrors contract's getTradeOpeningPriceImpact function
@@ -26,7 +29,7 @@ const getTradeOpeningPriceImpact = (input, context) => {
26
29
  input.pairIndex, input.long, positionSizeUsd, false, // isPnlPositive - not relevant for opening
27
30
  true, // open
28
31
  0, // lastPosIncreaseBlock - not relevant for opening
29
- context);
32
+ context.cumulVolContext);
30
33
  // Calculate skew price impact (v10+ only)
31
34
  const skewPriceImpactP = (0, skew_1.getTradeSkewPriceImpactWithChecks)({
32
35
  collateralIndex: input.collateralIndex,
@@ -23,9 +23,10 @@ export type TradeOpeningPriceImpactInput = {
23
23
  * @dev Context for trade opening price impact calculation
24
24
  * Combines contexts from spread, cumul vol, and skew
25
25
  */
26
- export type TradeOpeningPriceImpactContext = CumulVolContext & {
27
- skewContext: SkewPriceImpactContext;
26
+ export type TradeOpeningPriceImpactContext = {
28
27
  collateralPriceUsd: number;
28
+ cumulVolContext: CumulVolContext;
29
+ skewContext: SkewPriceImpactContext;
29
30
  };
30
31
  /**
31
32
  * @dev Result of trade opening price impact calculation
@@ -84,7 +84,7 @@ const calculateSkewPriceImpactP = (existingSkewToken, tradeSizeToken, skewDepth,
84
84
  const signedTradeSize = tradeSizeToken * tradeSkewMultiplier;
85
85
  // Formula: (existingSkew + tradeSize/2) / skewDepth
86
86
  const numerator = signedExistingSkew + signedTradeSize / 2;
87
- const priceImpactP = (numerator / skewDepth) * 100; // Convert to percentage
87
+ const priceImpactP = numerator / skewDepth;
88
88
  // Apply divider to match cumulative volume impact scale
89
89
  return priceImpactP / PRICE_IMPACT_DIVIDER;
90
90
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gainsnetwork/sdk",
3
- "version": "0.0.0-v10.rc8",
3
+ "version": "0.0.0-v10.rc9",
4
4
  "description": "Gains Network SDK",
5
5
  "main": "./lib/index.js",
6
6
  "files": [