@gainsnetwork/sdk 0.0.0-me-rc1

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 (236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/lib/backend/globalTrades/index.d.ts +11 -0
  4. package/lib/backend/globalTrades/index.js +69 -0
  5. package/lib/backend/index.d.ts +3 -0
  6. package/lib/backend/index.js +28 -0
  7. package/lib/backend/tradingVariables/backend.types.d.ts +337 -0
  8. package/lib/backend/tradingVariables/backend.types.js +2 -0
  9. package/lib/backend/tradingVariables/converter.d.ts +38 -0
  10. package/lib/backend/tradingVariables/converter.js +359 -0
  11. package/lib/backend/tradingVariables/index.d.ts +5 -0
  12. package/lib/backend/tradingVariables/index.js +98 -0
  13. package/lib/backend/tradingVariables/types.d.ts +115 -0
  14. package/lib/backend/tradingVariables/types.js +14 -0
  15. package/lib/constants.d.ts +483 -0
  16. package/lib/constants.js +516 -0
  17. package/lib/contracts/addresses.d.ts +3 -0
  18. package/lib/contracts/addresses.js +35 -0
  19. package/lib/contracts/addresses.json +266 -0
  20. package/lib/contracts/index.d.ts +14 -0
  21. package/lib/contracts/index.js +92 -0
  22. package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +9327 -0
  23. package/lib/contracts/types/generated/GNSMultiCollatDiamond.js +2 -0
  24. package/lib/contracts/types/generated/GToken.d.ts +1917 -0
  25. package/lib/contracts/types/generated/GToken.js +2 -0
  26. package/lib/contracts/types/generated/GTokenOpenPnlFeed.d.ts +557 -0
  27. package/lib/contracts/types/generated/GTokenOpenPnlFeed.js +2 -0
  28. package/lib/contracts/types/generated/common.d.ts +22 -0
  29. package/lib/contracts/types/generated/common.js +2 -0
  30. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.d.ts +276 -0
  31. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +21557 -0
  32. package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.d.ts +59 -0
  33. package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.js +765 -0
  34. package/lib/contracts/types/generated/factories/GToken__factory.d.ts +121 -0
  35. package/lib/contracts/types/generated/factories/GToken__factory.js +2867 -0
  36. package/lib/contracts/types/generated/factories/index.d.ts +3 -0
  37. package/lib/contracts/types/generated/factories/index.js +12 -0
  38. package/lib/contracts/types/generated/index.d.ts +7 -0
  39. package/lib/contracts/types/generated/index.js +33 -0
  40. package/lib/contracts/types/index.d.ts +37 -0
  41. package/lib/contracts/types/index.js +30 -0
  42. package/lib/contracts/utils/borrowingFees.d.ts +9 -0
  43. package/lib/contracts/utils/borrowingFees.js +43 -0
  44. package/lib/contracts/utils/index.d.ts +3 -0
  45. package/lib/contracts/utils/index.js +19 -0
  46. package/lib/contracts/utils/openTrades.d.ts +12 -0
  47. package/lib/contracts/utils/openTrades.js +172 -0
  48. package/lib/contracts/utils/pairs.d.ts +18 -0
  49. package/lib/contracts/utils/pairs.js +602 -0
  50. package/lib/index.d.ts +10 -0
  51. package/lib/index.js +30 -0
  52. package/lib/markets/collateral/converter.d.ts +5 -0
  53. package/lib/markets/collateral/converter.js +11 -0
  54. package/lib/markets/collateral/index.d.ts +1 -0
  55. package/lib/markets/collateral/index.js +17 -0
  56. package/lib/markets/collateral/types.d.ts +7 -0
  57. package/lib/markets/collateral/types.js +2 -0
  58. package/lib/markets/commodities.d.ts +1 -0
  59. package/lib/markets/commodities.js +7 -0
  60. package/lib/markets/crypto.d.ts +1 -0
  61. package/lib/markets/crypto.js +6 -0
  62. package/lib/markets/forex.d.ts +3 -0
  63. package/lib/markets/forex.js +8 -0
  64. package/lib/markets/holdingFees/index.d.ts +46 -0
  65. package/lib/markets/holdingFees/index.js +104 -0
  66. package/lib/markets/holdingFees/types.d.ts +23 -0
  67. package/lib/markets/holdingFees/types.js +5 -0
  68. package/lib/markets/index.d.ts +11 -0
  69. package/lib/markets/index.js +27 -0
  70. package/lib/markets/indices.d.ts +1 -0
  71. package/lib/markets/indices.js +6 -0
  72. package/lib/markets/leverage/builder.d.ts +12 -0
  73. package/lib/markets/leverage/builder.js +25 -0
  74. package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
  75. package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
  76. package/lib/markets/leverage/index.d.ts +3 -0
  77. package/lib/markets/leverage/index.js +19 -0
  78. package/lib/markets/leverage/types.d.ts +15 -0
  79. package/lib/markets/leverage/types.js +2 -0
  80. package/lib/markets/oi/converter.d.ts +62 -0
  81. package/lib/markets/oi/converter.js +111 -0
  82. package/lib/markets/oi/index.d.ts +49 -0
  83. package/lib/markets/oi/index.js +77 -0
  84. package/lib/markets/oi/types.d.ts +89 -0
  85. package/lib/markets/oi/types.js +6 -0
  86. package/lib/markets/price/builder.d.ts +25 -0
  87. package/lib/markets/price/builder.js +69 -0
  88. package/lib/markets/price/index.d.ts +7 -0
  89. package/lib/markets/price/index.js +23 -0
  90. package/lib/markets/price/marketPrice.d.ts +13 -0
  91. package/lib/markets/price/marketPrice.js +35 -0
  92. package/lib/markets/price/signedPrices.d.ts +36 -0
  93. package/lib/markets/price/signedPrices.js +181 -0
  94. package/lib/markets/price/types.d.ts +50 -0
  95. package/lib/markets/price/types.js +5 -0
  96. package/lib/markets/schedules/builders.d.ts +7 -0
  97. package/lib/markets/schedules/builders.js +81 -0
  98. package/lib/markets/schedules/checkers.d.ts +7 -0
  99. package/lib/markets/schedules/checkers.js +36 -0
  100. package/lib/markets/schedules/holidays.d.ts +4 -0
  101. package/lib/markets/schedules/holidays.js +77 -0
  102. package/lib/markets/schedules/index.d.ts +9 -0
  103. package/lib/markets/schedules/index.js +45 -0
  104. package/lib/markets/schedules/types.d.ts +43 -0
  105. package/lib/markets/schedules/types.js +37 -0
  106. package/lib/markets/stocks.d.ts +3 -0
  107. package/lib/markets/stocks.js +15 -0
  108. package/lib/pricing/depthBands.d.ts +39 -0
  109. package/lib/pricing/depthBands.js +94 -0
  110. package/lib/pricing/index.d.ts +4 -0
  111. package/lib/pricing/index.js +20 -0
  112. package/lib/trade/counterTrade/index.d.ts +2 -0
  113. package/lib/trade/counterTrade/index.js +18 -0
  114. package/lib/trade/counterTrade/types.d.ts +7 -0
  115. package/lib/trade/counterTrade/types.js +2 -0
  116. package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
  117. package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
  118. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +20 -0
  119. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +42 -0
  120. package/lib/trade/effectiveLeverage/index.d.ts +2 -0
  121. package/lib/trade/effectiveLeverage/index.js +21 -0
  122. package/lib/trade/effectiveLeverage/types.d.ts +30 -0
  123. package/lib/trade/effectiveLeverage/types.js +2 -0
  124. package/lib/trade/fees/borrowing/builder.d.ts +14 -0
  125. package/lib/trade/fees/borrowing/builder.js +33 -0
  126. package/lib/trade/fees/borrowing/converter.d.ts +17 -0
  127. package/lib/trade/fees/borrowing/converter.js +46 -0
  128. package/lib/trade/fees/borrowing/index.d.ts +81 -0
  129. package/lib/trade/fees/borrowing/index.js +259 -0
  130. package/lib/trade/fees/borrowing/types.d.ts +36 -0
  131. package/lib/trade/fees/borrowing/types.js +2 -0
  132. package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
  133. package/lib/trade/fees/borrowingV2/builder.js +23 -0
  134. package/lib/trade/fees/borrowingV2/converter.d.ts +75 -0
  135. package/lib/trade/fees/borrowingV2/converter.js +132 -0
  136. package/lib/trade/fees/borrowingV2/fetcher.d.ts +76 -0
  137. package/lib/trade/fees/borrowingV2/fetcher.js +179 -0
  138. package/lib/trade/fees/borrowingV2/index.d.ts +48 -0
  139. package/lib/trade/fees/borrowingV2/index.js +112 -0
  140. package/lib/trade/fees/borrowingV2/types.d.ts +95 -0
  141. package/lib/trade/fees/borrowingV2/types.js +5 -0
  142. package/lib/trade/fees/converter.d.ts +48 -0
  143. package/lib/trade/fees/converter.js +114 -0
  144. package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
  145. package/lib/trade/fees/fundingFees/builder.js +38 -0
  146. package/lib/trade/fees/fundingFees/converter.d.ts +102 -0
  147. package/lib/trade/fees/fundingFees/converter.js +196 -0
  148. package/lib/trade/fees/fundingFees/fetcher.d.ts +66 -0
  149. package/lib/trade/fees/fundingFees/fetcher.js +141 -0
  150. package/lib/trade/fees/fundingFees/index.d.ts +124 -0
  151. package/lib/trade/fees/fundingFees/index.js +309 -0
  152. package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
  153. package/lib/trade/fees/fundingFees/pairContext.js +17 -0
  154. package/lib/trade/fees/fundingFees/types.d.ts +77 -0
  155. package/lib/trade/fees/fundingFees/types.js +5 -0
  156. package/lib/trade/fees/index.d.ts +11 -0
  157. package/lib/trade/fees/index.js +87 -0
  158. package/lib/trade/fees/tiers/converter.d.ts +64 -0
  159. package/lib/trade/fees/tiers/converter.js +100 -0
  160. package/lib/trade/fees/tiers/index.d.ts +46 -0
  161. package/lib/trade/fees/tiers/index.js +135 -0
  162. package/lib/trade/fees/tiers/types.d.ts +22 -0
  163. package/lib/trade/fees/tiers/types.js +8 -0
  164. package/lib/trade/fees/trading/builder.d.ts +19 -0
  165. package/lib/trade/fees/trading/builder.js +21 -0
  166. package/lib/trade/fees/trading/converter.d.ts +32 -0
  167. package/lib/trade/fees/trading/converter.js +47 -0
  168. package/lib/trade/fees/trading/index.d.ts +62 -0
  169. package/lib/trade/fees/trading/index.js +157 -0
  170. package/lib/trade/fees/trading/types.d.ts +46 -0
  171. package/lib/trade/fees/trading/types.js +5 -0
  172. package/lib/trade/index.d.ts +10 -0
  173. package/lib/trade/index.js +26 -0
  174. package/lib/trade/liquidation/builder.d.ts +25 -0
  175. package/lib/trade/liquidation/builder.js +58 -0
  176. package/lib/trade/liquidation/converter.d.ts +23 -0
  177. package/lib/trade/liquidation/converter.js +46 -0
  178. package/lib/trade/liquidation/index.d.ts +29 -0
  179. package/lib/trade/liquidation/index.js +216 -0
  180. package/lib/trade/liquidation/types.d.ts +38 -0
  181. package/lib/trade/liquidation/types.js +2 -0
  182. package/lib/trade/oiWindows.d.ts +3 -0
  183. package/lib/trade/oiWindows.js +19 -0
  184. package/lib/trade/pnl/builder.d.ts +16 -0
  185. package/lib/trade/pnl/builder.js +43 -0
  186. package/lib/trade/pnl/converter.d.ts +47 -0
  187. package/lib/trade/pnl/converter.js +72 -0
  188. package/lib/trade/pnl/index.d.ts +91 -0
  189. package/lib/trade/pnl/index.js +301 -0
  190. package/lib/trade/pnl/types.d.ts +79 -0
  191. package/lib/trade/pnl/types.js +5 -0
  192. package/lib/trade/priceImpact/close/builder.d.ts +23 -0
  193. package/lib/trade/priceImpact/close/builder.js +44 -0
  194. package/lib/trade/priceImpact/close/index.d.ts +22 -0
  195. package/lib/trade/priceImpact/close/index.js +137 -0
  196. package/lib/trade/priceImpact/close/types.d.ts +47 -0
  197. package/lib/trade/priceImpact/close/types.js +5 -0
  198. package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
  199. package/lib/trade/priceImpact/cumulVol/builder.js +53 -0
  200. package/lib/trade/priceImpact/cumulVol/converter.d.ts +94 -0
  201. package/lib/trade/priceImpact/cumulVol/converter.js +155 -0
  202. package/lib/trade/priceImpact/cumulVol/index.d.ts +109 -0
  203. package/lib/trade/priceImpact/cumulVol/index.js +316 -0
  204. package/lib/trade/priceImpact/cumulVol/types.d.ts +11 -0
  205. package/lib/trade/priceImpact/cumulVol/types.js +2 -0
  206. package/lib/trade/priceImpact/index.d.ts +21 -0
  207. package/lib/trade/priceImpact/index.js +79 -0
  208. package/lib/trade/priceImpact/open/builder.d.ts +21 -0
  209. package/lib/trade/priceImpact/open/builder.js +42 -0
  210. package/lib/trade/priceImpact/open/index.d.ts +23 -0
  211. package/lib/trade/priceImpact/open/index.js +82 -0
  212. package/lib/trade/priceImpact/open/types.d.ts +45 -0
  213. package/lib/trade/priceImpact/open/types.js +5 -0
  214. package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
  215. package/lib/trade/priceImpact/skew/builder.js +27 -0
  216. package/lib/trade/priceImpact/skew/converter.d.ts +46 -0
  217. package/lib/trade/priceImpact/skew/converter.js +81 -0
  218. package/lib/trade/priceImpact/skew/fetcher.d.ts +60 -0
  219. package/lib/trade/priceImpact/skew/fetcher.js +160 -0
  220. package/lib/trade/priceImpact/skew/index.d.ts +53 -0
  221. package/lib/trade/priceImpact/skew/index.js +148 -0
  222. package/lib/trade/priceImpact/skew/types.d.ts +44 -0
  223. package/lib/trade/priceImpact/skew/types.js +5 -0
  224. package/lib/trade/spread.d.ts +5 -0
  225. package/lib/trade/spread.js +19 -0
  226. package/lib/trade/types.d.ts +777 -0
  227. package/lib/trade/types.js +478 -0
  228. package/lib/trade/utils.d.ts +18 -0
  229. package/lib/trade/utils.js +30 -0
  230. package/lib/utils/index.d.ts +1 -0
  231. package/lib/utils/index.js +17 -0
  232. package/lib/utils/packing.d.ts +2 -0
  233. package/lib/utils/packing.js +39 -0
  234. package/lib/vault/index.d.ts +10 -0
  235. package/lib/vault/index.js +10 -0
  236. package/package.json +106 -0
@@ -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,27 @@
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
+ const skewDepth = tradingVariables.pairSkewDepths?.[pairIndex] ?? 0;
15
+ const pairOi = tradingVariables.pairOis?.[pairIndex];
16
+ if (!pairOi) {
17
+ throw new Error(`Pair OI data not found for pair index ${pairIndex}`);
18
+ }
19
+ return {
20
+ skewDepth,
21
+ pairOiToken: {
22
+ oiLongToken: pairOi.token.long,
23
+ oiShortToken: pairOi.token.short,
24
+ },
25
+ };
26
+ };
27
+ 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
+ };
@@ -0,0 +1,81 @@
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.convertPairSkewDepths = exports.convertSkewDepth = 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 = 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 Converts skew depth from contract format to SDK format
59
+ * @param depth Skew depth from contract (in token units with 1e18 precision)
60
+ * @returns Normalized skew depth in tokens
61
+ */
62
+ const convertSkewDepth = (depth) => {
63
+ // Token depths are always stored with 1e18 precision in the contract
64
+ return Number(depth) / 1e18;
65
+ };
66
+ exports.convertSkewDepth = convertSkewDepth;
67
+ /**
68
+ * @dev Converts array of skew depths from contract format to SDK format
69
+ * @param depths Array of skew depths from contract (in token units with 1e18 precision)
70
+ * @returns Object mapping pair index to normalized depth
71
+ */
72
+ const convertPairSkewDepths = (depths) => {
73
+ const result = {};
74
+ depths.forEach((depth, index) => {
75
+ if (depth && depth !== "0") {
76
+ result[index] = (0, exports.convertSkewDepth)(depth);
77
+ }
78
+ });
79
+ return result;
80
+ };
81
+ exports.convertPairSkewDepths = convertPairSkewDepths;
@@ -0,0 +1,60 @@
1
+ import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
2
+ import type { PairOiToken, SkewPriceImpactContext } from "./types";
3
+ /**
4
+ * @dev Fetches pair open interest in tokens for a specific pair
5
+ * @param contract GNSMultiCollatDiamond contract instance
6
+ * @param collateralIndex Collateral index
7
+ * @param pairIndex Pair index
8
+ * @returns Promise resolving to pair OI in tokens
9
+ */
10
+ export declare const fetchPairOiAfterV10Token: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number) => Promise<PairOiToken>;
11
+ /**
12
+ * @dev Fetches pair open interest in tokens for multiple pairs
13
+ * @param contract GNSMultiCollatDiamond contract instance
14
+ * @param collateralIndices Array of collateral indices
15
+ * @param pairIndices Array of pair indices
16
+ * @returns Promise resolving to array of pair OI in tokens
17
+ */
18
+ export declare const fetchPairOisAfterV10Token: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[]) => Promise<PairOiToken[]>;
19
+ /**
20
+ * @dev Fetches skew depth for a specific pair
21
+ * @param contract GNSMultiCollatDiamond contract instance
22
+ * @param collateralIndex Collateral index
23
+ * @param pairIndex Pair index
24
+ * @returns Promise resolving to normalized skew depth
25
+ */
26
+ export declare const fetchPairSkewDepth: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number) => Promise<number>;
27
+ /**
28
+ * @dev Fetches skew depths for multiple pairs
29
+ * @param contract GNSMultiCollatDiamond contract instance
30
+ * @param collateralIndices Array of collateral indices
31
+ * @param pairIndices Array of pair indices
32
+ * @returns Promise resolving to array of normalized skew depths
33
+ */
34
+ export declare const fetchPairSkewDepths: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[]) => Promise<number[]>;
35
+ /**
36
+ * @dev Fetches skew price impact context for a single pair
37
+ * @param contract GNSMultiCollatDiamond contract instance
38
+ * @param collateralIndex Collateral index
39
+ * @param pairIndex Pair index
40
+ * @returns Promise resolving to skew price impact context
41
+ */
42
+ export declare const fetchSkewPriceImpactContext: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number) => Promise<SkewPriceImpactContext>;
43
+ /**
44
+ * @dev Fetches collateral decimals for given collateral indices
45
+ * @param contract GNSMultiCollatDiamond contract instance
46
+ * @param collateralIndices Array of collateral indices
47
+ * @returns Promise resolving to array of decimals
48
+ */
49
+ export declare const fetchCollateralDecimals: (contract: GNSMultiCollatDiamond, collateralIndices: number[]) => Promise<number[]>;
50
+ /**
51
+ * @dev Calculates skew price impact for a trade using contract call
52
+ * @param contract GNSMultiCollatDiamond contract instance
53
+ * @param collateralIndex Collateral index
54
+ * @param pairIndex Pair index
55
+ * @param long Whether trade is long
56
+ * @param positionSizeToken Position size in tokens
57
+ * @param open Whether trade is opening
58
+ * @returns Promise resolving to price impact percentage (1e10)
59
+ */
60
+ export declare const calculateTradeSkewPriceImpact: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number, long: boolean, positionSizeToken: number, open: boolean) => Promise<number>;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateTradeSkewPriceImpact = exports.fetchCollateralDecimals = exports.fetchSkewPriceImpactContext = exports.fetchPairSkewDepths = exports.fetchPairSkewDepth = exports.fetchPairOisAfterV10Token = exports.fetchPairOiAfterV10Token = void 0;
4
+ const converter_1 = require("./converter");
5
+ /**
6
+ * @dev Fetches pair open interest in tokens for a specific pair
7
+ * @param contract GNSMultiCollatDiamond contract instance
8
+ * @param collateralIndex Collateral index
9
+ * @param pairIndex Pair index
10
+ * @returns Promise resolving to pair OI in tokens
11
+ */
12
+ const fetchPairOiAfterV10Token = async (contract, collateralIndex, pairIndex) => {
13
+ try {
14
+ const contractData = await contract.getPairOiAfterV10Token(collateralIndex, pairIndex);
15
+ return (0, converter_1.convertPairOiToken)(contractData);
16
+ }
17
+ catch (error) {
18
+ console.error("Error fetching pair OI token:", error);
19
+ throw error;
20
+ }
21
+ };
22
+ exports.fetchPairOiAfterV10Token = fetchPairOiAfterV10Token;
23
+ /**
24
+ * @dev Fetches pair open interest in tokens for multiple pairs
25
+ * @param contract GNSMultiCollatDiamond contract instance
26
+ * @param collateralIndices Array of collateral indices
27
+ * @param pairIndices Array of pair indices
28
+ * @returns Promise resolving to array of pair OI in tokens
29
+ */
30
+ const fetchPairOisAfterV10Token = async (contract, collateralIndices, pairIndices) => {
31
+ if (collateralIndices.length !== pairIndices.length) {
32
+ throw new Error("Collateral indices and pair indices arrays must have the same length");
33
+ }
34
+ try {
35
+ const contractDataArray = await contract.getPairOisAfterV10Token(collateralIndices, pairIndices);
36
+ return contractDataArray.map(converter_1.convertPairOiToken);
37
+ }
38
+ catch (error) {
39
+ console.error("Error fetching pair OIs token:", error);
40
+ throw error;
41
+ }
42
+ };
43
+ exports.fetchPairOisAfterV10Token = fetchPairOisAfterV10Token;
44
+ /**
45
+ * @dev Fetches skew depth for a specific pair
46
+ * @param contract GNSMultiCollatDiamond contract instance
47
+ * @param collateralIndex Collateral index
48
+ * @param pairIndex Pair index
49
+ * @returns Promise resolving to normalized skew depth
50
+ */
51
+ const fetchPairSkewDepth = async (contract, collateralIndex, pairIndex) => {
52
+ try {
53
+ const contractDepth = await contract.getPairSkewDepth(collateralIndex, pairIndex);
54
+ // Token depths are always 1e18 precision
55
+ return (0, converter_1.convertSkewDepth)(contractDepth.toString());
56
+ }
57
+ catch (error) {
58
+ console.error("Error fetching skew depth:", error);
59
+ throw error;
60
+ }
61
+ };
62
+ exports.fetchPairSkewDepth = fetchPairSkewDepth;
63
+ /**
64
+ * @dev Fetches skew depths for multiple pairs
65
+ * @param contract GNSMultiCollatDiamond contract instance
66
+ * @param collateralIndices Array of collateral indices
67
+ * @param pairIndices Array of pair indices
68
+ * @returns Promise resolving to array of normalized skew depths
69
+ */
70
+ const fetchPairSkewDepths = async (contract, collateralIndices, pairIndices) => {
71
+ if (collateralIndices.length !== pairIndices.length) {
72
+ throw new Error("All input arrays must have the same length");
73
+ }
74
+ try {
75
+ const contractDepths = await contract.getPairSkewDepths(collateralIndices, pairIndices);
76
+ // Token depths are always 1e18 precision
77
+ return contractDepths.map(depth => (0, converter_1.convertSkewDepth)(depth.toString()));
78
+ }
79
+ catch (error) {
80
+ console.error("Error fetching skew depths:", error);
81
+ throw error;
82
+ }
83
+ };
84
+ exports.fetchPairSkewDepths = fetchPairSkewDepths;
85
+ /**
86
+ * @dev Fetches skew price impact context for a single pair
87
+ * @param contract GNSMultiCollatDiamond contract instance
88
+ * @param collateralIndex Collateral index
89
+ * @param pairIndex Pair index
90
+ * @returns Promise resolving to skew price impact context
91
+ */
92
+ const fetchSkewPriceImpactContext = async (contract, collateralIndex, pairIndex) => {
93
+ try {
94
+ // Fetch OI data and skew depth in parallel
95
+ const [pairOiToken, skewDepth] = await Promise.all([
96
+ (0, exports.fetchPairOiAfterV10Token)(contract, collateralIndex, pairIndex),
97
+ (0, exports.fetchPairSkewDepth)(contract, collateralIndex, pairIndex),
98
+ ]);
99
+ return {
100
+ skewDepth,
101
+ pairOiToken,
102
+ };
103
+ }
104
+ catch (error) {
105
+ console.error("Error fetching skew price impact context:", error);
106
+ throw error;
107
+ }
108
+ };
109
+ exports.fetchSkewPriceImpactContext = fetchSkewPriceImpactContext;
110
+ /**
111
+ * @dev Fetches collateral decimals for given collateral indices
112
+ * @param contract GNSMultiCollatDiamond contract instance
113
+ * @param collateralIndices Array of collateral indices
114
+ * @returns Promise resolving to array of decimals
115
+ */
116
+ const fetchCollateralDecimals = async (contract, collateralIndices) => {
117
+ try {
118
+ // Get unique collateral indices to minimize calls
119
+ const uniqueIndices = [...new Set(collateralIndices)];
120
+ // Fetch collateral info for unique indices
121
+ const promises = uniqueIndices.map(async (index) => {
122
+ const collateral = await contract.getCollateral(index);
123
+ return { index, decimals: Number(collateral.precision) };
124
+ });
125
+ const collateralData = await Promise.all(promises);
126
+ // Create a map for quick lookup
127
+ const decimalsMap = new Map(collateralData.map(data => [data.index, data.decimals]));
128
+ // Return decimals in the same order as input
129
+ return collateralIndices.map(index => decimalsMap.get(index) || 18 // Default to 18 if not found
130
+ );
131
+ }
132
+ catch (error) {
133
+ console.error("Error fetching collateral decimals:", error);
134
+ throw error;
135
+ }
136
+ };
137
+ exports.fetchCollateralDecimals = fetchCollateralDecimals;
138
+ /**
139
+ * @dev Calculates skew price impact for a trade using contract call
140
+ * @param contract GNSMultiCollatDiamond contract instance
141
+ * @param collateralIndex Collateral index
142
+ * @param pairIndex Pair index
143
+ * @param long Whether trade is long
144
+ * @param positionSizeToken Position size in tokens
145
+ * @param open Whether trade is opening
146
+ * @returns Promise resolving to price impact percentage (1e10)
147
+ */
148
+ const calculateTradeSkewPriceImpact = async (contract, collateralIndex, pairIndex, long, positionSizeToken, open) => {
149
+ try {
150
+ const priceImpactP = await contract.getTradeSkewPriceImpactP(collateralIndex, pairIndex, long, BigInt(Math.round(positionSizeToken * 1e18)), // Convert to 1e18 precision
151
+ open);
152
+ // Convert from int256 1e10 to percentage
153
+ return Number(priceImpactP) / 1e10;
154
+ }
155
+ catch (error) {
156
+ console.error("Error calculating trade skew price impact:", error);
157
+ throw error;
158
+ }
159
+ };
160
+ exports.calculateTradeSkewPriceImpact = calculateTradeSkewPriceImpact;
@@ -0,0 +1,53 @@
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 } 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
14
+ * @param netSkewToken Net skew in tokens
15
+ * @param currentPrice Current pair price
16
+ * @returns Net skew in collateral
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 tokens
31
+ * @param tradePositiveSkew 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, tradePositiveSkew: boolean) => number;
35
+ /**
36
+ * @dev Main function to calculate skew price impact for a trade
37
+ * @param input Trade parameters
38
+ * @param context Skew price impact context with depths and OI data
39
+ * @returns Skew price impact result
40
+ */
41
+ export declare const getTradeSkewPriceImpact: (input: SkewPriceImpactInput, context: SkewPriceImpactContext) => SkewPriceImpactResult;
42
+ /**
43
+ * @dev Calculate position sizes for partial operations
44
+ * @param originalSizeCollateral Original position size in collateral
45
+ * @param deltaCollateral Position size delta in collateral
46
+ * @param originalSizeToken Original position size in tokens
47
+ * @returns Delta in tokens proportional to collateral delta
48
+ */
49
+ export declare const calculatePartialSizeToken: (originalSizeCollateral: number, deltaCollateral: number, originalSizeToken: number) => number;
50
+ export * as SkewPriceImpact from "./types";
51
+ export * from "./converter";
52
+ export * from "./builder";
53
+ export * from "./fetcher";
@@ -0,0 +1,148 @@
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
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = void 0;
34
+ // Constants
35
+ const PRICE_IMPACT_DIVIDER = 2; // Half price impact to match cumulative volume impact scale
36
+ /**
37
+ * @dev Calculates net skew in tokens (long - short)
38
+ * @param pairOi Pair OI data with long and short token amounts
39
+ * @returns Net skew in tokens (positive = long heavy, negative = short heavy)
40
+ */
41
+ const getNetSkewToken = (pairOi) => {
42
+ return pairOi.oiLongToken - pairOi.oiShortToken;
43
+ };
44
+ exports.getNetSkewToken = getNetSkewToken;
45
+ /**
46
+ * @dev Calculates net skew in collateral
47
+ * @param netSkewToken Net skew in tokens
48
+ * @param currentPrice Current pair price
49
+ * @returns Net skew in collateral
50
+ */
51
+ const getNetSkewCollateral = (netSkewToken, currentPrice) => {
52
+ return netSkewToken * currentPrice;
53
+ };
54
+ exports.getNetSkewCollateral = getNetSkewCollateral;
55
+ /**
56
+ * @dev Determines trade direction impact on skew
57
+ * @param long Is long position
58
+ * @param open Is opening (true) or closing (false)
59
+ * @returns Whether trade increases or decreases skew
60
+ */
61
+ const getTradeSkewDirection = (long, open) => {
62
+ // Opening long or closing short increases positive skew
63
+ // Opening short or closing long increases negative skew
64
+ return (long && open) || (!long && !open);
65
+ };
66
+ exports.getTradeSkewDirection = getTradeSkewDirection;
67
+ /**
68
+ * @dev Core skew price impact calculation
69
+ * @param existingSkewToken Current net skew in tokens (signed)
70
+ * @param tradeSizeToken Trade size in tokens (always positive)
71
+ * @param skewDepth Skew depth in tokens
72
+ * @param tradePositiveSkew Whether trade increases skew in its direction
73
+ * @returns Price impact percentage (can be positive or negative)
74
+ */
75
+ const calculateSkewPriceImpactP = (existingSkewToken, tradeSizeToken, skewDepth, tradePositiveSkew) => {
76
+ if (skewDepth === 0) {
77
+ return 0; // No impact if depth is 0
78
+ }
79
+ // Convert signed values based on trade direction
80
+ const tradeSkewMultiplier = tradePositiveSkew ? 1 : -1;
81
+ const signedExistingSkew = existingSkewToken;
82
+ const signedTradeSize = tradeSizeToken * tradeSkewMultiplier;
83
+ // (existingSkew + tradeSize/2) / skewDepth
84
+ const numerator = signedExistingSkew + signedTradeSize / 2;
85
+ const priceImpactP = numerator / skewDepth;
86
+ // Apply divider to match cumulative volume impact scale
87
+ return priceImpactP / PRICE_IMPACT_DIVIDER;
88
+ };
89
+ exports.calculateSkewPriceImpactP = calculateSkewPriceImpactP;
90
+ /**
91
+ * @dev Main function to calculate skew price impact for a trade
92
+ * @param input Trade parameters
93
+ * @param context Skew price impact context with depths and OI data
94
+ * @returns Skew price impact result
95
+ */
96
+ const getTradeSkewPriceImpact = (input, context) => {
97
+ // Get skew depth and pair OI from simplified context
98
+ const { skewDepth, pairOiToken: pairOi } = context;
99
+ // Calculate net skew
100
+ const netSkewToken = (0, exports.getNetSkewToken)(pairOi);
101
+ // Determine trade direction
102
+ const tradePositiveSkew = (0, exports.getTradeSkewDirection)(input.long, input.open);
103
+ // Calculate price impact
104
+ const basePriceImpactP = (0, exports.calculateSkewPriceImpactP)(netSkewToken, 0, skewDepth, tradePositiveSkew);
105
+ // Calculate price impact
106
+ const totalPriceImpactP = (0, exports.calculateSkewPriceImpactP)(netSkewToken, input.positionSizeToken, skewDepth, tradePositiveSkew);
107
+ const tradePriceImpactP = totalPriceImpactP - basePriceImpactP;
108
+ // Determine trade direction relative to skew
109
+ let tradeDirection;
110
+ if (totalPriceImpactP > 0) {
111
+ tradeDirection = "increase";
112
+ }
113
+ else if (totalPriceImpactP < 0) {
114
+ tradeDirection = "decrease";
115
+ }
116
+ else {
117
+ tradeDirection = "neutral";
118
+ }
119
+ return {
120
+ basePriceImpactP,
121
+ tradePriceImpactP,
122
+ totalPriceImpactP,
123
+ netSkewToken,
124
+ netSkewCollateral: 0,
125
+ tradeDirection,
126
+ };
127
+ };
128
+ exports.getTradeSkewPriceImpact = getTradeSkewPriceImpact;
129
+ /**
130
+ * @dev Calculate position sizes for partial operations
131
+ * @param originalSizeCollateral Original position size in collateral
132
+ * @param deltaCollateral Position size delta in collateral
133
+ * @param originalSizeToken Original position size in tokens
134
+ * @returns Delta in tokens proportional to collateral delta
135
+ */
136
+ const calculatePartialSizeToken = (originalSizeCollateral, deltaCollateral, originalSizeToken) => {
137
+ if (originalSizeCollateral === 0) {
138
+ return 0;
139
+ }
140
+ // For partial close/add, token delta is proportional to collateral delta
141
+ return (deltaCollateral * originalSizeToken) / originalSizeCollateral;
142
+ };
143
+ exports.calculatePartialSizeToken = calculatePartialSizeToken;
144
+ // Export namespace for types
145
+ exports.SkewPriceImpact = __importStar(require("./types"));
146
+ __exportStar(require("./converter"), exports);
147
+ __exportStar(require("./builder"), exports);
148
+ __exportStar(require("./fetcher"), exports);
@@ -0,0 +1,44 @@
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 SkewPriceImpactInput = {
13
+ collateralIndex: number;
14
+ pairIndex: number;
15
+ long: boolean;
16
+ open: boolean;
17
+ positionSizeToken: number;
18
+ };
19
+ export type SkewPriceImpactResult = {
20
+ basePriceImpactP: number;
21
+ tradePriceImpactP: number;
22
+ totalPriceImpactP: number;
23
+ netSkewToken: number;
24
+ netSkewCollateral: number;
25
+ tradeDirection: "increase" | "decrease" | "neutral";
26
+ };
27
+ export type SkewPriceImpactContext = {
28
+ skewDepth: number;
29
+ pairOiToken: PairOiToken;
30
+ };
31
+ export type TradeSkewParams = {
32
+ collateralIndex: number;
33
+ pairIndex: number;
34
+ long: boolean;
35
+ open: boolean;
36
+ positionSizeCollateral: number;
37
+ currentPrice: number;
38
+ contractsVersion: number;
39
+ isCounterTrade?: boolean;
40
+ };
41
+ export type PositionSizeResult = {
42
+ positionSizeToken: number;
43
+ positionSizeCollateral: number;
44
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Skew price impact types for v10+ trades
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @dev Pure spread calculations without price impact
3
+ * @dev For price impact calculations, see priceImpact module
4
+ */
5
+ export { getSpreadWithPriceImpactP, getSpreadWithCumulVolPriceImpactP, getTradeCumulVolPriceImpactP, getCumulVolPriceImpact, getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, CumulVolContext as SpreadContext, } from "./priceImpact/cumulVol";