@gainsnetwork/sdk 0.0.0-v10.rc2 → 0.0.0-v10.rc21

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 (238) 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 +20 -0
  14. package/lib/constants.js +24 -3
  15. package/lib/contracts/addresses.json +20 -0
  16. package/lib/contracts/index.js +3 -1
  17. package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
  18. package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
  19. package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
  20. package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
  21. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
  22. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
  23. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
  24. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
  25. package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +7 -20
  26. package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -0
  27. package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -0
  28. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.d.ts +613 -0
  29. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.js +2 -0
  30. package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
  31. package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
  32. package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
  33. package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -0
  34. package/lib/contracts/types/generated/GNSTrading.d.ts +758 -0
  35. package/lib/contracts/types/generated/GNSTrading.js +2 -0
  36. package/lib/contracts/types/generated/GNSTradingCallbacks.d.ts +875 -0
  37. package/lib/contracts/types/generated/GNSTradingCallbacks.js +2 -0
  38. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.d.ts +806 -0
  39. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.js +2 -0
  40. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.d.ts +821 -0
  41. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.js +2 -0
  42. package/lib/contracts/types/generated/GNSTradingStorage.d.ts +1387 -0
  43. package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
  44. package/lib/contracts/types/generated/GTokenV6_3_2.d.ts +1838 -0
  45. package/lib/contracts/types/generated/GTokenV6_3_2.js +2 -0
  46. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
  47. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
  48. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
  49. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
  50. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
  51. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
  52. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
  53. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
  54. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +7 -16
  55. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
  56. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
  57. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
  58. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
  59. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
  60. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
  61. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
  62. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
  63. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
  64. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
  65. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
  66. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
  67. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
  68. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
  69. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
  70. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
  71. package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
  72. package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
  73. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
  74. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -0
  75. package/lib/contracts/types/generated/factories/GToken__factory.d.ts +7 -0
  76. package/lib/contracts/types/generated/factories/GToken__factory.js +4 -0
  77. package/lib/contracts/types/index.d.ts +2 -1
  78. package/lib/contracts/types/index.js +1 -0
  79. package/lib/contracts/utils/index.d.ts +0 -3
  80. package/lib/contracts/utils/index.js +0 -3
  81. package/lib/contracts/utils/openTrades.js +14 -30
  82. package/lib/contracts/utils/pairs.js +20 -0
  83. package/lib/index.d.ts +2 -0
  84. package/lib/index.js +5 -0
  85. package/lib/markets/collateral/converter.d.ts +5 -0
  86. package/lib/markets/collateral/converter.js +11 -0
  87. package/lib/markets/collateral/index.d.ts +1 -0
  88. package/lib/markets/collateral/index.js +17 -0
  89. package/lib/markets/collateral/types.d.ts +7 -0
  90. package/lib/markets/collateral/types.js +2 -0
  91. package/lib/markets/holdingFees/index.d.ts +46 -0
  92. package/lib/markets/holdingFees/index.js +105 -0
  93. package/lib/markets/holdingFees/types.d.ts +23 -0
  94. package/lib/markets/holdingFees/types.js +5 -0
  95. package/lib/markets/index.d.ts +5 -0
  96. package/lib/markets/index.js +5 -0
  97. package/lib/markets/leverage/builder.d.ts +12 -0
  98. package/lib/markets/leverage/builder.js +25 -0
  99. package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
  100. package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
  101. package/lib/markets/leverage/index.d.ts +3 -0
  102. package/lib/markets/leverage/index.js +19 -0
  103. package/lib/markets/leverage/types.d.ts +15 -0
  104. package/lib/markets/leverage/types.js +2 -0
  105. package/lib/markets/oi/converter.d.ts +62 -0
  106. package/lib/markets/oi/converter.js +102 -0
  107. package/lib/markets/oi/fetcher.d.ts +58 -0
  108. package/lib/markets/oi/fetcher.js +181 -0
  109. package/lib/markets/oi/index.d.ts +49 -0
  110. package/lib/markets/oi/index.js +77 -0
  111. package/lib/markets/oi/types.d.ts +73 -0
  112. package/lib/markets/oi/types.js +6 -0
  113. package/lib/markets/oi/validation.d.ts +80 -0
  114. package/lib/markets/oi/validation.js +172 -0
  115. package/lib/markets/price/builder.d.ts +25 -0
  116. package/lib/markets/price/builder.js +69 -0
  117. package/lib/markets/price/index.d.ts +6 -0
  118. package/lib/markets/price/index.js +22 -0
  119. package/lib/markets/price/marketPrice.d.ts +12 -0
  120. package/lib/markets/price/marketPrice.js +34 -0
  121. package/lib/markets/price/types.d.ts +23 -0
  122. package/lib/markets/price/types.js +5 -0
  123. package/lib/trade/counterTrade/index.d.ts +2 -0
  124. package/lib/trade/counterTrade/index.js +18 -0
  125. package/lib/trade/counterTrade/types.d.ts +7 -0
  126. package/lib/trade/counterTrade/types.js +2 -0
  127. package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
  128. package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
  129. package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
  130. package/lib/trade/effectiveLeverage/builder.js +30 -0
  131. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +23 -0
  132. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +64 -0
  133. package/lib/trade/effectiveLeverage/index.d.ts +3 -0
  134. package/lib/trade/effectiveLeverage/index.js +22 -0
  135. package/lib/trade/effectiveLeverage/types.d.ts +33 -0
  136. package/lib/trade/effectiveLeverage/types.js +2 -0
  137. package/lib/trade/fees/borrowing/builder.d.ts +14 -0
  138. package/lib/trade/fees/borrowing/builder.js +33 -0
  139. package/lib/trade/fees/borrowing/index.d.ts +15 -4
  140. package/lib/trade/fees/borrowing/index.js +42 -18
  141. package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
  142. package/lib/trade/fees/borrowingV2/builder.js +24 -0
  143. package/lib/trade/fees/borrowingV2/converter.d.ts +12 -3
  144. package/lib/trade/fees/borrowingV2/converter.js +29 -18
  145. package/lib/{contracts/fetch/fees/borrowingFeesV2.d.ts → trade/fees/borrowingV2/fetcher.d.ts} +2 -3
  146. package/lib/{contracts/fetch/fees/borrowingFeesV2.js → trade/fees/borrowingV2/fetcher.js} +6 -14
  147. package/lib/trade/fees/borrowingV2/index.d.ts +6 -17
  148. package/lib/trade/fees/borrowingV2/index.js +10 -37
  149. package/lib/trade/fees/borrowingV2/types.d.ts +22 -6
  150. package/lib/trade/fees/converter.d.ts +48 -0
  151. package/lib/trade/fees/converter.js +114 -0
  152. package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
  153. package/lib/trade/fees/fundingFees/builder.js +35 -0
  154. package/lib/{contracts/fetch/fees/fundingFees.d.ts → trade/fees/fundingFees/fetcher.d.ts} +2 -2
  155. package/lib/trade/fees/fundingFees/index.d.ts +28 -39
  156. package/lib/trade/fees/fundingFees/index.js +33 -46
  157. package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
  158. package/lib/trade/fees/fundingFees/pairContext.js +17 -0
  159. package/lib/trade/fees/holdingFees/index.d.ts +46 -0
  160. package/lib/trade/fees/holdingFees/index.js +105 -0
  161. package/lib/trade/fees/holdingFees/types.d.ts +23 -0
  162. package/lib/trade/fees/holdingFees/types.js +5 -0
  163. package/lib/trade/fees/index.d.ts +4 -2
  164. package/lib/trade/fees/index.js +45 -36
  165. package/lib/trade/fees/tiers/converter.d.ts +54 -0
  166. package/lib/trade/fees/tiers/converter.js +81 -0
  167. package/lib/trade/fees/tiers/index.d.ts +1 -0
  168. package/lib/trade/fees/tiers/index.js +1 -0
  169. package/lib/trade/fees/trading/builder.d.ts +18 -0
  170. package/lib/trade/fees/trading/builder.js +20 -0
  171. package/lib/trade/fees/trading/converter.d.ts +2 -0
  172. package/lib/trade/fees/trading/converter.js +5 -1
  173. package/lib/trade/fees/trading/holdingFees.d.ts +28 -0
  174. package/lib/trade/fees/trading/holdingFees.js +66 -0
  175. package/lib/trade/fees/trading/holdingFeesStructured.d.ts +28 -0
  176. package/lib/trade/fees/trading/holdingFeesStructured.js +66 -0
  177. package/lib/trade/fees/trading/index.d.ts +30 -2
  178. package/lib/trade/fees/trading/index.js +52 -1
  179. package/lib/trade/fees/trading/types.d.ts +9 -0
  180. package/lib/trade/index.d.ts +3 -1
  181. package/lib/trade/index.js +3 -1
  182. package/lib/trade/liquidation/builder.d.ts +25 -0
  183. package/lib/trade/liquidation/builder.js +59 -0
  184. package/lib/trade/liquidation/converter.d.ts +23 -0
  185. package/lib/trade/liquidation/converter.js +46 -0
  186. package/lib/trade/liquidation/index.d.ts +16 -0
  187. package/lib/trade/liquidation/index.js +123 -0
  188. package/lib/trade/liquidation/types.d.ts +42 -0
  189. package/lib/trade/liquidation/types.js +2 -0
  190. package/lib/trade/pnl/builder.d.ts +16 -0
  191. package/lib/trade/pnl/builder.js +44 -0
  192. package/lib/trade/pnl/converter.d.ts +47 -0
  193. package/lib/trade/pnl/converter.js +72 -0
  194. package/lib/trade/pnl/index.d.ts +88 -0
  195. package/lib/trade/pnl/index.js +286 -0
  196. package/lib/trade/pnl/types.d.ts +75 -0
  197. package/lib/trade/pnl/types.js +5 -0
  198. package/lib/trade/priceImpact/close/builder.d.ts +23 -0
  199. package/lib/trade/priceImpact/close/builder.js +45 -0
  200. package/lib/trade/priceImpact/close/index.d.ts +22 -0
  201. package/lib/trade/priceImpact/close/index.js +119 -0
  202. package/lib/trade/priceImpact/close/types.d.ts +44 -0
  203. package/lib/trade/priceImpact/close/types.js +5 -0
  204. package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
  205. package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
  206. package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
  207. package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
  208. package/lib/trade/priceImpact/cumulVol/index.d.ts +108 -0
  209. package/lib/trade/priceImpact/cumulVol/index.js +235 -0
  210. package/lib/trade/priceImpact/index.d.ts +18 -5
  211. package/lib/trade/priceImpact/index.js +57 -10
  212. package/lib/trade/priceImpact/open/builder.d.ts +21 -0
  213. package/lib/trade/priceImpact/open/builder.js +43 -0
  214. package/lib/trade/priceImpact/open/index.d.ts +23 -0
  215. package/lib/trade/priceImpact/open/index.js +74 -0
  216. package/lib/trade/priceImpact/open/types.d.ts +41 -0
  217. package/lib/trade/priceImpact/open/types.js +5 -0
  218. package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
  219. package/lib/trade/priceImpact/skew/builder.js +28 -0
  220. package/lib/trade/priceImpact/skew/converter.d.ts +11 -42
  221. package/lib/trade/priceImpact/skew/converter.js +19 -109
  222. package/lib/{contracts/fetch/priceImpact/skew.d.ts → trade/priceImpact/skew/fetcher.d.ts} +9 -12
  223. package/lib/{contracts/fetch/priceImpact/skew.js → trade/priceImpact/skew/fetcher.js} +23 -22
  224. package/lib/trade/priceImpact/skew/index.d.ts +11 -15
  225. package/lib/trade/priceImpact/skew/index.js +22 -54
  226. package/lib/trade/priceImpact/skew/types.d.ts +2 -15
  227. package/lib/trade/spread.d.ts +5 -18
  228. package/lib/trade/spread.js +17 -106
  229. package/lib/trade/types.d.ts +30 -8
  230. package/lib/trade/types.js +20 -0
  231. package/lib/vault/index.d.ts +3 -1
  232. package/lib/vault/index.js +2 -2
  233. package/package.json +2 -2
  234. package/lib/trade/liquidation.d.ts +0 -42
  235. package/lib/trade/liquidation.js +0 -140
  236. package/lib/trade/pnl.d.ts +0 -10
  237. package/lib/trade/pnl.js +0 -38
  238. /package/lib/{contracts/fetch/fees/fundingFees.js → trade/fees/fundingFees/fetcher.js} +0 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @dev Trade effective leverage calculations
