@gainsnetwork/sdk 0.0.0-v10.rc1 → 0.0.0-v10.rc10

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 (210) hide show
  1. package/lib/backend/globalTrades/index.d.ts +11 -0
  2. package/lib/backend/globalTrades/index.js +69 -0
  3. package/lib/backend/index.d.ts +3 -0
  4. package/lib/backend/index.js +28 -0
  5. package/lib/backend/tradingVariables/backend.types.d.ts +318 -0
  6. package/lib/backend/tradingVariables/backend.types.js +2 -0
  7. package/lib/backend/tradingVariables/converter.d.ts +34 -0
  8. package/lib/backend/tradingVariables/converter.js +338 -0
  9. package/lib/backend/tradingVariables/index.d.ts +5 -0
  10. package/lib/backend/tradingVariables/index.js +96 -0
  11. package/lib/backend/tradingVariables/types.d.ts +113 -0
  12. package/lib/backend/tradingVariables/types.js +14 -0
  13. package/lib/constants.d.ts +18 -1
  14. package/lib/constants.js +19 -2
  15. package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
  16. package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
  17. package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
  18. package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
  19. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
  20. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
  21. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
  22. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
  23. package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -0
  24. package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -0
  25. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.d.ts +613 -0
  26. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.js +2 -0
  27. package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
  28. package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
  29. package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
  30. package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -0
  31. package/lib/contracts/types/generated/GNSTrading.d.ts +758 -0
  32. package/lib/contracts/types/generated/GNSTrading.js +2 -0
  33. package/lib/contracts/types/generated/GNSTradingCallbacks.d.ts +875 -0
  34. package/lib/contracts/types/generated/GNSTradingCallbacks.js +2 -0
  35. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.d.ts +806 -0
  36. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.js +2 -0
  37. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.d.ts +821 -0
  38. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.js +2 -0
  39. package/lib/contracts/types/generated/GNSTradingStorage.d.ts +1387 -0
  40. package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
  41. package/lib/contracts/types/generated/GTokenV6_3_2.d.ts +1838 -0
  42. package/lib/contracts/types/generated/GTokenV6_3_2.js +2 -0
  43. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
  44. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
  45. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
  46. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
  47. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
  48. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
  49. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
  50. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
  51. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
  52. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
  53. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
  54. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
  55. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
  56. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
  57. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
  58. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
  59. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
  60. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
  61. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
  62. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
  63. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
  64. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
  65. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
  66. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
  67. package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
  68. package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
  69. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
  70. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -0
  71. package/lib/contracts/types/index.d.ts +2 -1
  72. package/lib/contracts/types/index.js +1 -0
  73. package/lib/contracts/utils/openTrades.d.ts +1 -0
  74. package/lib/contracts/utils/openTrades.js +94 -56
  75. package/lib/contracts/utils/pairs.js +17 -0
  76. package/lib/index.d.ts +2 -0
  77. package/lib/index.js +5 -0
  78. package/lib/markets/collateral/converter.d.ts +5 -0
  79. package/lib/markets/collateral/converter.js +11 -0
  80. package/lib/markets/collateral/index.d.ts +1 -0
  81. package/lib/markets/collateral/index.js +17 -0
  82. package/lib/markets/collateral/types.d.ts +7 -0
  83. package/lib/markets/collateral/types.js +2 -0
  84. package/lib/markets/index.d.ts +3 -0
  85. package/lib/markets/index.js +3 -0
  86. package/lib/markets/oi/converter.d.ts +63 -0
  87. package/lib/markets/oi/converter.js +103 -0
  88. package/lib/markets/oi/fetcher.d.ts +58 -0
  89. package/lib/markets/oi/fetcher.js +181 -0
  90. package/lib/markets/oi/index.d.ts +10 -0
  91. package/lib/markets/oi/index.js +37 -0
  92. package/lib/markets/oi/types.d.ts +82 -0
  93. package/lib/markets/oi/types.js +6 -0
  94. package/lib/markets/oi/validation.d.ts +80 -0
  95. package/lib/markets/oi/validation.js +172 -0
  96. package/lib/markets/price/builder.d.ts +25 -0
  97. package/lib/markets/price/builder.js +69 -0
  98. package/lib/markets/price/index.d.ts +6 -0
  99. package/lib/markets/price/index.js +22 -0
  100. package/lib/markets/price/marketPrice.d.ts +12 -0
  101. package/lib/markets/price/marketPrice.js +34 -0
  102. package/lib/markets/price/types.d.ts +23 -0
  103. package/lib/markets/price/types.js +5 -0
  104. package/lib/trade/fees/borrowing/builder.d.ts +14 -0
  105. package/lib/trade/fees/borrowing/builder.js +33 -0
  106. package/lib/trade/fees/borrowing/index.d.ts +24 -2
  107. package/lib/trade/fees/borrowing/index.js +51 -16
  108. package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
  109. package/lib/trade/fees/borrowingV2/builder.js +24 -0
  110. package/lib/trade/fees/borrowingV2/converter.d.ts +75 -0
  111. package/lib/trade/fees/borrowingV2/converter.js +132 -0
  112. package/lib/trade/fees/borrowingV2/fetcher.d.ts +75 -0
  113. package/lib/trade/fees/borrowingV2/fetcher.js +185 -0
  114. package/lib/trade/fees/borrowingV2/index.d.ts +48 -0
  115. package/lib/trade/fees/borrowingV2/index.js +112 -0
  116. package/lib/trade/fees/borrowingV2/types.d.ts +95 -0
  117. package/lib/trade/fees/borrowingV2/types.js +5 -0
  118. package/lib/trade/fees/converter.d.ts +48 -0
  119. package/lib/trade/fees/converter.js +114 -0
  120. package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
  121. package/lib/trade/fees/fundingFees/builder.js +35 -0
  122. package/lib/trade/fees/fundingFees/converter.d.ts +102 -0
  123. package/lib/trade/fees/fundingFees/converter.js +196 -0
  124. package/lib/trade/fees/fundingFees/fetcher.d.ts +66 -0
  125. package/lib/trade/fees/fundingFees/fetcher.js +150 -0
  126. package/lib/trade/fees/fundingFees/index.d.ts +124 -0
  127. package/lib/trade/fees/fundingFees/index.js +309 -0
  128. package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
  129. package/lib/trade/fees/fundingFees/pairContext.js +17 -0
  130. package/lib/trade/fees/fundingFees/types.d.ts +77 -0
  131. package/lib/trade/fees/fundingFees/types.js +5 -0
  132. package/lib/trade/fees/index.d.ts +7 -2
  133. package/lib/trade/fees/index.js +66 -16
  134. package/lib/trade/fees/tiers/converter.d.ts +54 -0
  135. package/lib/trade/fees/tiers/converter.js +81 -0
  136. package/lib/trade/fees/tiers/index.d.ts +18 -0
  137. package/lib/trade/fees/tiers/index.js +45 -1
  138. package/lib/trade/fees/trading/builder.d.ts +18 -0
  139. package/lib/trade/fees/trading/builder.js +20 -0
  140. package/lib/trade/fees/trading/converter.d.ts +32 -0
  141. package/lib/trade/fees/trading/converter.js +47 -0
  142. package/lib/trade/fees/trading/holdingFees.d.ts +28 -0
  143. package/lib/trade/fees/trading/holdingFees.js +66 -0
  144. package/lib/trade/fees/trading/holdingFeesStructured.d.ts +28 -0
  145. package/lib/trade/fees/trading/holdingFeesStructured.js +66 -0
  146. package/lib/trade/fees/trading/index.d.ts +62 -0
  147. package/lib/trade/fees/trading/index.js +155 -0
  148. package/lib/trade/fees/trading/types.d.ts +48 -0
  149. package/lib/trade/fees/trading/types.js +5 -0
  150. package/lib/trade/index.d.ts +3 -2
  151. package/lib/trade/index.js +3 -2
  152. package/lib/trade/liquidation/builder.d.ts +25 -0
  153. package/lib/trade/liquidation/builder.js +59 -0
  154. package/lib/trade/liquidation/converter.d.ts +23 -0
  155. package/lib/trade/liquidation/converter.js +46 -0
  156. package/lib/trade/liquidation/index.d.ts +16 -0
  157. package/lib/trade/liquidation/index.js +123 -0
  158. package/lib/trade/liquidation/types.d.ts +42 -0
  159. package/lib/trade/liquidation/types.js +2 -0
  160. package/lib/trade/pnl/builder.d.ts +16 -0
  161. package/lib/trade/pnl/builder.js +44 -0
  162. package/lib/trade/pnl/converter.d.ts +47 -0
  163. package/lib/trade/pnl/converter.js +72 -0
  164. package/lib/trade/pnl/index.d.ts +77 -0
  165. package/lib/trade/pnl/index.js +270 -0
  166. package/lib/trade/pnl/types.d.ts +76 -0
  167. package/lib/trade/pnl/types.js +5 -0
  168. package/lib/trade/priceImpact/close/builder.d.ts +23 -0
  169. package/lib/trade/priceImpact/close/builder.js +45 -0
  170. package/lib/trade/priceImpact/close/index.d.ts +22 -0
  171. package/lib/trade/priceImpact/close/index.js +134 -0
  172. package/lib/trade/priceImpact/close/types.d.ts +44 -0
  173. package/lib/trade/priceImpact/close/types.js +5 -0
  174. package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
  175. package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
  176. package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
  177. package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
  178. package/lib/trade/priceImpact/cumulVol/index.d.ts +108 -0
  179. package/lib/trade/priceImpact/cumulVol/index.js +231 -0
  180. package/lib/trade/priceImpact/index.d.ts +13 -0
  181. package/lib/trade/priceImpact/index.js +64 -0
  182. package/lib/trade/priceImpact/open/builder.d.ts +21 -0
  183. package/lib/trade/priceImpact/open/builder.js +43 -0
  184. package/lib/trade/priceImpact/open/index.d.ts +23 -0
  185. package/lib/trade/priceImpact/open/index.js +79 -0
  186. package/lib/trade/priceImpact/open/types.d.ts +42 -0
  187. package/lib/trade/priceImpact/open/types.js +5 -0
  188. package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
  189. package/lib/trade/priceImpact/skew/builder.js +28 -0
  190. package/lib/trade/priceImpact/skew/converter.d.ts +46 -0
  191. package/lib/trade/priceImpact/skew/converter.js +81 -0
  192. package/lib/trade/priceImpact/skew/fetcher.d.ts +60 -0
  193. package/lib/trade/priceImpact/skew/fetcher.js +169 -0
  194. package/lib/trade/priceImpact/skew/index.d.ts +60 -0
  195. package/lib/trade/priceImpact/skew/index.js +173 -0
  196. package/lib/trade/priceImpact/skew/types.d.ts +42 -0
  197. package/lib/trade/priceImpact/skew/types.js +5 -0
  198. package/lib/trade/spread.d.ts +5 -18
  199. package/lib/trade/spread.js +17 -106
  200. package/lib/trade/types.d.ts +44 -9
  201. package/lib/trade/types.js +17 -0
  202. package/lib/trade/utils.d.ts +18 -0
  203. package/lib/trade/utils.js +30 -0
  204. package/lib/vault/index.d.ts +3 -1
  205. package/lib/vault/index.js +2 -2
  206. package/package.json +2 -1
  207. package/lib/trade/liquidation.d.ts +0 -12
  208. package/lib/trade/liquidation.js +0 -55
  209. package/lib/trade/pnl.d.ts +0 -10
  210. package/lib/trade/pnl.js +0 -33
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Cumulative volume price impact calculations
4
+ * @dev Mirrors contract's getTradeCumulVolPriceImpactP functionality
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
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
+ const oiWindows_1 = require("../../oiWindows");
9
+ const constants_1 = require("../../../constants");
10
+ const types_1 = require("../../../contracts/types");
11
+ /**
12
+ * @dev Gets the protection close factor with user multiplier
13
+ * @param context Cumulative volume context
14
+ * @returns Protection close factor (1 = 100%)
15
+ */
16
+ const getProtectionCloseFactor = (context) => {
17
+ var _a;
18
+ const protectionCloseFactor = context === undefined ||
19
+ context.contractsVersion === types_1.ContractsVersion.BEFORE_V9_2 ||
20
+ context.isOpen === undefined ||
21
+ context.isPnlPositive === undefined ||
22
+ context.protectionCloseFactor === undefined ||
23
+ (0, exports.isProtectionCloseFactorActive)(context) !== true
24
+ ? constants_1.DEFAULT_PROTECTION_CLOSE_FACTOR
25
+ : context.protectionCloseFactor;
26
+ const protectionCloseFactorMultiplier = ((_a = context === null || context === void 0 ? void 0 : context.userPriceImpact) === null || _a === void 0 ? void 0 : _a.cumulVolPriceImpactMultiplier) !== undefined &&
27
+ context.userPriceImpact.cumulVolPriceImpactMultiplier > 0
28
+ ? context.userPriceImpact.cumulVolPriceImpactMultiplier
29
+ : 1;
30
+ return protectionCloseFactor * protectionCloseFactorMultiplier;
31
+ };
32
+ exports.getProtectionCloseFactor = getProtectionCloseFactor;
33
+ /**
34
+ * @dev Checks if protection close factor is active
35
+ * @param context Cumulative volume context
36
+ * @returns True if protection close factor should be applied
37
+ */
38
+ const isProtectionCloseFactorActive = (context) => {
39
+ if (context === undefined ||
40
+ context.currentBlock === undefined ||
41
+ context.createdBlock === undefined ||
42
+ context.protectionCloseFactorBlocks === undefined ||
43
+ context.protectionCloseFactor === undefined) {
44
+ return undefined;
45
+ }
46
+ return (context.isPnlPositive === true &&
47
+ context.isOpen === false &&
48
+ context.protectionCloseFactor > 0 &&
49
+ context.currentBlock <=
50
+ context.createdBlock + context.protectionCloseFactorBlocks &&
51
+ context.protectionCloseFactorWhitelist !== true);
52
+ };
53
+ exports.isProtectionCloseFactorActive = isProtectionCloseFactorActive;
54
+ /**
55
+ * @dev Gets the cumulative factor for price impact calculation
56
+ * @param context Cumulative volume context
57
+ * @returns Cumulative factor (default 1)
58
+ */
59
+ const getCumulativeFactor = (context) => {
60
+ if (context === undefined ||
61
+ context.cumulativeFactor === undefined ||
62
+ context.cumulativeFactor === 0) {
63
+ return constants_1.DEFAULT_CUMULATIVE_FACTOR;
64
+ }
65
+ return context.cumulativeFactor;
66
+ };
67
+ exports.getCumulativeFactor = getCumulativeFactor;
68
+ /**
69
+ * @dev Gets the legacy factor for v9.2 compatibility
70
+ * @param context Cumulative volume context
71
+ * @returns 1 for pre-v9.2, 2 for v9.2+
72
+ */
73
+ const getLegacyFactor = (context) => {
74
+ return (context === null || context === void 0 ? void 0 : context.contractsVersion) === types_1.ContractsVersion.BEFORE_V9_2 ? 1 : 2;
75
+ };
76
+ exports.getLegacyFactor = getLegacyFactor;
77
+ /**
78
+ * @dev Calculates cumulative volume price impact percentage
79
+ * @dev Mirrors contract's getTradeCumulVolPriceImpactP function
80
+ * @param trader Trader address
81
+ * @param pairIndex Trading pair index
82
+ * @param long True for long, false for short
83
+ * @param tradeOpenInterestUsd Position size in USD
84
+ * @param isPnlPositive Whether PnL is positive (only relevant when closing)
85
+ * @param open True for opening, false for closing
86
+ * @param lastPosIncreaseBlock Last block when position was increased (only relevant when closing)
87
+ * @param context Additional context with depths, OI data, and factors
88
+ * @returns Cumulative volume price impact percentage (not including spread)
89
+ */
90
+ const getTradeCumulVolPriceImpactP = (trader, pairIndex, long, tradeOpenInterestUsd, isPnlPositive, open, lastPosIncreaseBlock, context) => {
91
+ var _a, _b, _c, _d;
92
+ // Update context with passed parameters
93
+ const updatedContext = Object.assign(Object.assign({}, context), { isOpen: open, isPnlPositive: isPnlPositive, createdBlock: context.createdBlock || lastPosIncreaseBlock });
94
+ if (
95
+ // No price impact when closing pre-v9.2 trades
96
+ (!open && (context === null || context === void 0 ? void 0 : context.contractsVersion) === types_1.ContractsVersion.BEFORE_V9_2) ||
97
+ // No price impact for opens when `pair.exemptOnOpen` is true
98
+ (open && (context === null || context === void 0 ? void 0 : context.exemptOnOpen) === true) ||
99
+ // No price impact for closes after `protectionCloseFactor` has expired
100
+ // when `pair.exemptAfterProtectionCloseFactor` is true
101
+ (!open &&
102
+ (context === null || context === void 0 ? void 0 : context.exemptAfterProtectionCloseFactor) === true &&
103
+ (0, exports.isProtectionCloseFactorActive)(updatedContext) !== true)) {
104
+ return 0;
105
+ }
106
+ const onePercentDepth = long
107
+ ? // if `long`
108
+ open
109
+ ? (_a = context.pairDepth) === null || _a === void 0 ? void 0 : _a.onePercentDepthAboveUsd
110
+ : (_b = context.pairDepth) === null || _b === void 0 ? void 0 : _b.onePercentDepthBelowUsd
111
+ : // if `short`
112
+ open
113
+ ? (_c = context.pairDepth) === null || _c === void 0 ? void 0 : _c.onePercentDepthBelowUsd
114
+ : (_d = context.pairDepth) === null || _d === void 0 ? void 0 : _d.onePercentDepthAboveUsd;
115
+ let activeOi = undefined;
116
+ if (context.oiWindowsSettings !== undefined) {
117
+ activeOi = (0, oiWindows_1.getActiveOi)((0, oiWindows_1.getCurrentOiWindowId)(context.oiWindowsSettings), context.oiWindowsSettings.windowsCount, context.oiWindows, open ? long : !long);
118
+ }
119
+ if (!onePercentDepth || activeOi === undefined) {
120
+ return 0;
121
+ }
122
+ const finalPriceImpactP = ((activeOi * (0, exports.getCumulativeFactor)(updatedContext) +
123
+ tradeOpenInterestUsd / 2) /
124
+ onePercentDepth /
125
+ (0, exports.getLegacyFactor)(updatedContext)) *
126
+ (0, exports.getProtectionCloseFactor)(updatedContext);
127
+ return finalPriceImpactP;
128
+ };
129
+ exports.getTradeCumulVolPriceImpactP = getTradeCumulVolPriceImpactP;
130
+ /**
131
+ * @dev Gets the fixed spread percentage with direction
132
+ * @dev Mirrors contract's getFixedSpreadP function
133
+ * @param spreadP Total spread percentage (includes base + user spread)
134
+ * @param long True for long position
135
+ * @param open True for opening, false for closing
136
+ * @returns Signed spread percentage (positive or negative based on direction)
137
+ */
138
+ const getFixedSpreadP = (spreadP, long, open) => {
139
+ // Reverse spread direction on close
140
+ const effectiveLong = open ? long : !long;
141
+ // Calculate half spread
142
+ const fixedSpreadP = spreadP / 2;
143
+ // Apply direction
144
+ return effectiveLong ? fixedSpreadP : -fixedSpreadP;
145
+ };
146
+ exports.getFixedSpreadP = getFixedSpreadP;
147
+ /**
148
+ * @dev Gets the base spread percentage
149
+ * @param pairSpreadP Pair spread percentage
150
+ * @param isLiquidation True if liquidation
151
+ * @param liquidationParams Liquidation parameters
152
+ * @param userPriceImpact User-specific price impact settings
153
+ * @returns Base spread percentage
154
+ * @todo Review if this function still makes sense or should use getFixedSpreadP pattern
155
+ * Currently it may double-count user fixed spread if pairSpreadP already includes it
156
+ */
157
+ const getSpreadP = (pairSpreadP, isLiquidation, liquidationParams, userPriceImpact) => {
158
+ var _a;
159
+ const fixedSpreadP = (_a = userPriceImpact === null || userPriceImpact === void 0 ? void 0 : userPriceImpact.fixedSpreadP) !== null && _a !== void 0 ? _a : 0;
160
+ if (pairSpreadP === undefined || (pairSpreadP === 0 && fixedSpreadP === 0)) {
161
+ return 0;
162
+ }
163
+ const spreadP = pairSpreadP / 2 + fixedSpreadP;
164
+ return isLiquidation === true &&
165
+ liquidationParams !== undefined &&
166
+ liquidationParams.maxLiqSpreadP > 0 &&
167
+ spreadP > liquidationParams.maxLiqSpreadP
168
+ ? liquidationParams.maxLiqSpreadP
169
+ : spreadP;
170
+ };
171
+ exports.getSpreadP = getSpreadP;
172
+ /**
173
+ * @dev Gets spread with cumulative volume price impact
174
+ * @dev This combines base spread + cumulative volume impact
175
+ * @param pairSpreadP Base pair spread percentage
176
+ * @param buy True for long, false for short
177
+ * @param collateral Collateral amount
178
+ * @param leverage Position leverage
179
+ * @param pairDepth 1% depth values for the pair
180
+ * @param oiWindowsSettings OI windows configuration
181
+ * @param oiWindows Current OI windows data
182
+ * @param context Additional context for the calculation
183
+ * @returns Total spread + cumulative volume price impact percentage
184
+ */
185
+ const getSpreadWithCumulVolPriceImpactP = (pairSpreadP, buy, collateral, leverage, pairDepth, oiWindowsSettings, oiWindows, context) => {
186
+ if (pairSpreadP === undefined) {
187
+ return 0;
188
+ }
189
+ const baseSpread = (0, exports.getSpreadP)(pairSpreadP, undefined, undefined, context === null || context === void 0 ? void 0 : context.userPriceImpact);
190
+ // Calculate position size in USD
191
+ const positionSizeUsd = collateral * leverage * ((context === null || context === void 0 ? void 0 : context.collateralPriceUsd) || 1);
192
+ const cumulVolImpact = (0, exports.getTradeCumulVolPriceImpactP)("", // trader - not used in calculation
193
+ 0, // pairIndex - not used in calculation
194
+ buy, positionSizeUsd, (context === null || context === void 0 ? void 0 : context.isPnlPositive) || false, (context === null || context === void 0 ? void 0 : context.isOpen) !== false, (context === null || context === void 0 ? void 0 : context.createdBlock) || 0, Object.assign(Object.assign({}, context), { pairDepth,
195
+ oiWindowsSettings,
196
+ oiWindows }));
197
+ // If no depth or OI data, return just half spread
198
+ if (cumulVolImpact === 0 && (!pairDepth || !oiWindowsSettings)) {
199
+ return pairSpreadP / 2;
200
+ }
201
+ return baseSpread + cumulVolImpact;
202
+ };
203
+ exports.getSpreadWithCumulVolPriceImpactP = getSpreadWithCumulVolPriceImpactP;
204
+ /**
205
+ * @dev Convenience function for calculating cumulative volume price impact
206
+ * @dev Uses collateral and leverage instead of USD position size
207
+ * @param buy True for long, false for short
208
+ * @param collateral Collateral amount
209
+ * @param leverage Position leverage
210
+ * @param open True for opening, false for closing
211
+ * @param context Full context including depths, OI data, and collateral price
212
+ * @returns Cumulative volume price impact percentage
213
+ */
214
+ const getCumulVolPriceImpact = (buy, collateral, leverage, open, context) => {
215
+ const positionSizeUsd = collateral * leverage * context.collateralPriceUsd;
216
+ return (0, exports.getTradeCumulVolPriceImpactP)("", // trader - not used in calculation
217
+ 0, // pairIndex - not used in calculation
218
+ buy, positionSizeUsd, context.isPnlPositive || false, open, context.createdBlock || 0, context);
219
+ };
220
+ exports.getCumulVolPriceImpact = getCumulVolPriceImpact;
221
+ // Legacy export for backward compatibility
222
+ exports.getSpreadWithPriceImpactP = exports.getSpreadWithCumulVolPriceImpactP;
223
+ // Export converters
224
+ var converter_1 = require("./converter");
225
+ Object.defineProperty(exports, "convertOiWindowsSettings", { enumerable: true, get: function () { return converter_1.convertOiWindowsSettings; } });
226
+ Object.defineProperty(exports, "convertOiWindow", { enumerable: true, get: function () { return converter_1.convertOiWindow; } });
227
+ Object.defineProperty(exports, "convertOiWindows", { enumerable: true, get: function () { return converter_1.convertOiWindows; } });
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; } });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @dev Main price impact module
3
+ * @dev Exports cumulative volume, skew, and combined opening/closing price impact functionality
4
+ */
5
+ export { getTradeOpeningPriceImpact, getTradeOpeningPriceImpactAtMarket, buildTradeOpeningPriceImpactContext, TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, } from "./open";
6
+ export { getTradeClosingPriceImpact, getTradeClosingPriceImpactAtOracle, buildTradeClosingPriceImpactContext, TradeClosingPriceImpactInput, TradeClosingPriceImpactContext, TradeClosingPriceImpactResult, } from "./close";
7
+ export { getTradeCumulVolPriceImpactP, getCumulVolPriceImpact, // Convenience function
8
+ getSpreadWithCumulVolPriceImpactP, getSpreadWithPriceImpactP, // Legacy alias
9
+ getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, buildCumulVolContext, CumulVolContext, } from "./cumulVol";
10
+ export { getNetSkewToken, getNetSkewCollateral, getTradeSkewDirection, calculateSkewPriceImpactP, getTradeSkewPriceImpact, getTradeSkewPriceImpactWithChecks, calculatePartialSizeToken, SkewPriceImpact, } from "./skew";
11
+ export { convertPairOiToken, convertPairOiTokenArray, convertPairOiCollateral, convertPairOiCollateralArray, convertSkewDepth, convertPairSkewDepths, } from "./skew/converter";
12
+ export { buildSkewPriceImpactContext } from "./skew/builder";
13
+ export type { PairOiToken, PairOiCollateral, SkewPriceImpactInput, SkewPriceImpactResult, SkewPriceImpactContext, TradeSkewParams, PositionSizeResult, } from "./skew/types";
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Main price impact module
4
+ * @dev Exports cumulative volume, skew, and combined opening/closing price impact functionality
5
+ */
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 = void 0;
8
+ // Export trade opening price impact functionality
9
+ var open_1 = require("./open");
10
+ // Core functions
11
+ Object.defineProperty(exports, "getTradeOpeningPriceImpact", { enumerable: true, get: function () { return open_1.getTradeOpeningPriceImpact; } });
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; } });
15
+ // Export trade closing price impact functionality
16
+ var close_1 = require("./close");
17
+ // Core functions
18
+ Object.defineProperty(exports, "getTradeClosingPriceImpact", { enumerable: true, get: function () { return close_1.getTradeClosingPriceImpact; } });
19
+ Object.defineProperty(exports, "getTradeClosingPriceImpactAtOracle", { enumerable: true, get: function () { return close_1.getTradeClosingPriceImpactAtOracle; } });
20
+ // Builder
21
+ Object.defineProperty(exports, "buildTradeClosingPriceImpactContext", { enumerable: true, get: function () { return close_1.buildTradeClosingPriceImpactContext; } });
22
+ // Export cumulative volume price impact functionality
23
+ var cumulVol_1 = require("./cumulVol");
24
+ // Core functions
25
+ Object.defineProperty(exports, "getTradeCumulVolPriceImpactP", { enumerable: true, get: function () { return cumulVol_1.getTradeCumulVolPriceImpactP; } });
26
+ Object.defineProperty(exports, "getCumulVolPriceImpact", { enumerable: true, get: function () { return cumulVol_1.getCumulVolPriceImpact; } });
27
+ Object.defineProperty(exports, "getSpreadWithCumulVolPriceImpactP", { enumerable: true, get: function () { return cumulVol_1.getSpreadWithCumulVolPriceImpactP; } });
28
+ Object.defineProperty(exports, "getSpreadWithPriceImpactP", { enumerable: true, get: function () { return cumulVol_1.getSpreadWithPriceImpactP; } });
29
+ Object.defineProperty(exports, "getProtectionCloseFactor", { enumerable: true, get: function () { return cumulVol_1.getProtectionCloseFactor; } });
30
+ Object.defineProperty(exports, "isProtectionCloseFactorActive", { enumerable: true, get: function () { return cumulVol_1.isProtectionCloseFactorActive; } });
31
+ Object.defineProperty(exports, "getCumulativeFactor", { enumerable: true, get: function () { return cumulVol_1.getCumulativeFactor; } });
32
+ Object.defineProperty(exports, "getLegacyFactor", { enumerable: true, get: function () { return cumulVol_1.getLegacyFactor; } });
33
+ Object.defineProperty(exports, "getFixedSpreadP", { enumerable: true, get: function () { return cumulVol_1.getFixedSpreadP; } });
34
+ Object.defineProperty(exports, "getSpreadP", { enumerable: true, get: function () { return cumulVol_1.getSpreadP; } });
35
+ // Converters
36
+ Object.defineProperty(exports, "convertOiWindowsSettings", { enumerable: true, get: function () { return cumulVol_1.convertOiWindowsSettings; } });
37
+ Object.defineProperty(exports, "convertOiWindow", { enumerable: true, get: function () { return cumulVol_1.convertOiWindow; } });
38
+ Object.defineProperty(exports, "convertOiWindows", { enumerable: true, get: function () { return cumulVol_1.convertOiWindows; } });
39
+ Object.defineProperty(exports, "convertOiWindowsSettingsArray", { enumerable: true, get: function () { return cumulVol_1.convertOiWindowsSettingsArray; } });
40
+ // Builder
41
+ Object.defineProperty(exports, "buildCumulVolContext", { enumerable: true, get: function () { return cumulVol_1.buildCumulVolContext; } });
42
+ // Export skew price impact functionality
43
+ var skew_1 = require("./skew");
44
+ // Core functions
45
+ Object.defineProperty(exports, "getNetSkewToken", { enumerable: true, get: function () { return skew_1.getNetSkewToken; } });
46
+ Object.defineProperty(exports, "getNetSkewCollateral", { enumerable: true, get: function () { return skew_1.getNetSkewCollateral; } });
47
+ Object.defineProperty(exports, "getTradeSkewDirection", { enumerable: true, get: function () { return skew_1.getTradeSkewDirection; } });
48
+ Object.defineProperty(exports, "calculateSkewPriceImpactP", { enumerable: true, get: function () { return skew_1.calculateSkewPriceImpactP; } });
49
+ Object.defineProperty(exports, "getTradeSkewPriceImpact", { enumerable: true, get: function () { return skew_1.getTradeSkewPriceImpact; } });
50
+ Object.defineProperty(exports, "getTradeSkewPriceImpactWithChecks", { enumerable: true, get: function () { return skew_1.getTradeSkewPriceImpactWithChecks; } });
51
+ Object.defineProperty(exports, "calculatePartialSizeToken", { enumerable: true, get: function () { return skew_1.calculatePartialSizeToken; } });
52
+ // Types namespace
53
+ Object.defineProperty(exports, "SkewPriceImpact", { enumerable: true, get: function () { return skew_1.SkewPriceImpact; } });
54
+ // Export converters
55
+ var converter_1 = require("./skew/converter");
56
+ Object.defineProperty(exports, "convertPairOiToken", { enumerable: true, get: function () { return converter_1.convertPairOiToken; } });
57
+ Object.defineProperty(exports, "convertPairOiTokenArray", { enumerable: true, get: function () { return converter_1.convertPairOiTokenArray; } });
58
+ Object.defineProperty(exports, "convertPairOiCollateral", { enumerable: true, get: function () { return converter_1.convertPairOiCollateral; } });
59
+ Object.defineProperty(exports, "convertPairOiCollateralArray", { enumerable: true, get: function () { return converter_1.convertPairOiCollateralArray; } });
60
+ Object.defineProperty(exports, "convertSkewDepth", { enumerable: true, get: function () { return converter_1.convertSkewDepth; } });
61
+ Object.defineProperty(exports, "convertPairSkewDepths", { enumerable: true, get: function () { return converter_1.convertPairSkewDepths; } });
62
+ // Export builders
63
+ var builder_1 = require("./skew/builder");
64
+ Object.defineProperty(exports, "buildSkewPriceImpactContext", { enumerable: true, get: function () { return builder_1.buildSkewPriceImpactContext; } });
@@ -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;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @dev Trade opening price impact calculations
3
+ * @dev Mirrors contract's TradingCommonUtils.getTradeOpeningPriceImpact
4
+ */
5
+ import { TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult } from "./types";
6
+ export type { TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, };
7
+ export { buildTradeOpeningPriceImpactContext } from "./builder";
8
+ /**
9
+ * @dev Calculates all price impacts for trade opening
10
+ * @dev Mirrors contract's getTradeOpeningPriceImpact function
11
+ * @param input Trade parameters
12
+ * @param context Combined context for calculations
13
+ * @returns Price impact breakdown and final price
14
+ */
15
+ export declare const getTradeOpeningPriceImpact: (input: TradeOpeningPriceImpactInput, context: TradeOpeningPriceImpactContext) => TradeOpeningPriceImpactResult;
16
+ /**
17
+ * @dev Simplified version using current market price
18
+ * @param input Trade parameters
19
+ * @param context Combined context
20
+ * @param currentMarketPrice Current market price to use as open price
21
+ * @returns Price impact breakdown and final price
22
+ */
23
+ export declare const getTradeOpeningPriceImpactAtMarket: (input: Omit<TradeOpeningPriceImpactInput, "openPrice">, context: TradeOpeningPriceImpactContext, currentMarketPrice: number) => TradeOpeningPriceImpactResult;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Trade opening price impact calculations
4
+ * @dev Mirrors contract's TradingCommonUtils.getTradeOpeningPriceImpact
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = exports.buildTradeOpeningPriceImpactContext = void 0;
8
+ const cumulVol_1 = require("../cumulVol");
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; } });
13
+ /**
14
+ * @dev Calculates all price impacts for trade opening
15
+ * @dev Mirrors contract's getTradeOpeningPriceImpact function
16
+ * @param input Trade parameters
17
+ * @param context Combined context for calculations
18
+ * @returns Price impact breakdown and final price
19
+ */
20
+ const getTradeOpeningPriceImpact = (input, context) => {
21
+ const positionSizeCollateral = input.collateralAmount * input.leverage;
22
+ // Calculate fixed spread
23
+ const spreadP = (0, cumulVol_1.getFixedSpreadP)(input.pairSpreadP, input.long, true // opening
24
+ );
25
+ // Calculate position size in USD
26
+ const positionSizeUsd = positionSizeCollateral * context.collateralPriceUsd;
27
+ // Calculate cumulative volume price impact
28
+ const cumulVolPriceImpactP = (0, cumulVol_1.getTradeCumulVolPriceImpactP)("", // trader - not needed for calculation
29
+ input.pairIndex, input.long, positionSizeUsd, false, // isPnlPositive - not relevant for opening
30
+ true, // open
31
+ 0, // lastPosIncreaseBlock - not relevant for opening
32
+ context.cumulVolContext);
33
+ // Calculate skew price impact (v10+ only)
34
+ const skewPriceImpactP = (0, skew_1.getTradeSkewPriceImpactWithChecks)({
35
+ collateralIndex: input.collateralIndex,
36
+ pairIndex: input.pairIndex,
37
+ long: input.long,
38
+ open: true,
39
+ positionSizeCollateral,
40
+ currentPrice: input.openPrice,
41
+ contractsVersion: input.contractsVersion,
42
+ isCounterTrade: input.isCounterTrade,
43
+ }, context.skewContext);
44
+ // Total price impact (signed - can be positive or negative)
45
+ // Spread is always positive, impacts can be negative
46
+ const totalPriceImpactP = spreadP + cumulVolPriceImpactP + skewPriceImpactP;
47
+ // Calculate final price after impact
48
+ // For longs: price increases with positive impact
49
+ // For shorts: price decreases with positive impact
50
+ const priceImpactFactor = 1 + totalPriceImpactP / 100;
51
+ const priceAfterImpact = input.long
52
+ ? input.openPrice * priceImpactFactor
53
+ : input.openPrice / priceImpactFactor;
54
+ // Calculate percent profit from impact
55
+ // Positive when trader benefits, negative when trader loses
56
+ const percentProfitP = input.long
57
+ ? -totalPriceImpactP // Long loses when price goes up
58
+ : totalPriceImpactP; // Short gains when price goes up
59
+ return {
60
+ priceAfterImpact,
61
+ priceImpactP: Math.abs(totalPriceImpactP),
62
+ percentProfitP,
63
+ cumulVolPriceImpactP,
64
+ skewPriceImpactP,
65
+ totalPriceImpactP,
66
+ };
67
+ };
68
+ exports.getTradeOpeningPriceImpact = getTradeOpeningPriceImpact;
69
+ /**
70
+ * @dev Simplified version using current market price
71
+ * @param input Trade parameters
72
+ * @param context Combined context
73
+ * @param currentMarketPrice Current market price to use as open price
74
+ * @returns Price impact breakdown and final price
75
+ */
76
+ const getTradeOpeningPriceImpactAtMarket = (input, context, currentMarketPrice) => {
77
+ return (0, exports.getTradeOpeningPriceImpact)(Object.assign(Object.assign({}, input), { openPrice: currentMarketPrice }), context);
78
+ };
79
+ exports.getTradeOpeningPriceImpactAtMarket = getTradeOpeningPriceImpactAtMarket;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @dev Types for trade opening price impact calculations
3
+ */
4
+ import { CumulVolContext } from "../cumulVol";
5
+ import { SkewPriceImpactContext } from "../skew/types";
6
+ import { Fee, PairIndex } from "../../types";
7
+ /**
8
+ * @dev Input parameters for trade opening price impact
9
+ */
10
+ export type TradeOpeningPriceImpactInput = {
11
+ collateralIndex: number;
12
+ pairIndex: PairIndex;
13
+ long: boolean;
14
+ collateralAmount: number;
15
+ leverage: number;
16
+ openPrice: number;
17
+ pairSpreadP: number;
18
+ fee: Fee;
19
+ contractsVersion: number;
20
+ isCounterTrade?: boolean;
21
+ };
22
+ /**
23
+ * @dev Context for trade opening price impact calculation
24
+ * Combines contexts from spread, cumul vol, and skew
25
+ */
26
+ export type TradeOpeningPriceImpactContext = {
27
+ collateralPriceUsd: number;
28
+ cumulVolContext: CumulVolContext;
29
+ skewContext: SkewPriceImpactContext;
30
+ };
31
+ /**
32
+ * @dev Result of trade opening price impact calculation
33
+ * Mirrors contract's PriceImpact struct
34
+ */
35
+ export type TradeOpeningPriceImpactResult = {
36
+ priceAfterImpact: number;
37
+ priceImpactP: number;
38
+ percentProfitP: number;
39
+ cumulVolPriceImpactP: number;
40
+ skewPriceImpactP: number;
41
+ totalPriceImpactP: number;
42
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Types for trade opening price impact calculations
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @dev Builders for skew price impact contexts
3
+ */
4
+ import { TradingVariablesCollateral } from "../../../backend/tradingVariables/types";
5
+ import { SkewPriceImpactContext } from "./types";
6
+ /**
7
+ * @dev Builds skew price impact context from trading variables for a specific pair
8
+ * @param tradingVariables Trading variables containing collateral data
9
+ * @param pairIndex Index of the pair to build context for
10
+ * @returns Skew price impact context for the pair
11
+ */
12
+ export declare const buildSkewPriceImpactContext: (tradingVariables: TradingVariablesCollateral, pairIndex: number) => SkewPriceImpactContext;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Builders for skew price impact contexts
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildSkewPriceImpactContext = void 0;
7
+ /**
8
+ * @dev Builds skew price impact context from trading variables for a specific pair
9
+ * @param tradingVariables Trading variables containing collateral data
10
+ * @param pairIndex Index of the pair to build context for
11
+ * @returns Skew price impact context for the pair
12
+ */
13
+ const buildSkewPriceImpactContext = (tradingVariables, pairIndex) => {
14
+ var _a, _b, _c;
15
+ const skewDepth = (_b = (_a = tradingVariables.pairSkewDepths) === null || _a === void 0 ? void 0 : _a[pairIndex]) !== null && _b !== void 0 ? _b : 0;
16
+ const pairOi = (_c = tradingVariables.pairOis) === null || _c === void 0 ? void 0 : _c[pairIndex];
17
+ if (!pairOi) {
18
+ throw new Error(`Pair OI data not found for pair index ${pairIndex}`);
19
+ }
20
+ return {
21
+ skewDepth,
22
+ pairOiToken: {
23
+ oiLongToken: pairOi.token.long,
24
+ oiShortToken: pairOi.token.short,
25
+ },
26
+ };
27
+ };
28
+ exports.buildSkewPriceImpactContext = buildSkewPriceImpactContext;
@@ -0,0 +1,46 @@
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 } 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 Converts skew depth from contract format to SDK format
35
+ * @param depth Skew depth from contract (in token units with 1e18 precision)
36
+ * @returns Normalized skew depth in tokens
37
+ */
38
+ export declare const convertSkewDepth: (depth: string) => number;
39
+ /**
40
+ * @dev Converts array of skew depths from contract format to SDK format
41
+ * @param depths Array of skew depths from contract (in token units with 1e18 precision)
42
+ * @returns Object mapping pair index to normalized depth
43
+ */
44
+ export declare const convertPairSkewDepths: (depths: string[]) => {
45
+ [pairIndex: number]: number;
46
+ };