@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.
- package/lib/constants.d.ts +10 -0
- package/lib/constants.js +13 -2
- package/lib/contracts/utils/pairs.js +10 -0
- package/lib/trade/types.d.ts +11 -1
- package/lib/trade/types.js +10 -0
- package/package.json +1 -1
- package/lib/contracts/fetch/fees/borrowingFeesV2.d.ts +0 -76
- package/lib/contracts/fetch/fees/borrowingFeesV2.js +0 -193
- package/lib/contracts/fetch/fees/fundingFees.d.ts +0 -66
- package/lib/contracts/fetch/fees/fundingFees.js +0 -150
- package/lib/contracts/fetch/priceImpact/skew.d.ts +0 -63
- package/lib/contracts/fetch/priceImpact/skew.js +0 -168
- package/lib/trade/fees/borrowingV2/converter.d.ts +0 -66
- package/lib/trade/fees/borrowingV2/converter.js +0 -121
- package/lib/trade/fees/borrowingV2/index.d.ts +0 -59
- package/lib/trade/fees/borrowingV2/index.js +0 -139
- package/lib/trade/fees/borrowingV2/types.d.ts +0 -79
- package/lib/trade/fees/borrowingV2/types.js +0 -5
- package/lib/trade/fees/fundingFees/converter.d.ts +0 -102
- package/lib/trade/fees/fundingFees/converter.js +0 -196
- package/lib/trade/fees/fundingFees/index.d.ts +0 -135
- package/lib/trade/fees/fundingFees/index.js +0 -322
- package/lib/trade/fees/fundingFees/types.d.ts +0 -77
- package/lib/trade/fees/fundingFees/types.js +0 -5
- package/lib/trade/fees/trading/converter.d.ts +0 -30
- package/lib/trade/fees/trading/converter.js +0 -43
- package/lib/trade/fees/trading/index.d.ts +0 -34
- package/lib/trade/fees/trading/index.js +0 -104
- package/lib/trade/fees/trading/types.d.ts +0 -39
- package/lib/trade/fees/trading/types.js +0 -5
- package/lib/trade/priceImpact/index.d.ts +0 -8
- package/lib/trade/priceImpact/index.js +0 -32
- package/lib/trade/priceImpact/skew/converter.d.ts +0 -77
- package/lib/trade/priceImpact/skew/converter.js +0 -171
- package/lib/trade/priceImpact/skew/index.d.ts +0 -57
- package/lib/trade/priceImpact/skew/index.js +0 -175
- package/lib/trade/priceImpact/skew/types.d.ts +0 -55
- package/lib/trade/priceImpact/skew/types.js +0 -5
- package/lib/trade/utils.d.ts +0 -18
- 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
|
-
};
|
package/lib/trade/utils.d.ts
DELETED
|
@@ -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;
|
package/lib/trade/utils.js
DELETED
|
@@ -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;
|