3
+ * @dev Mirrors contract's TradingCommonUtils.getTradeNewEffectiveLeverage
4
+ */
5
+ import { TradeEffectiveLeverageInput, TradeEffectiveLeverageContext, TradeEffectiveLeverageResult } from "./types";
6
+ export type { TradeEffectiveLeverageInput, TradeEffectiveLeverageContext, TradeEffectiveLeverageResult, };
7
+ export { buildTradeEffectiveLeverageContext } from "./builder";
8
+ /**
9
+ * @dev Calculates the effective leverage of a trade accounting for unrealized PnL
10
+ * @dev Effective leverage increases when PnL is negative and decreases when positive
11
+ * @dev Mirrors contract's getTradeNewEffectiveLeverage function
12
+ * @param input Trade parameters including new position values
13
+ * @param context Combined context for calculations
14
+ * @returns Effective leverage and related values
15
+ */
16
+ export declare const getTradeNewEffectiveLeverage: (input: TradeEffectiveLeverageInput, context: TradeEffectiveLeverageContext) => TradeEffectiveLeverageResult;
17
+ /**
18
+ * @dev Simplified version for existing positions (no opening fees)
19
+ * @param input Trade parameters
20
+ * @param context Combined context
21
+ * @returns Effective leverage and related values
22
+ */
23
+ export declare const getTradeEffectiveLeverage: (input: Omit<TradeEffectiveLeverageInput, "openingFeesCollateral">, context: TradeEffectiveLeverageContext) => TradeEffectiveLeverageResult;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = exports.buildTradeEffectiveLeverageContext = void 0;
4
+ const __1 = require("..");
5
+ var builder_1 = require("./builder");
6
+ Object.defineProperty(exports, "buildTradeEffectiveLeverageContext", { enumerable: true, get: function () { return builder_1.buildTradeEffectiveLeverageContext; } });
7
+ /**
8
+ * @dev Calculates the effective leverage of a trade accounting for unrealized PnL
9
+ * @dev Effective leverage increases when PnL is negative and decreases when positive
10
+ * @dev Mirrors contract's getTradeNewEffectiveLeverage function
11
+ * @param input Trade parameters including new position values
12
+ * @param context Combined context for calculations
13
+ * @returns Effective leverage and related values
14
+ */
15
+ const getTradeNewEffectiveLeverage = (input, context) => {
16
+ const { trade, newOpenPrice, newCollateralAmount, newLeverage, currentPairPrice, openingFeesCollateral, } = input;
17
+ const { closingPriceImpactContext } = context;
18
+ // Calculate new position size
19
+ const newPositionSize = newCollateralAmount * newLeverage;
20
+ // Calculate price impact for closing at current price
21
+ const closingPriceImpact = (0, __1.getTradeClosingPriceImpact)({
22
+ trade: Object.assign(Object.assign({}, trade), { openPrice: newOpenPrice, collateralAmount: newCollateralAmount, leverage: newLeverage }),
23
+ oraclePrice: currentPairPrice,
24
+ positionSizeCollateral: newPositionSize,
25
+ currentPairPrice: currentPairPrice,
26
+ useCumulativeVolPriceImpact: true,
27
+ collateralIndex: trade.collateralIndex,
28
+ pairIndex: trade.pairIndex,
29
+ pairSpreadP: context.baseSpreadP,
30
+ contractsVersion: closingPriceImpactContext.tradeInfo.contractsVersion,
31
+ }, closingPriceImpactContext);
32
+ // Calculate unrealized PnL
33
+ // For longs: (exitPrice - entryPrice) * positionSizeToken
34
+ // For shorts: (entryPrice - exitPrice) * positionSizeToken
35
+ const priceDiff = trade.long
36
+ ? closingPriceImpact.priceAfterImpact - newOpenPrice
37
+ : newOpenPrice - closingPriceImpact.priceAfterImpact;
38
+ const unrealizedPnl = priceDiff * closingPriceImpact.positionSizeToken;
39
+ // Calculate effective collateral (collateral + PnL - fees)
40
+ // Note: fees are subtracted because they reduce the effective collateral
41
+ const effectiveCollateral = newCollateralAmount + unrealizedPnl - openingFeesCollateral;
42
+ // Calculate effective leverage
43
+ // If effective collateral is <= 0, leverage is effectively infinite
44
+ const effectiveLeverage = effectiveCollateral > 0
45
+ ? newPositionSize / effectiveCollateral
46
+ : Number.MAX_SAFE_INTEGER;
47
+ return {
48
+ effectiveLeverage,
49
+ unrealizedPnl,
50
+ effectiveCollateral,
51
+ positionSize: newPositionSize,
52
+ };
53
+ };
54
+ exports.getTradeNewEffectiveLeverage = getTradeNewEffectiveLeverage;
55
+ /**
56
+ * @dev Simplified version for existing positions (no opening fees)
57
+ * @param input Trade parameters
58
+ * @param context Combined context
59
+ * @returns Effective leverage and related values
60
+ */
61
+ const getTradeEffectiveLeverage = (input, context) => {
62
+ return (0, exports.getTradeNewEffectiveLeverage)(Object.assign(Object.assign({}, input), { openingFeesCollateral: 0 }), context);
63
+ };
64
+ exports.getTradeEffectiveLeverage = getTradeEffectiveLeverage;
@@ -0,0 +1,3 @@
1
+ export * from "./types";
2
+ export * from "./builder";
3
+ export { getTradeNewEffectiveLeverage, getTradeEffectiveLeverage, } from "./getTradeNewEffectiveLeverage";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./builder"), exports);
20
+ var getTradeNewEffectiveLeverage_1 = require("./getTradeNewEffectiveLeverage");
21
+ Object.defineProperty(exports, "getTradeNewEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeNewEffectiveLeverage; } });
22
+ Object.defineProperty(exports, "getTradeEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeEffectiveLeverage; } });
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @dev Types for trade effective leverage calculations
3
+ */
4
+ import { Trade, TradeClosingPriceImpactContext } from "..";
5
+ /**
6
+ * @dev Input parameters for effective leverage calculation
7
+ * @dev Mirrors contract's parameters for getTradeNewEffectiveLeverage
8
+ */
9
+ export type TradeEffectiveLeverageInput = {
10
+ trade: Trade;
11
+ newOpenPrice: number;
12
+ newCollateralAmount: number;
13
+ newLeverage: number;
14
+ currentPairPrice: number;
15
+ openingFeesCollateral: number;
16
+ };
17
+ /**
18
+ * @dev Context for effective leverage calculation
19
+ * Includes closing price impact context for PnL calculations
20
+ */
21
+ export type TradeEffectiveLeverageContext = {
22
+ closingPriceImpactContext: TradeClosingPriceImpactContext;
23
+ baseSpreadP: number;
24
+ };
25
+ /**
26
+ * @dev Result of effective leverage calculation
27
+ */
28
+ export type TradeEffectiveLeverageResult = {
29
+ effectiveLeverage: number;
30
+ unrealizedPnl: number;
31
+ effectiveCollateral: number;
32
+ positionSize: number;
33
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @dev Context builder for borrowing v1 fees
3
+ */
4
+ import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
5
+ import { GetBorrowingFeeContext } from "./index";
6
+ /**
7
+ * @dev Builds borrowing v1 context from global trading variables
8
+ * @dev Returns full array-based context required for v1 borrowing fee calculations
9
+ * @param globalTradingVariables The transformed global trading variables from backend
10
+ * @param collateralIndex Collateral index (1-based)
11
+ * @param currentBlock Current block number
12
+ * @returns Full borrowing context with all pairs and groups or undefined if data not available
13
+ */
14
+ export declare const buildBorrowingV1Context: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, currentBlock: number) => GetBorrowingFeeContext | undefined;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Context builder for borrowing v1 fees
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildBorrowingV1Context = void 0;
7
+ /**
8
+ * @dev Builds borrowing v1 context from global trading variables
9
+ * @dev Returns full array-based context required for v1 borrowing fee calculations
10
+ * @param globalTradingVariables The transformed global trading variables from backend
11
+ * @param collateralIndex Collateral index (1-based)
12
+ * @param currentBlock Current block number
13
+ * @returns Full borrowing context with all pairs and groups or undefined if data not available
14
+ */
15
+ const buildBorrowingV1Context = (globalTradingVariables, collateralIndex, currentBlock) => {
16
+ var _a;
17
+ const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
18
+ if (!(collateral === null || collateral === void 0 ? void 0 : collateral.pairBorrowingFees) || !(collateral === null || collateral === void 0 ? void 0 : collateral.groupBorrowingFees)) {
19
+ return undefined;
20
+ }
21
+ const pairs = collateral.pairBorrowingFees;
22
+ const groups = collateral.groupBorrowingFees;
23
+ if (pairs.length === 0 || groups.length === 0) {
24
+ return undefined;
25
+ }
26
+ return {
27
+ currentBlock,
28
+ pairs,
29
+ groups,
30
+ collateralPriceUsd: ((_a = collateral.prices) === null || _a === void 0 ? void 0 : _a.collateralPriceUsd) || 1,
31
+ };
32
+ };
33
+ exports.buildBorrowingV1Context = buildBorrowingV1Context;
@@ -4,18 +4,24 @@ export type GetBorrowingFeeContext = {
4
4
  currentBlock: number;
5
5
  groups: BorrowingFee.Group[];
6
6
  pairs: BorrowingFee.Pair[];
7
+ collateralPriceUsd: number;
7
8
  };
8
9
  /**
9
10
  * @dev Calculates borrowing fees using v1 model (block-based with groups)
10
11
  * @dev Still actively used by markets that haven't migrated to v2
12
+ * @dev Uses dynamic collateral OI - converts OI to USD for fee calculations
11
13
  * @param posDai Position size in collateral
12
- * @param pairIndex Trading pair index
14
+ * @param pairIndex Trading pair index (required)
13
15
  * @param long Whether position is long
14
16
  * @param initialAccFees Initial accumulated fees when trade was opened
15
- * @param context Context with current block and fee data
17
+ * @param context Context with current block, fee data, and collateral price
16
18
  * @returns Borrowing fee in collateral tokens
17
19
  */
18
- export declare const getBorrowingFee: (posDai: number, pairIndex: PairIndex, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, context: GetBorrowingFeeContext) => number;
20
+ export declare const getBorrowingFee: (posDai: number, pairIndex: PairIndex | undefined, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, context: GetBorrowingFeeContext) => number;
21
+ /**
22
+ * @dev This function uses static OI which doesn't reflect current market values
23
+ * @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice)
24
+ */
19
25
  export declare const withinMaxGroupOi: (pairIndex: PairIndex, long: boolean, positionSizeCollateral: number, context: {
20
26
  groups: BorrowingFee.Group[];
21
27
  pairs: BorrowingFee.Pair[];
@@ -29,6 +35,7 @@ export declare const borrowingFeeUtils: {
29
35
  getPairPendingAccFees: (pairIndex: PairIndex, currentBlock: number, context: {
30
36
  pairs: BorrowingFee.Pair[];
31
37
  openInterest: OpenInterest;
38
+ collateralPriceUsd: number;
32
39
  }) => {
33
40
  accFeeLong: number;
34
41
  accFeeShort: number;
@@ -38,9 +45,11 @@ export declare const borrowingFeeUtils: {
38
45
  getPairPendingAccFee: (pairIndex: PairIndex, currentBlock: number, long: boolean, context: {
39
46
  pairs: BorrowingFee.Pair[];
40
47
  openInterest: OpenInterest;
48
+ collateralPriceUsd: number;
41
49
  }) => number;
42
50
  getGroupPendingAccFees: (groupIndex: number, currentBlock: number, context: {
43
51
  groups: BorrowingFee.Group[];
52
+ collateralPriceUsd: number;
44
53
  }) => {
45
54
  accFeeLong: number;
46
55
  accFeeShort: number;
@@ -49,8 +58,9 @@ export declare const borrowingFeeUtils: {
49
58
  };
50
59
  getGroupPendingAccFee: (groupIndex: number, currentBlock: number, long: boolean, context: {
51
60
  groups: BorrowingFee.Group[];
61
+ collateralPriceUsd: number;
52
62
  }) => number;
53
- getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, maxOi: number, feeExponent: number, feeCaps?: BorrowingFee.BorrowingFeePerBlockCap) => {
63
+ getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, maxOi: number, feeExponent: number, feeCaps?: BorrowingFee.BorrowingFeePerBlockCap, collateralPriceUsd?: number) => {
54
64
  accFeeLong: number;
55
65
  accFeeShort: number;
56
66
  deltaLong: number;
@@ -66,3 +76,4 @@ export declare const borrowingFeeUtils: {
66
76
  };
67
77
  export * as BorrowingFee from "./types";
68
78
  export * from "./converter";
79
+ export * from "./builder";
@@ -30,18 +30,22 @@ exports.BorrowingFee = exports.borrowingFeeUtils = exports.withinMaxGroupOi = ex
30
30
  /**
31
31
  * @dev Calculates borrowing fees using v1 model (block-based with groups)
32
32
  * @dev Still actively used by markets that haven't migrated to v2
33
+ * @dev Uses dynamic collateral OI - converts OI to USD for fee calculations
33
34
  * @param posDai Position size in collateral
34
- * @param pairIndex Trading pair index
35
+ * @param pairIndex Trading pair index (required)
35
36
  * @param long Whether position is long
36
37
  * @param initialAccFees Initial accumulated fees when trade was opened
37
- * @param context Context with current block and fee data
38
+ * @param context Context with current block, fee data, and collateral price
38
39
  * @returns Borrowing fee in collateral tokens
39
40
  */
40
41
  const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
41
- if (!context.groups || !context.pairs || !context.pairs[pairIndex]) {
42
+ if (pairIndex === undefined) {
43
+ throw new Error("pairIndex is required for borrowing fee calculations");
44
+ }
45
+ const { pairs, groups } = context;
46
+ if (!groups || !pairs || !pairs[pairIndex]) {
42
47
  return 0;
43
48
  }
44
- const { pairs } = context;
45
49
  const pairGroups = pairs[pairIndex].groups;
46
50
  const firstPairGroup = (pairGroups === null || pairGroups === void 0 ? void 0 : pairGroups.length) > 0 ? pairGroups[0] : undefined;
47
51
  let fee = 0;
@@ -52,13 +56,19 @@ const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
52
56
  ? getPairPendingAccFee(pairIndex, context.currentBlock, long, {
53
57
  pairs,
54
58
  openInterest,
59
+ collateralPriceUsd: context.collateralPriceUsd,
55
60
  })
56
61
  : long
57
62
  ? firstPairGroup.pairAccFeeLong
58
63
  : firstPairGroup.pairAccFeeShort) - initialAccFees.accPairFee;
59
64
  }
60
65
  for (let i = pairGroups.length; i > 0; i--) {
61
- const { deltaGroup, deltaPair, beforeTradeOpen } = getPairGroupAccFeesDeltas(i - 1, pairGroups, initialAccFees, pairIndex, long, context);
66
+ const { deltaGroup, deltaPair, beforeTradeOpen } = getPairGroupAccFeesDeltas(i - 1, pairGroups, initialAccFees, pairIndex, long, {
67
+ currentBlock: context.currentBlock,
68
+ groups,
69
+ pairs,
70
+ collateralPriceUsd: context.collateralPriceUsd,
71
+ });
62
72
  fee += Math.max(deltaGroup, deltaPair);
63
73
  if (beforeTradeOpen) {
64
74
  break;
@@ -67,6 +77,10 @@ const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
67
77
  return (posDai * fee) / 100;
68
78
  };
69
79
  exports.getBorrowingFee = getBorrowingFee;
80
+ /**
81
+ * @dev This function uses static OI which doesn't reflect current market values
82
+ * @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice)
83
+ */
70
84
  const withinMaxGroupOi = (pairIndex, long, positionSizeCollateral, context) => {
71
85
  const { groups, pairs } = context;
72
86
  if (!groups || !pairs) {
@@ -85,18 +99,19 @@ const getPairGroupIndex = (pairIndex, context) => {
85
99
  return pairGroups.length == 0 ? 0 : pairGroups[0].groupIndex;
86
100
  };
87
101
  const getPairPendingAccFees = (pairIndex, currentBlock, context) => {
88
- const { pairs, openInterest: { long, short }, } = context;
102
+ const { pairs, openInterest: { long, short }, collateralPriceUsd, } = context;
89
103
  const pair = pairs[pairIndex];
90
- return getPendingAccFees(pair.accFeeLong, pair.accFeeShort, long, short, pair.feePerBlock, currentBlock, pair.accLastUpdatedBlock, pair.oi.max, pair.feeExponent, pair.feePerBlockCap);
104
+ return getPendingAccFees(pair.accFeeLong, pair.accFeeShort, long, short, pair.feePerBlock, currentBlock, pair.accLastUpdatedBlock, pair.oi.max, pair.feeExponent, pair.feePerBlockCap, collateralPriceUsd);
91
105
  };
92
106
  const getPairPendingAccFee = (pairIndex, currentBlock, long, context) => {
93
107
  const { accFeeLong, accFeeShort } = getPairPendingAccFees(pairIndex, currentBlock, context);
94
108
  return long ? accFeeLong : accFeeShort;
95
109
  };
96
110
  const getGroupPendingAccFees = (groupIndex, currentBlock, context) => {
97
- const { groups } = context;
111
+ const { groups, collateralPriceUsd } = context;
98
112
  const group = groups[groupIndex];
99
- return getPendingAccFees(group.accFeeLong, group.accFeeShort, group.oi.long, group.oi.short, group.feePerBlock, currentBlock, group.accLastUpdatedBlock, group.oi.max, group.feeExponent);
113
+ return getPendingAccFees(group.accFeeLong, group.accFeeShort, group.oi.long, group.oi.short, group.feePerBlock, currentBlock, group.accLastUpdatedBlock, group.oi.max, group.feeExponent, undefined, // no fee caps for groups
114
+ collateralPriceUsd);
100
115
  };
101
116
  const getGroupPendingAccFee = (groupIndex, currentBlock, long, context) => {
102
117
  const { accFeeLong, accFeeShort } = getGroupPendingAccFees(groupIndex, currentBlock, context);
@@ -107,14 +122,16 @@ const getPairGroupAccFeesDeltas = (i, pairGroups, initialFees, pairIndex, long,
107
122
  const beforeTradeOpen = group.block < initialFees.block;
108
123
  let deltaGroup, deltaPair;
109
124
  if (i == pairGroups.length - 1) {
110
- const { currentBlock, groups, pairs } = context;
125
+ const { currentBlock, groups, pairs, collateralPriceUsd } = context;
111
126
  const openInterest = pairs[pairIndex].oi;
112
127
  deltaGroup = getGroupPendingAccFee(group.groupIndex, currentBlock, long, {
113
128
  groups,
129
+ collateralPriceUsd,
114
130
  });
115
131
  deltaPair = getPairPendingAccFee(pairIndex, currentBlock, long, {
116
132
  pairs,
117
133
  openInterest,
134
+ collateralPriceUsd,
118
135
  });
119
136
  }
120
137
  else {
@@ -137,8 +154,8 @@ const getPairGroupAccFeesDeltas = (i, pairGroups, initialFees, pairIndex, long,
137
154
  }
138
155
  return { deltaGroup, deltaPair, beforeTradeOpen };
139
156
  };
140
- const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock, currentBlock, accLastUpdatedBlock, maxOi, feeExponent, feeCaps // as percentage: eg minP: 0.1 = 10%, maxP: 0.5 = 50%
141
- ) => {
157
+ const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock, currentBlock, accLastUpdatedBlock, maxOi, feeExponent, feeCaps, // as percentage: eg minP: 0.1 = 10%, maxP: 0.5 = 50%
158
+ collateralPriceUsd) => {
142
159
  const moreShorts = oiLong < oiShort;
143
160
  const blockDistance = currentBlock > accLastUpdatedBlock ? currentBlock - accLastUpdatedBlock : 0;
144
161
  // If block distance is zero nothing changes
@@ -150,19 +167,25 @@ const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock
150
167
  deltaShort: 0,
151
168
  };
152
169
  }
153
- const netOi = Math.abs(oiLong - oiShort);
154
- // Calculate minimum and maximum effective oi
170
+ // Convert OI to USD if collateral price is provided (dynamic collateral OI)
171
+ const oiLongUsd = collateralPriceUsd ? oiLong * collateralPriceUsd : oiLong;
172
+ const oiShortUsd = collateralPriceUsd
173
+ ? oiShort * collateralPriceUsd
174
+ : oiShort;
175
+ const maxOiUsd = collateralPriceUsd ? maxOi * collateralPriceUsd : maxOi;
176
+ const netOi = Math.abs(oiLongUsd - oiShortUsd);
177
+ // Calculate minimum and maximum effective oi (using USD values if available)
155
178
  const { minP, maxP } = getFeePerBlockCaps(feeCaps);
156
- const minNetOi = maxOi * minP;
157
- const maxNetOi = maxOi * maxP;
179
+ const minNetOi = maxOiUsd * minP;
180
+ const maxNetOi = maxOiUsd * maxP;
158
181
  // Calculate the minimum acc fee delta (applies to both sides)
159
182
  const minDelta = minNetOi > 0
160
- ? getPendingAccFeesDelta(blockDistance, feePerBlock, netOi, maxOi, feeExponent)
183
+ ? getPendingAccFeesDelta(blockDistance, feePerBlock, netOi, maxOiUsd, feeExponent)
161
184
  : 0;
162
185
  // Calculate the actual acc fee (using capped oi of 100% or less)
163
186
  const delta = netOi > minNetOi
164
187
  ? getPendingAccFeesDelta(blockDistance, feePerBlock, Math.min(netOi, maxNetOi), // if netOi > cap, use cap
165
- maxOi, feeExponent)
188
+ maxOiUsd, feeExponent)
166
189
  : minDelta;
167
190
  const [deltaLong, deltaShort] = moreShorts
168
191
  ? [minDelta, delta]
@@ -217,3 +240,4 @@ exports.borrowingFeeUtils = {
217
240
  };
218
241
  exports.BorrowingFee = __importStar(require("./types"));
219
242
  __exportStar(require("./converter"), exports);
243
+ __exportStar(require("./builder"), exports);
@@ -0,0 +1,6 @@
1
+ import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
2
+ import { GetPairBorrowingFeeV2Context } from "./types";
3
+ /**
4
+ * @dev Builds borrowing v2 sub-context for a specific pair
5
+ */
6
+ export declare const buildBorrowingV2Context: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, currentTimestamp: number) => GetPairBorrowingFeeV2Context | undefined;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildBorrowingV2Context = void 0;
4
+ /**
5
+ * @dev Builds borrowing v2 sub-context for a specific pair
6
+ */
7
+ const buildBorrowingV2Context = (globalTradingVariables, collateralIndex, pairIndex, currentTimestamp) => {
8
+ var _a, _b;
9
+ const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
10
+ if (!(collateral === null || collateral === void 0 ? void 0 : collateral.pairBorrowingFeesV2)) {
11
+ return undefined;
12
+ }
13
+ const params = (_a = collateral.pairBorrowingFeesV2.params) === null || _a === void 0 ? void 0 : _a[pairIndex];
14
+ const data = (_b = collateral.pairBorrowingFeesV2.data) === null || _b === void 0 ? void 0 : _b[pairIndex];
15
+ if (!params || !data) {
16
+ return undefined;
17
+ }
18
+ return {
19
+ params,
20
+ data,
21
+ currentTimestamp,
22
+ };
23
+ };
24
+ exports.buildBorrowingV2Context = buildBorrowingV2Context;
@@ -38,14 +38,13 @@ export declare const convertTradeInitialAccFees: (contractTradeData: IFundingFee
38
38
  export declare const convertTradeInitialAccFeesArray: (contractTradeDataArray: IFundingFees.TradeFeesDataStructOutput[]) => BorrowingFeeV2.TradeInitialAccFees[];
39
39
  /**
40
40
  * @dev Creates a context object from contract data arrays
41
- * @param collateralIndices Array of collateral indices
42
41
  * @param pairIndices Array of pair indices
43
42
  * @param borrowingParams Array of borrowing fee params from contract
44
43
  * @param borrowingData Array of pair borrowing fee data from contract
45
44
  * @param currentTimestamp Optional current timestamp
46
- * @returns Complete SDK context for borrowing v2 calculations
45
+ * @returns Complete SDK context for borrowing v2 calculations (collateral-scoped)
47
46
  */
48
- export declare const createBorrowingV2Context: (collateralIndices: number[], pairIndices: number[], borrowingParams: IFundingFees.BorrowingFeeParamsStructOutput[], borrowingData: IFundingFees.PairBorrowingFeeDataStructOutput[], currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
47
+ export declare const createBorrowingV2Context: (pairIndices: number[], borrowingParams: IFundingFees.BorrowingFeeParamsStructOutput[], borrowingData: IFundingFees.PairBorrowingFeeDataStructOutput[], currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
49
48
  /**
50
49
  * @dev Helper function to validate borrowing rate per second
51
50
  * @param borrowingRatePerSecondP Borrowing rate per second (normalized float)
@@ -64,3 +63,13 @@ export declare const borrowingRateToAPR: (borrowingRatePerSecondP: number) => nu
64
63
  * @returns Borrowing rate per second (normalized float)
65
64
  */
66
65
  export declare const aprToBorrowingRate: (aprPercentage: number) => number;
66
+ /**
67
+ * @dev Creates a collateral-scoped context from frontend data structure
68
+ * @param collateralBorrowingData Data structure from frontend (params and data arrays)
69
+ * @param currentTimestamp Optional current timestamp
70
+ * @returns Collateral-scoped borrowing fee v2 context
71
+ */
72
+ export declare const createCollateralScopedBorrowingContext: (collateralBorrowingData: {
73
+ params: BorrowingFeeV2.BorrowingFeeParams[];
74
+ data: BorrowingFeeV2.PairBorrowingFeeData[];
75
+ }, currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.aprToBorrowingRate = exports.borrowingRateToAPR = exports.isValidBorrowingRate = exports.createBorrowingV2Context = exports.convertTradeInitialAccFeesArray = exports.convertTradeInitialAccFees = exports.convertPairBorrowingFeeDataArray = exports.convertPairBorrowingFeeData = exports.convertBorrowingFeeParamsArray = exports.convertBorrowingFeeParams = void 0;
3
+ exports.createCollateralScopedBorrowingContext = exports.aprToBorrowingRate = exports.borrowingRateToAPR = exports.isValidBorrowingRate = exports.createBorrowingV2Context = exports.convertTradeInitialAccFeesArray = exports.convertTradeInitialAccFees = exports.convertPairBorrowingFeeDataArray = exports.convertPairBorrowingFeeData = exports.convertBorrowingFeeParamsArray = exports.convertBorrowingFeeParams = void 0;
4
4
  const index_1 = require("./index");
5
5
  /**
6
6
  * @dev Converts contract BorrowingFeeParams to SDK type
@@ -56,35 +56,24 @@ const convertTradeInitialAccFeesArray = (contractTradeDataArray) => contractTrad
56
56
  exports.convertTradeInitialAccFeesArray = convertTradeInitialAccFeesArray;
57
57
  /**
58
58
  * @dev Creates a context object from contract data arrays
59
- * @param collateralIndices Array of collateral indices
60
59
  * @param pairIndices Array of pair indices
61
60
  * @param borrowingParams Array of borrowing fee params from contract
62
61
  * @param borrowingData Array of pair borrowing fee data from contract
63
62
  * @param currentTimestamp Optional current timestamp
64
- * @returns Complete SDK context for borrowing v2 calculations
63
+ * @returns Complete SDK context for borrowing v2 calculations (collateral-scoped)
65
64
  */
66
- const createBorrowingV2Context = (collateralIndices, pairIndices, borrowingParams, borrowingData, currentTimestamp) => {
65
+ const createBorrowingV2Context = (pairIndices, borrowingParams, borrowingData, currentTimestamp) => {
67
66
  const context = {
68
67
  currentTimestamp,
69
68
  borrowingParams: {},
70
69
  borrowingData: {},
71
70
  };
72
- // Build nested objects indexed by collateralIndex and pairIndex
73
- for (let i = 0; i < collateralIndices.length; i++) {
74
- const collateralIndex = collateralIndices[i];
71
+ // Build objects indexed by pairIndex
72
+ for (let i = 0; i < pairIndices.length; i++) {
75
73
  const pairIndex = pairIndices[i];
76
- // Initialize collateral index objects if they don't exist
77
- if (!context.borrowingParams[collateralIndex]) {
78
- context.borrowingParams[collateralIndex] = {};
79
- }
80
- if (!context.borrowingData[collateralIndex]) {
81
- context.borrowingData[collateralIndex] = {};
82
- }
83
74
  // Store converted data
84
- context.borrowingParams[collateralIndex][pairIndex] =
85
- (0, exports.convertBorrowingFeeParams)(borrowingParams[i]);
86
- context.borrowingData[collateralIndex][pairIndex] =
87
- (0, exports.convertPairBorrowingFeeData)(borrowingData[i]);
75
+ context.borrowingParams[pairIndex] = (0, exports.convertBorrowingFeeParams)(borrowingParams[i]);
76
+ context.borrowingData[pairIndex] = (0, exports.convertPairBorrowingFeeData)(borrowingData[i]);
88
77
  }
89
78
  return context;
90
79
  };
@@ -119,3 +108,25 @@ const aprToBorrowingRate = (aprPercentage) => {
119
108
  return aprPercentage / SECONDS_PER_YEAR;
120
109
  };
121
110
  exports.aprToBorrowingRate = aprToBorrowingRate;
111
+ /**
112
+ * @dev Creates a collateral-scoped context from frontend data structure
113
+ * @param collateralBorrowingData Data structure from frontend (params and data arrays)
114
+ * @param currentTimestamp Optional current timestamp
115
+ * @returns Collateral-scoped borrowing fee v2 context
116
+ */
117
+ const createCollateralScopedBorrowingContext = (collateralBorrowingData, currentTimestamp) => {
118
+ const context = {
119
+ currentTimestamp: currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000),
120
+ borrowingParams: {},
121
+ borrowingData: {},
122
+ };
123
+ // Map arrays to objects indexed by array position (pairIndex)
124
+ collateralBorrowingData.params.forEach((param, index) => {
125
+ context.borrowingParams[index] = param;
126
+ });
127
+ collateralBorrowingData.data.forEach((data, index) => {
128
+ context.borrowingData[index] = data;
129
+ });
130
+ return context;
131
+ };
132
+ exports.createCollateralScopedBorrowingContext = createCollateralScopedBorrowingContext;
@@ -1,6 +1,5 @@
1
- /// <reference types="mocha" />
2
- import type { GNSMultiCollatDiamond } from "../../types/generated";
3
- import { BorrowingFeeV2 } from "../../../trade/fees/borrowingV2";
1
+ import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
2
+ import { BorrowingFeeV2 } from ".";
4
3
  /**
5
4
  * @dev Fetches borrowing fee parameters v2 for specific pairs
6
5
  * @param contract GNSMultiCollatDiamond contract instance
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.fetchBorrowingV2DataForPairs = exports.createBorrowingV2ContextFromArrays = exports.createBorrowingV2ContextFromContract = exports.fetchAllBorrowingV2Data = exports.fetchPairPendingAccBorrowingFeesV2 = exports.fetchTradeBorrowingFeesCollateralV2 = exports.fetchPairBorrowingFeeDataV2 = exports.fetchBorrowingFeeParamsV2 = void 0;
13
- const converter_1 = require("../../../trade/fees/borrowingV2/converter");
13
+ const converter_1 = require("./converter");
14
14
  /**
15
15
  * @dev Fetches borrowing fee parameters v2 for specific pairs
16
16
  * @param contract GNSMultiCollatDiamond contract instance
@@ -147,20 +147,12 @@ const createBorrowingV2ContextFromArrays = (collateralIndices, pairIndices, para
147
147
  borrowingParams: {},
148
148
  borrowingData: {},
149
149
  };
150
- // Build nested objects indexed by collateralIndex and pairIndex
151
- for (let i = 0; i < collateralIndices.length; i++) {
152
- const collateralIndex = collateralIndices[i];
150
+ // Build objects indexed by pairIndex (collateral-scoped)
151
+ for (let i = 0; i < pairIndices.length; i++) {
153
152
  const pairIndex = pairIndices[i];
154
- // Initialize collateral index objects if they don't exist
155
- if (!context.borrowingParams[collateralIndex]) {
156
- context.borrowingParams[collateralIndex] = {};
157
- }
158
- if (!context.borrowingData[collateralIndex]) {
159
- context.borrowingData[collateralIndex] = {};
160
- }
161
- // Store data
162
- context.borrowingParams[collateralIndex][pairIndex] = params[i];
163
- context.borrowingData[collateralIndex][pairIndex] = data[i];
153
+ // Store data indexed by pairIndex
154
+ context.borrowingParams[pairIndex] = params[i];
155
+ context.borrowingData[pairIndex] = data[i];
164
156
  }
165
157
  return context;
166
158
  };
@@ -22,23 +22,11 @@ export declare const BORROWING_V2_PRECISION: {
22
22
  export declare const getPairPendingAccBorrowingFees: (params: BorrowingFeeV2.BorrowingFeeParams, data: BorrowingFeeV2.PairBorrowingFeeData, currentPairPrice: number, currentTimestamp?: number) => number;
23
23
  /**
24
24
  * @dev Calculates borrowing fees owed by a specific trade
25
- * @param input Trade borrowing fee calculation input
26
- * @param context Context containing borrowing parameters and data
27
- * @returns Borrowing fees in collateral tokens
28
- */
29
- export declare const getTradeBorrowingFeesCollateral: (input: BorrowingFeeV2.TradeBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
30
- /**
31
- * @dev Convenience function to calculate borrowing fees for a trade using individual parameters
32
- * @param positionSizeCollateral Position size in collateral tokens
33
- * @param pairIndex Index of the trading pair
34
- * @param collateralIndex Index of the collateral
35
- * @param openPrice Price at which the trade was opened
36
- * @param currentPairPrice Current price of the trading pair
37
- * @param initialAccBorrowingFeeP Initial accumulated borrowing fee when trade was opened
38
- * @param context Context containing borrowing parameters and data
25
+ * @param input Trade borrowing fee calculation input (without pairIndex)
26
+ * @param context Pair-specific borrowing context
39
27
  * @returns Borrowing fees in collateral tokens
40
28
  */
41
- export declare const getBorrowingFee: (positionSizeCollateral: number, pairIndex: number, collateralIndex: number, openPrice: number, currentPairPrice: number, initialAccBorrowingFeeP: number, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
29
+ export declare const getTradeBorrowingFeesCollateral: (input: Omit<BorrowingFeeV2.TradeBorrowingFeeInput, "pairIndex">, context: BorrowingFeeV2.GetPairBorrowingFeeV2Context) => number;
42
30
  /**
43
31
  * @dev Utility function to get pending accumulated borrowing fees for a pair using context
44
32
  * @param input Pair borrowing fee calculation input
@@ -51,9 +39,10 @@ export declare const getPairBorrowingFees: (input: BorrowingFeeV2.PairBorrowingF
51
39
  */
52
40
  export declare const borrowingFeeV2Utils: {
53
41
  getPairPendingAccBorrowingFees: (params: BorrowingFeeV2.BorrowingFeeParams, data: BorrowingFeeV2.PairBorrowingFeeData, currentPairPrice: number, currentTimestamp?: number) => number;
54
- getTradeBorrowingFeesCollateral: (input: BorrowingFeeV2.TradeBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
42
+ getTradeBorrowingFeesCollateral: (input: Omit<BorrowingFeeV2.TradeBorrowingFeeInput, "pairIndex">, context: BorrowingFeeV2.GetPairBorrowingFeeV2Context) => number;
55
43
  getPairBorrowingFees: (input: BorrowingFeeV2.PairBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
56
- getBorrowingFee: (positionSizeCollateral: number, pairIndex: number, collateralIndex: number, openPrice: number, currentPairPrice: number, initialAccBorrowingFeeP: number, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
57
44
  };
58
45
  export * as BorrowingFeeV2 from "./types";
46
+ export { GetPairBorrowingFeeV2Context } from "./types";
59
47
  export * from "./converter";
48
+ export * from "./fetcher";