@gainsnetwork/sdk 0.2.69 → 0.2.70-rc2

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 (40) hide show
  1. package/lib/constants.d.ts +10 -0
  2. package/lib/constants.js +13 -2
  3. package/lib/contracts/utils/pairs.js +10 -0
  4. package/lib/trade/types.d.ts +11 -1
  5. package/lib/trade/types.js +10 -0
  6. package/package.json +1 -1
  7. package/lib/contracts/fetch/fees/borrowingFeesV2.d.ts +0 -76
  8. package/lib/contracts/fetch/fees/borrowingFeesV2.js +0 -193
  9. package/lib/contracts/fetch/fees/fundingFees.d.ts +0 -66
  10. package/lib/contracts/fetch/fees/fundingFees.js +0 -150
  11. package/lib/contracts/fetch/priceImpact/skew.d.ts +0 -63
  12. package/lib/contracts/fetch/priceImpact/skew.js +0 -168
  13. package/lib/trade/fees/borrowingV2/converter.d.ts +0 -66
  14. package/lib/trade/fees/borrowingV2/converter.js +0 -121
  15. package/lib/trade/fees/borrowingV2/index.d.ts +0 -59
  16. package/lib/trade/fees/borrowingV2/index.js +0 -139
  17. package/lib/trade/fees/borrowingV2/types.d.ts +0 -79
  18. package/lib/trade/fees/borrowingV2/types.js +0 -5
  19. package/lib/trade/fees/fundingFees/converter.d.ts +0 -102
  20. package/lib/trade/fees/fundingFees/converter.js +0 -196
  21. package/lib/trade/fees/fundingFees/index.d.ts +0 -135
  22. package/lib/trade/fees/fundingFees/index.js +0 -322
  23. package/lib/trade/fees/fundingFees/types.d.ts +0 -77
  24. package/lib/trade/fees/fundingFees/types.js +0 -5
  25. package/lib/trade/fees/trading/converter.d.ts +0 -30
  26. package/lib/trade/fees/trading/converter.js +0 -43
  27. package/lib/trade/fees/trading/index.d.ts +0 -34
  28. package/lib/trade/fees/trading/index.js +0 -104
  29. package/lib/trade/fees/trading/types.d.ts +0 -39
  30. package/lib/trade/fees/trading/types.js +0 -5
  31. package/lib/trade/priceImpact/index.d.ts +0 -8
  32. package/lib/trade/priceImpact/index.js +0 -32
  33. package/lib/trade/priceImpact/skew/converter.d.ts +0 -77
  34. package/lib/trade/priceImpact/skew/converter.js +0 -171
  35. package/lib/trade/priceImpact/skew/index.d.ts +0 -57
  36. package/lib/trade/priceImpact/skew/index.js +0 -175
  37. package/lib/trade/priceImpact/skew/types.d.ts +0 -55
  38. package/lib/trade/priceImpact/skew/types.js +0 -5
  39. package/lib/trade/utils.d.ts +0 -18
  40. package/lib/trade/utils.js +0 -30
@@ -1,8 +0,0 @@
1
- /**
2
- * @dev Main price impact module
3
- * @dev Exports skew price impact functionality (v10+)
4
- * @dev Cumulative volume price impact remains in spread.ts for now
5
- */
6
- export { getNetSkewToken, getNetSkewCollateral, getTradeSkewDirection, calculateSkewPriceImpactP, getTradeSkewPriceImpact, getTradeSkewPriceImpactWithChecks, calculatePartialSizeToken, SkewPriceImpact, } from "./skew";
7
- export { convertPairOiToken, convertPairOiTokenArray, convertPairOiCollateral, convertPairOiCollateralArray, normalizeSkewDepth, createSkewDepth, createSkewPriceImpactContext, isValidSkewDepth, convertSkewDepthsArray, mergeSkewPriceImpactContexts, } from "./skew/converter";
8
- export type { PairOiToken, PairOiCollateral, SkewDepth, SkewPriceImpactInput, SkewPriceImpactResult, SkewPriceImpactContext, TradeSkewParams, PositionSizeResult, } from "./skew/types";
@@ -1,32 +0,0 @@
1
- "use strict";
2
- /**
3
- * @dev Main price impact module
4
- * @dev Exports skew price impact functionality (v10+)
5
- * @dev Cumulative volume price impact remains in spread.ts for now
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.mergeSkewPriceImpactContexts = exports.convertSkewDepthsArray = exports.isValidSkewDepth = exports.createSkewPriceImpactContext = exports.createSkewDepth = exports.normalizeSkewDepth = exports.convertPairOiCollateralArray = exports.convertPairOiCollateral = exports.convertPairOiTokenArray = exports.convertPairOiToken = exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpactWithChecks = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = void 0;
9
- // Export skew price impact functionality
10
- var skew_1 = require("./skew");
11
- // Core functions
12
- Object.defineProperty(exports, "getNetSkewToken", { enumerable: true, get: function () { return skew_1.getNetSkewToken; } });
13
- Object.defineProperty(exports, "getNetSkewCollateral", { enumerable: true, get: function () { return skew_1.getNetSkewCollateral; } });
14
- Object.defineProperty(exports, "getTradeSkewDirection", { enumerable: true, get: function () { return skew_1.getTradeSkewDirection; } });
15
- Object.defineProperty(exports, "calculateSkewPriceImpactP", { enumerable: true, get: function () { return skew_1.calculateSkewPriceImpactP; } });
16
- Object.defineProperty(exports, "getTradeSkewPriceImpact", { enumerable: true, get: function () { return skew_1.getTradeSkewPriceImpact; } });
17
- Object.defineProperty(exports, "getTradeSkewPriceImpactWithChecks", { enumerable: true, get: function () { return skew_1.getTradeSkewPriceImpactWithChecks; } });
18
- Object.defineProperty(exports, "calculatePartialSizeToken", { enumerable: true, get: function () { return skew_1.calculatePartialSizeToken; } });
19
- // Types namespace
20
- Object.defineProperty(exports, "SkewPriceImpact", { enumerable: true, get: function () { return skew_1.SkewPriceImpact; } });
21
- // Export converters
22
- var converter_1 = require("./skew/converter");
23
- Object.defineProperty(exports, "convertPairOiToken", { enumerable: true, get: function () { return converter_1.convertPairOiToken; } });
24
- Object.defineProperty(exports, "convertPairOiTokenArray", { enumerable: true, get: function () { return converter_1.convertPairOiTokenArray; } });
25
- Object.defineProperty(exports, "convertPairOiCollateral", { enumerable: true, get: function () { return converter_1.convertPairOiCollateral; } });
26
- Object.defineProperty(exports, "convertPairOiCollateralArray", { enumerable: true, get: function () { return converter_1.convertPairOiCollateralArray; } });
27
- Object.defineProperty(exports, "normalizeSkewDepth", { enumerable: true, get: function () { return converter_1.normalizeSkewDepth; } });
28
- Object.defineProperty(exports, "createSkewDepth", { enumerable: true, get: function () { return converter_1.createSkewDepth; } });
29
- Object.defineProperty(exports, "createSkewPriceImpactContext", { enumerable: true, get: function () { return converter_1.createSkewPriceImpactContext; } });
30
- Object.defineProperty(exports, "isValidSkewDepth", { enumerable: true, get: function () { return converter_1.isValidSkewDepth; } });
31
- Object.defineProperty(exports, "convertSkewDepthsArray", { enumerable: true, get: function () { return converter_1.convertSkewDepthsArray; } });
32
- Object.defineProperty(exports, "mergeSkewPriceImpactContexts", { enumerable: true, get: function () { return converter_1.mergeSkewPriceImpactContexts; } });
@@ -1,77 +0,0 @@
1
- /**
2
- * @dev Converters for skew price impact data between contract and SDK formats
3
- * @dev All BigNumber values are normalized to floats with appropriate precision
4
- */
5
- import { IPriceImpact } from "../../../contracts/types/generated/GNSMultiCollatDiamond";
6
- import { PairOiToken, PairOiCollateral, SkewDepth, SkewPriceImpactContext } from "./types";
7
- /**
8
- * @dev Converts contract pair OI token data to SDK format
9
- * @param contractData Contract pair OI token struct
10
- * @returns Normalized pair OI token data
11
- */
12
- export declare const convertPairOiToken: (contractData: IPriceImpact.PairOiTokenStruct) => PairOiToken;
13
- /**
14
- * @dev Converts array of contract pair OI token data to SDK format
15
- * @param contractDataArray Array of contract pair OI token data
16
- * @returns Array of normalized pair OI token data
17
- */
18
- export declare const convertPairOiTokenArray: (contractDataArray: IPriceImpact.PairOiTokenStruct[]) => PairOiToken[];
19
- /**
20
- * @dev Converts contract pair OI collateral data to SDK format
21
- * @param contractData Contract pair OI collateral struct
22
- * @param collateralDecimals Number of decimals for the collateral (e.g., 18 for DAI, 6 for USDC)
23
- * @returns Normalized pair OI collateral data
24
- */
25
- export declare const convertPairOiCollateral: (contractData: IPriceImpact.PairOiCollateralStruct, collateralDecimals: number) => PairOiCollateral;
26
- /**
27
- * @dev Converts array of contract pair OI collateral data to SDK format
28
- * @param contractDataArray Array of contract pair OI collateral data
29
- * @param collateralDecimals Array of collateral decimals for each entry
30
- * @returns Array of normalized pair OI collateral data
31
- */
32
- export declare const convertPairOiCollateralArray: (contractDataArray: IPriceImpact.PairOiCollateralStruct[], collateralDecimals: number[]) => PairOiCollateral[];
33
- /**
34
- * @dev Normalizes skew depth from contract format
35
- * @param depth Skew depth from contract (in collateral wei)
36
- * @param collateralDecimals Number of decimals for the collateral
37
- * @returns Normalized skew depth
38
- */
39
- export declare const normalizeSkewDepth: (depth: bigint | number | string, collateralDecimals: number) => number;
40
- /**
41
- * @dev Creates a skew depth object
42
- * @param collateralIndex Collateral index
43
- * @param pairIndex Pair index
44
- * @param depth Normalized depth value
45
- * @returns Skew depth object
46
- */
47
- export declare const createSkewDepth: (collateralIndex: number, pairIndex: number, depth: number) => SkewDepth;
48
- /**
49
- * @dev Creates skew price impact context from arrays of data
50
- * @param collateralIndices Array of collateral indices
51
- * @param pairIndices Array of pair indices
52
- * @param skewDepths Array of normalized skew depths
53
- * @param pairOiTokens Array of pair OI token data
54
- * @returns Complete skew price impact context
55
- */
56
- export declare const createSkewPriceImpactContext: (collateralIndices: number[], pairIndices: number[], skewDepths: number[], pairOiTokens: PairOiToken[]) => SkewPriceImpactContext;
57
- /**
58
- * @dev Validates skew depth is within reasonable bounds
59
- * @param depth Normalized skew depth
60
- * @param minDepth Minimum allowed depth (default: 0)
61
- * @param maxDepth Maximum allowed depth (default: 1e12)
62
- * @returns Whether depth is valid
63
- */
64
- export declare const isValidSkewDepth: (depth: number, minDepth?: number, maxDepth?: number) => boolean;
65
- /**
66
- * @dev Converts contract skew depths array to normalized values
67
- * @param contractDepths Array of depths from contract
68
- * @param collateralDecimals Array of decimals for each collateral
69
- * @returns Array of normalized depths
70
- */
71
- export declare const convertSkewDepthsArray: (contractDepths: Array<bigint | number | string>, collateralDecimals: number[]) => number[];
72
- /**
73
- * @dev Merges multiple contexts into one
74
- * @param contexts Array of contexts to merge
75
- * @returns Merged context
76
- */
77
- export declare const mergeSkewPriceImpactContexts: (contexts: SkewPriceImpactContext[]) => SkewPriceImpactContext;
@@ -1,171 +0,0 @@
1
- "use strict";
2
- /**
3
- * @dev Converters for skew price impact data between contract and SDK formats
4
- * @dev All BigNumber values are normalized to floats with appropriate precision
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.mergeSkewPriceImpactContexts = exports.convertSkewDepthsArray = exports.isValidSkewDepth = exports.createSkewPriceImpactContext = exports.createSkewDepth = exports.normalizeSkewDepth = exports.convertPairOiCollateralArray = exports.convertPairOiCollateral = exports.convertPairOiTokenArray = exports.convertPairOiToken = void 0;
8
- /**
9
- * @dev Converts contract pair OI token data to SDK format
10
- * @param contractData Contract pair OI token struct
11
- * @returns Normalized pair OI token data
12
- */
13
- const convertPairOiToken = (contractData) => {
14
- // Token amounts are stored as 1e18 in contract
15
- return {
16
- oiLongToken: Number(contractData.oiLongToken) / 1e18,
17
- oiShortToken: Number(contractData.oiShortToken) / 1e18,
18
- };
19
- };
20
- exports.convertPairOiToken = convertPairOiToken;
21
- /**
22
- * @dev Converts array of contract pair OI token data to SDK format
23
- * @param contractDataArray Array of contract pair OI token data
24
- * @returns Array of normalized pair OI token data
25
- */
26
- const convertPairOiTokenArray = (contractDataArray) => {
27
- return contractDataArray.map(exports.convertPairOiToken);
28
- };
29
- exports.convertPairOiTokenArray = convertPairOiTokenArray;
30
- /**
31
- * @dev Converts contract pair OI collateral data to SDK format
32
- * @param contractData Contract pair OI collateral struct
33
- * @param collateralDecimals Number of decimals for the collateral (e.g., 18 for DAI, 6 for USDC)
34
- * @returns Normalized pair OI collateral data
35
- */
36
- const convertPairOiCollateral = (contractData, collateralDecimals) => {
37
- const divisor = Math.pow(10, collateralDecimals);
38
- return {
39
- oiLongCollateral: Number(contractData.oiLongCollateral) / divisor,
40
- oiShortCollateral: Number(contractData.oiShortCollateral) / divisor,
41
- };
42
- };
43
- exports.convertPairOiCollateral = convertPairOiCollateral;
44
- /**
45
- * @dev Converts array of contract pair OI collateral data to SDK format
46
- * @param contractDataArray Array of contract pair OI collateral data
47
- * @param collateralDecimals Array of collateral decimals for each entry
48
- * @returns Array of normalized pair OI collateral data
49
- */
50
- const convertPairOiCollateralArray = (contractDataArray, collateralDecimals) => {
51
- if (contractDataArray.length !== collateralDecimals.length) {
52
- throw new Error("Contract data array and collateral decimals array must have the same length");
53
- }
54
- return contractDataArray.map((data, index) => (0, exports.convertPairOiCollateral)(data, collateralDecimals[index]));
55
- };
56
- exports.convertPairOiCollateralArray = convertPairOiCollateralArray;
57
- /**
58
- * @dev Normalizes skew depth from contract format
59
- * @param depth Skew depth from contract (in collateral wei)
60
- * @param collateralDecimals Number of decimals for the collateral
61
- * @returns Normalized skew depth
62
- */
63
- const normalizeSkewDepth = (depth, collateralDecimals) => {
64
- const divisor = Math.pow(10, collateralDecimals);
65
- return Number(depth) / divisor;
66
- };
67
- exports.normalizeSkewDepth = normalizeSkewDepth;
68
- /**
69
- * @dev Creates a skew depth object
70
- * @param collateralIndex Collateral index
71
- * @param pairIndex Pair index
72
- * @param depth Normalized depth value
73
- * @returns Skew depth object
74
- */
75
- const createSkewDepth = (collateralIndex, pairIndex, depth) => {
76
- return {
77
- collateralIndex,
78
- pairIndex,
79
- depth,
80
- };
81
- };
82
- exports.createSkewDepth = createSkewDepth;
83
- /**
84
- * @dev Creates skew price impact context from arrays of data
85
- * @param collateralIndices Array of collateral indices
86
- * @param pairIndices Array of pair indices
87
- * @param skewDepths Array of normalized skew depths
88
- * @param pairOiTokens Array of pair OI token data
89
- * @returns Complete skew price impact context
90
- */
91
- const createSkewPriceImpactContext = (collateralIndices, pairIndices, skewDepths, pairOiTokens) => {
92
- if (collateralIndices.length !== pairIndices.length ||
93
- pairIndices.length !== skewDepths.length ||
94
- skewDepths.length !== pairOiTokens.length) {
95
- throw new Error("All input arrays must have the same length");
96
- }
97
- const context = {
98
- skewDepths: {},
99
- pairOiTokens: {},
100
- };
101
- // Build nested objects indexed by collateralIndex and pairIndex
102
- for (let i = 0; i < collateralIndices.length; i++) {
103
- const collateralIndex = collateralIndices[i];
104
- const pairIndex = pairIndices[i];
105
- // Initialize collateral index objects if they don't exist
106
- if (!context.skewDepths[collateralIndex]) {
107
- context.skewDepths[collateralIndex] = {};
108
- }
109
- if (!context.pairOiTokens[collateralIndex]) {
110
- context.pairOiTokens[collateralIndex] = {};
111
- }
112
- // Store data
113
- context.skewDepths[collateralIndex][pairIndex] = skewDepths[i];
114
- context.pairOiTokens[collateralIndex][pairIndex] = pairOiTokens[i];
115
- }
116
- return context;
117
- };
118
- exports.createSkewPriceImpactContext = createSkewPriceImpactContext;
119
- /**
120
- * @dev Validates skew depth is within reasonable bounds
121
- * @param depth Normalized skew depth
122
- * @param minDepth Minimum allowed depth (default: 0)
123
- * @param maxDepth Maximum allowed depth (default: 1e12)
124
- * @returns Whether depth is valid
125
- */
126
- const isValidSkewDepth = (depth, minDepth = 0, maxDepth = 1e12) => {
127
- return depth >= minDepth && depth <= maxDepth;
128
- };
129
- exports.isValidSkewDepth = isValidSkewDepth;
130
- /**
131
- * @dev Converts contract skew depths array to normalized values
132
- * @param contractDepths Array of depths from contract
133
- * @param collateralDecimals Array of decimals for each collateral
134
- * @returns Array of normalized depths
135
- */
136
- const convertSkewDepthsArray = (contractDepths, collateralDecimals) => {
137
- if (contractDepths.length !== collateralDecimals.length) {
138
- throw new Error("Contract depths array and collateral decimals array must have the same length");
139
- }
140
- return contractDepths.map((depth, index) => (0, exports.normalizeSkewDepth)(depth, collateralDecimals[index]));
141
- };
142
- exports.convertSkewDepthsArray = convertSkewDepthsArray;
143
- /**
144
- * @dev Merges multiple contexts into one
145
- * @param contexts Array of contexts to merge
146
- * @returns Merged context
147
- */
148
- const mergeSkewPriceImpactContexts = (contexts) => {
149
- const merged = {
150
- skewDepths: {},
151
- pairOiTokens: {},
152
- };
153
- for (const context of contexts) {
154
- // Merge skew depths
155
- for (const collateralIndex in context.skewDepths) {
156
- if (!merged.skewDepths[collateralIndex]) {
157
- merged.skewDepths[collateralIndex] = {};
158
- }
159
- Object.assign(merged.skewDepths[collateralIndex], context.skewDepths[collateralIndex]);
160
- }
161
- // Merge pair OI tokens
162
- for (const collateralIndex in context.pairOiTokens) {
163
- if (!merged.pairOiTokens[collateralIndex]) {
164
- merged.pairOiTokens[collateralIndex] = {};
165
- }
166
- Object.assign(merged.pairOiTokens[collateralIndex], context.pairOiTokens[collateralIndex]);
167
- }
168
- }
169
- return merged;
170
- };
171
- exports.mergeSkewPriceImpactContexts = mergeSkewPriceImpactContexts;
@@ -1,57 +0,0 @@
1
- /**
2
- * @dev Skew price impact calculations for v10+ trades
3
- * @dev Based on formula: (existingSkew + tradeSize/2) / skewDepth
4
- */
5
- import { PairOiToken, SkewPriceImpactInput, SkewPriceImpactResult, SkewPriceImpactContext, TradeSkewParams } from "./types";
6
- /**
7
- * @dev Calculates net skew in tokens (long - short)
8
- * @param pairOi Pair OI data with long and short token amounts
9
- * @returns Net skew in tokens (positive = long heavy, negative = short heavy)
10
- */
11
- export declare const getNetSkewToken: (pairOi: PairOiToken) => number;
12
- /**
13
- * @dev Calculates net skew in collateral tokens
14
- * @param netSkewToken Net skew in tokens
15
- * @param currentPrice Current pair price
16
- * @returns Net skew in collateral tokens
17
- */
18
- export declare const getNetSkewCollateral: (netSkewToken: number, currentPrice: number) => number;
19
- /**
20
- * @dev Determines trade direction impact on skew
21
- * @param long Is long position
22
- * @param open Is opening (true) or closing (false)
23
- * @returns Whether trade increases or decreases skew
24
- */
25
- export declare const getTradeSkewDirection: (long: boolean, open: boolean) => boolean;
26
- /**
27
- * @dev Core skew price impact calculation
28
- * @param existingSkewToken Current net skew in tokens (signed)
29
- * @param tradeSizeToken Trade size in tokens (always positive)
30
- * @param skewDepth Skew depth in collateral tokens
31
- * @param tradeIncreasesSkew Whether trade increases skew in its direction
32
- * @returns Price impact percentage (can be positive or negative)
33
- */
34
- export declare const calculateSkewPriceImpactP: (existingSkewToken: number, tradeSizeToken: number, skewDepth: number, tradeIncreasesSkew: boolean) => number;
35
- /**
36
- * @dev Main function to calculate skew price impact for a trade
37
- * @param context Skew price impact context with depths and OI data
38
- * @param input Trade parameters
39
- * @returns Skew price impact result
40
- */
41
- export declare const getTradeSkewPriceImpact: (context: SkewPriceImpactContext, input: SkewPriceImpactInput) => 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
- /**
50
- * @dev Calculate position sizes for partial operations
51
- * @param originalSizeCollateral Original position size in collateral
52
- * @param deltaCollateral Position size delta in collateral
53
- * @param originalSizeToken Original position size in tokens
54
- * @returns Delta in tokens proportional to collateral delta
55
- */
56
- export declare const calculatePartialSizeToken: (originalSizeCollateral: number, deltaCollateral: number, originalSizeToken: number) => number;
57
- export * as SkewPriceImpact from "./types";
@@ -1,175 +0,0 @@
1
- "use strict";
2
- /**
3
- * @dev Skew price impact calculations for v10+ trades
4
- * @dev Based on formula: (existingSkew + tradeSize/2) / skewDepth
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpactWithChecks = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = void 0;
31
- const utils_1 = require("../../utils");
32
- // Constants
33
- const PRICE_IMPACT_DIVIDER = 2; // Half price impact to match cumulative volume impact scale
34
- /**
35
- * @dev Calculates net skew in tokens (long - short)
36
- * @param pairOi Pair OI data with long and short token amounts
37
- * @returns Net skew in tokens (positive = long heavy, negative = short heavy)
38
- */
39
- const getNetSkewToken = (pairOi) => {
40
- return pairOi.oiLongToken - pairOi.oiShortToken;
41
- };
42
- exports.getNetSkewToken = getNetSkewToken;
43
- /**
44
- * @dev Calculates net skew in collateral tokens
45
- * @param netSkewToken Net skew in tokens
46
- * @param currentPrice Current pair price
47
- * @returns Net skew in collateral tokens
48
- */
49
- const getNetSkewCollateral = (netSkewToken, currentPrice) => {
50
- return netSkewToken * currentPrice;
51
- };
52
- exports.getNetSkewCollateral = getNetSkewCollateral;
53
- /**
54
- * @dev Determines trade direction impact on skew
55
- * @param long Is long position
56
- * @param open Is opening (true) or closing (false)
57
- * @returns Whether trade increases or decreases skew
58
- */
59
- const getTradeSkewDirection = (long, open) => {
60
- // Opening long or closing short increases positive skew
61
- // Opening short or closing long increases negative skew
62
- return (long && open) || (!long && !open);
63
- };
64
- exports.getTradeSkewDirection = getTradeSkewDirection;
65
- /**
66
- * @dev Core skew price impact calculation
67
- * @param existingSkewToken Current net skew in tokens (signed)
68
- * @param tradeSizeToken Trade size in tokens (always positive)
69
- * @param skewDepth Skew depth in collateral tokens
70
- * @param tradeIncreasesSkew Whether trade increases skew in its direction
71
- * @returns Price impact percentage (can be positive or negative)
72
- */
73
- const calculateSkewPriceImpactP = (existingSkewToken, tradeSizeToken, skewDepth, tradeIncreasesSkew) => {
74
- if (skewDepth === 0) {
75
- return 0; // No impact if depth is 0
76
- }
77
- // Convert signed values based on trade direction
78
- const tradeSkewMultiplier = tradeIncreasesSkew ? 1 : -1;
79
- const signedExistingSkew = existingSkewToken;
80
- const signedTradeSize = tradeSizeToken * tradeSkewMultiplier;
81
- // Formula: (existingSkew + tradeSize/2) / skewDepth
82
- const numerator = signedExistingSkew + signedTradeSize / 2;
83
- const priceImpactP = (numerator / skewDepth) * 100; // Convert to percentage
84
- // Apply divider to match cumulative volume impact scale
85
- return priceImpactP / PRICE_IMPACT_DIVIDER;
86
- };
87
- exports.calculateSkewPriceImpactP = calculateSkewPriceImpactP;
88
- /**
89
- * @dev Main function to calculate skew price impact for a trade
90
- * @param context Skew price impact context with depths and OI data
91
- * @param input Trade parameters
92
- * @returns Skew price impact result
93
- */
94
- const getTradeSkewPriceImpact = (context, input) => {
95
- var _a, _b;
96
- // Get skew depth for the pair
97
- const skewDepth = (_a = context.skewDepths[input.collateralIndex]) === null || _a === void 0 ? void 0 : _a[input.pairIndex];
98
- if (skewDepth === undefined) {
99
- throw new Error(`Missing skew depth for collateral ${input.collateralIndex} pair ${input.pairIndex}`);
100
- }
101
- // Get pair OI data
102
- const pairOi = (_b = context.pairOiTokens[input.collateralIndex]) === null || _b === void 0 ? void 0 : _b[input.pairIndex];
103
- if (!pairOi) {
104
- throw new Error(`Missing pair OI data for collateral ${input.collateralIndex} pair ${input.pairIndex}`);
105
- }
106
- // Calculate net skew
107
- const netSkewToken = (0, exports.getNetSkewToken)(pairOi);
108
- // Determine trade direction impact
109
- const tradeIncreasesSkew = (0, exports.getTradeSkewDirection)(input.long, input.open);
110
- // Calculate price impact
111
- const priceImpactP = (0, exports.calculateSkewPriceImpactP)(netSkewToken, input.positionSizeToken, skewDepth, tradeIncreasesSkew);
112
- // Determine trade direction relative to skew
113
- let tradeDirection;
114
- if (priceImpactP > 0) {
115
- tradeDirection = "increase";
116
- }
117
- else if (priceImpactP < 0) {
118
- tradeDirection = "decrease";
119
- }
120
- else {
121
- tradeDirection = "neutral";
122
- }
123
- return {
124
- priceImpactP,
125
- netSkewToken,
126
- netSkewCollateral: 0,
127
- tradeDirection,
128
- };
129
- };
130
- exports.getTradeSkewPriceImpact = getTradeSkewPriceImpact;
131
- /**
132
- * @dev Calculate skew price impact for a trade with all parameters
133
- * @param params Trade parameters including price and version checks
134
- * @param context Skew price impact context
135
- * @returns Price impact percentage or 0 if not applicable
136
- */
137
- const getTradeSkewPriceImpactWithChecks = (params, context) => {
138
- // v10+ trades only
139
- if (params.contractsVersion < 10) {
140
- return 0;
141
- }
142
- // Counter trades don't pay skew impact
143
- if (params.isCounterTrade) {
144
- return 0;
145
- }
146
- // Calculate position size in tokens
147
- const positionSizeToken = (0, utils_1.calculatePositionSizeToken)(params.positionSizeCollateral, params.currentPrice);
148
- // Get skew price impact
149
- const result = (0, exports.getTradeSkewPriceImpact)(context, {
150
- collateralIndex: params.collateralIndex,
151
- pairIndex: params.pairIndex,
152
- long: params.long,
153
- open: params.open,
154
- positionSizeToken,
155
- });
156
- return result.priceImpactP;
157
- };
158
- exports.getTradeSkewPriceImpactWithChecks = getTradeSkewPriceImpactWithChecks;
159
- /**
160
- * @dev Calculate position sizes for partial operations
161
- * @param originalSizeCollateral Original position size in collateral
162
- * @param deltaCollateral Position size delta in collateral
163
- * @param originalSizeToken Original position size in tokens
164
- * @returns Delta in tokens proportional to collateral delta
165
- */
166
- const calculatePartialSizeToken = (originalSizeCollateral, deltaCollateral, originalSizeToken) => {
167
- if (originalSizeCollateral === 0) {
168
- return 0;
169
- }
170
- // For partial close/add, token delta is proportional to collateral delta
171
- return (deltaCollateral * originalSizeToken) / originalSizeCollateral;
172
- };
173
- exports.calculatePartialSizeToken = calculatePartialSizeToken;
174
- // Export namespace for types
175
- exports.SkewPriceImpact = __importStar(require("./types"));
@@ -1,55 +0,0 @@
1
- /**
2
- * @dev Skew price impact types for v10+ trades
3
- */
4
- export type PairOiToken = {
5
- oiLongToken: number;
6
- oiShortToken: number;
7
- };
8
- export type PairOiCollateral = {
9
- oiLongCollateral: number;
10
- oiShortCollateral: number;
11
- };
12
- export type SkewDepth = {
13
- collateralIndex: number;
14
- pairIndex: number;
15
- depth: number;
16
- };
17
- export type SkewPriceImpactInput = {
18
- collateralIndex: number;
19
- pairIndex: number;
20
- long: boolean;
21
- open: boolean;
22
- positionSizeToken: number;
23
- };
24
- export type SkewPriceImpactResult = {
25
- priceImpactP: number;
26
- netSkewToken: number;
27
- netSkewCollateral: number;
28
- tradeDirection: "increase" | "decrease" | "neutral";
29
- };
30
- export type SkewPriceImpactContext = {
31
- skewDepths: {
32
- [collateralIndex: number]: {
33
- [pairIndex: number]: number;
34
- };
35
- };
36
- pairOiTokens: {
37
- [collateralIndex: number]: {
38
- [pairIndex: number]: PairOiToken;
39
- };
40
- };
41
- };
42
- export type TradeSkewParams = {
43
- collateralIndex: number;
44
- pairIndex: number;
45
- long: boolean;
46
- open: boolean;
47
- positionSizeCollateral: number;
48
- currentPrice: number;
49
- contractsVersion: number;
50
- isCounterTrade?: boolean;
51
- };
52
- export type PositionSizeResult = {
53
- positionSizeToken: number;
54
- positionSizeCollateral: number;
55
- };
@@ -1,5 +0,0 @@
1
- "use strict";
2
- /**
3
- * @dev Skew price impact types for v10+ trades
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,18 +0,0 @@
1
- /**
2
- * @dev Trade-specific utility functions
3
- * @dev Common calculations and conversions used across trading modules
4
- */
5
- /**
6
- * @dev Converts position size from collateral to tokens
7
- * @param positionSizeCollateral Position size in collateral tokens
8
- * @param currentPrice Current pair price
9
- * @returns Position size in tokens
10
- */
11
- export declare const calculatePositionSizeToken: (positionSizeCollateral: number, currentPrice: number) => number;
12
- /**
13
- * @dev Converts position size from tokens to collateral
14
- * @param positionSizeToken Position size in tokens
15
- * @param currentPrice Current pair price
16
- * @returns Position size in collateral tokens
17
- */
18
- export declare const calculatePositionSizeCollateral: (positionSizeToken: number, currentPrice: number) => number;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- /**
3
- * @dev Trade-specific utility functions
4
- * @dev Common calculations and conversions used across trading modules
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.calculatePositionSizeCollateral = exports.calculatePositionSizeToken = void 0;
8
- /**
9
- * @dev Converts position size from collateral to tokens
10
- * @param positionSizeCollateral Position size in collateral tokens
11
- * @param currentPrice Current pair price
12
- * @returns Position size in tokens
13
- */
14
- const calculatePositionSizeToken = (positionSizeCollateral, currentPrice) => {
15
- if (currentPrice === 0) {
16
- throw new Error("Current price cannot be zero");
17
- }
18
- return positionSizeCollateral / currentPrice;
19
- };
20
- exports.calculatePositionSizeToken = calculatePositionSizeToken;
21
- /**
22
- * @dev Converts position size from tokens to collateral
23
- * @param positionSizeToken Position size in tokens
24
- * @param currentPrice Current pair price
25
- * @returns Position size in collateral tokens
26
- */
27
- const calculatePositionSizeCollateral = (positionSizeToken, currentPrice) => {
28
- return positionSizeToken * currentPrice;
29
- };
30
- exports.calculatePositionSizeCollateral = calculatePositionSizeCollateral;