@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,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = void 0;
4
+ /**
5
+ * @dev Calculates the effective leverage of a trade accounting for unrealized PnL
6
+ * @dev Effective leverage increases when PnL is negative and decreases when positive
7
+ * @dev Mirrors contract's getTradeNewEffectiveLeverage function
8
+ * @param input Trade parameters including new position values
9
+ * @returns Effective leverage and related values
10
+ */
11
+ const getTradeNewEffectiveLeverage = (input) => {
12
+ const { newOpenPrice, newCollateralAmount, newLeverage, currentPairPrice, tradeValueCollateral, } = input;
13
+ // Calculate new position size
14
+ const newPositionSize = newCollateralAmount * newLeverage;
15
+ // Calculate dynamic position size (matching on-chain logic)
16
+ // This adjusts position size based on current price vs open price
17
+ const newPosSizeCollateralDynamic = (newPositionSize * currentPairPrice) / newOpenPrice;
18
+ // Use the provided trade value as margin value
19
+ // This already includes collateral + PnL with price impact - fees
20
+ const newMarginValueCollateral = tradeValueCollateral;
21
+ // Calculate effective leverage (matching on-chain)
22
+ // If margin value is <= 0, leverage is effectively infinite
23
+ const effectiveLeverage = newMarginValueCollateral > 0
24
+ ? newPosSizeCollateralDynamic / newMarginValueCollateral
25
+ : Number.MAX_SAFE_INTEGER;
26
+ return {
27
+ effectiveLeverage,
28
+ unrealizedPnl: tradeValueCollateral - newCollateralAmount,
29
+ effectiveCollateral: newMarginValueCollateral,
30
+ positionSize: newPositionSize,
31
+ };
32
+ };
33
+ exports.getTradeNewEffectiveLeverage = getTradeNewEffectiveLeverage;
34
+ /**
35
+ * @dev Simplified version for existing positions
36
+ * @param input Trade parameters
37
+ * @returns Effective leverage and related values
38
+ */
39
+ const getTradeEffectiveLeverage = (input) => {
40
+ return (0, exports.getTradeNewEffectiveLeverage)(input);
41
+ };
42
+ exports.getTradeEffectiveLeverage = getTradeEffectiveLeverage;
@@ -0,0 +1,2 @@
1
+ export * from "./types";
2
+ export { getTradeNewEffectiveLeverage, getTradeEffectiveLeverage, } from "./getTradeNewEffectiveLeverage";
@@ -0,0 +1,21 @@
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
+ var getTradeNewEffectiveLeverage_1 = require("./getTradeNewEffectiveLeverage");
20
+ Object.defineProperty(exports, "getTradeNewEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeNewEffectiveLeverage; } });
21
+ Object.defineProperty(exports, "getTradeEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeEffectiveLeverage; } });
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @dev Types for trade effective leverage calculations
3
+ */
4
+ import { Trade } 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
+ tradeValueCollateral: number;
16
+ };
17
+ /**
18
+ * @dev Context for effective leverage calculation
19
+ * Simplified context since price impact is now included in tradeValueCollateral
20
+ */
21
+ export type TradeEffectiveLeverageContext = {};
22
+ /**
23
+ * @dev Result of effective leverage calculation
24
+ */
25
+ export type TradeEffectiveLeverageResult = {
26
+ effectiveLeverage: number;
27
+ unrealizedPnl: number;
28
+ effectiveCollateral: number;
29
+ positionSize: number;
30
+ };
@@ -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
+ const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
17
+ if (!collateral?.pairBorrowingFees || !collateral?.groupBorrowingFees) {
18
+ return undefined;
19
+ }
20
+ const pairs = collateral.pairBorrowingFees;
21
+ const groups = collateral.groupBorrowingFees;
22
+ if (pairs.length === 0 || groups.length === 0) {
23
+ return undefined;
24
+ }
25
+ return {
26
+ currentBlock,
27
+ pairs,
28
+ groups,
29
+ collateralPriceUsd: collateral.prices?.collateralPriceUsd || 1,
30
+ pairOis: collateral.pairOis,
31
+ };
32
+ };
33
+ exports.buildBorrowingV1Context = buildBorrowingV1Context;
@@ -0,0 +1,17 @@
1
+ import { IBorrowingFees } from "../../../contracts/types/generated/GNSMultiCollatDiamond";
2
+ import { BorrowingFee } from ".";
3
+ export declare const convertPairGroupBorrowingFee: (pairGroup: IBorrowingFees.BorrowingPairGroupStructOutput) => BorrowingFee.PairGroup;
4
+ export declare const convertPairBorrowingFee: (pair: IBorrowingFees.BorrowingDataStructOutput, pairOi: IBorrowingFees.OpenInterestStructOutput, pairGroup: IBorrowingFees.BorrowingPairGroupStructOutput[], feeCap: IBorrowingFees.BorrowingFeePerBlockCapStructOutput) => BorrowingFee.Pair;
5
+ export declare const convertPairBorrowingFees: ([pairs, pairOi, pairGroups, feeCaps]: [
6
+ IBorrowingFees.BorrowingDataStructOutput[],
7
+ IBorrowingFees.OpenInterestStructOutput[],
8
+ IBorrowingFees.BorrowingPairGroupStructOutput[][],
9
+ IBorrowingFees.BorrowingFeePerBlockCapStructOutput[]
10
+ ]) => BorrowingFee.Pair[];
11
+ export declare const convertGroupBorrowingFee: (group: IBorrowingFees.BorrowingDataStructOutput, groupOi: IBorrowingFees.OpenInterestStructOutput) => BorrowingFee.Group;
12
+ export declare const convertGroupBorrowingData: (obj: IBorrowingFees.BorrowingDataStructOutput, oi: IBorrowingFees.OpenInterestStructOutput) => BorrowingFee.BorrowingData & BorrowingFee.BorrowingOi;
13
+ export declare const convertGroupBorrowingFees: ([groups, groupOis]: [
14
+ IBorrowingFees.BorrowingDataStructOutput[],
15
+ IBorrowingFees.OpenInterestStructOutput[]
16
+ ]) => BorrowingFee.Group[];
17
+ export declare const convertFeePerBlockCap: (feeCap: IBorrowingFees.BorrowingFeePerBlockCapStructOutput) => BorrowingFee.BorrowingFeePerBlockCap;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertFeePerBlockCap = exports.convertGroupBorrowingFees = exports.convertGroupBorrowingData = exports.convertGroupBorrowingFee = exports.convertPairBorrowingFees = exports.convertPairBorrowingFee = exports.convertPairGroupBorrowingFee = void 0;
4
+ const borrowingFees_1 = require("../../../contracts/utils/borrowingFees");
5
+ const convertPairGroupBorrowingFee = (pairGroup) => ({
6
+ groupIndex: pairGroup.groupIndex,
7
+ name: (0, borrowingFees_1.getBorrowingGroupName)(pairGroup.groupIndex),
8
+ initialAccFeeLong: parseFloat(pairGroup.initialAccFeeLong.toString()) / 1e10,
9
+ initialAccFeeShort: parseFloat(pairGroup.initialAccFeeShort.toString()) / 1e10,
10
+ prevGroupAccFeeLong: parseFloat(pairGroup.prevGroupAccFeeLong.toString()) / 1e10,
11
+ prevGroupAccFeeShort: parseFloat(pairGroup.prevGroupAccFeeShort.toString()) / 1e10,
12
+ pairAccFeeLong: parseFloat(pairGroup.pairAccFeeLong.toString()) / 1e10,
13
+ pairAccFeeShort: parseFloat(pairGroup.pairAccFeeShort.toString()) / 1e10,
14
+ block: pairGroup.block,
15
+ });
16
+ exports.convertPairGroupBorrowingFee = convertPairGroupBorrowingFee;
17
+ const convertPairBorrowingFee = (pair, pairOi, pairGroup, feeCap) => ({
18
+ ...(0, exports.convertGroupBorrowingData)(pair, pairOi),
19
+ groups: pairGroup.map(value => (0, exports.convertPairGroupBorrowingFee)(value)),
20
+ feePerBlockCap: (0, exports.convertFeePerBlockCap)(feeCap),
21
+ });
22
+ exports.convertPairBorrowingFee = convertPairBorrowingFee;
23
+ const convertPairBorrowingFees = ([pairs, pairOi, pairGroups, feeCaps]) => pairs.map((value, ix) => (0, exports.convertPairBorrowingFee)(value, pairOi[ix], pairGroups[ix], feeCaps[ix]));
24
+ exports.convertPairBorrowingFees = convertPairBorrowingFees;
25
+ const convertGroupBorrowingFee = (group, groupOi) => (0, exports.convertGroupBorrowingData)(group, groupOi);
26
+ exports.convertGroupBorrowingFee = convertGroupBorrowingFee;
27
+ const convertGroupBorrowingData = (obj, oi) => ({
28
+ oi: {
29
+ long: parseFloat(oi.long.toString()) / 1e10,
30
+ short: parseFloat(oi.short.toString()) / 1e10,
31
+ max: parseFloat(oi.max.toString()) / 1e10,
32
+ },
33
+ feePerBlock: obj.feePerBlock / 1e10,
34
+ accFeeLong: parseFloat(obj.accFeeLong.toString()) / 1e10,
35
+ accFeeShort: parseFloat(obj.accFeeShort.toString()) / 1e10,
36
+ accLastUpdatedBlock: obj.accLastUpdatedBlock,
37
+ feeExponent: obj.feeExponent,
38
+ });
39
+ exports.convertGroupBorrowingData = convertGroupBorrowingData;
40
+ const convertGroupBorrowingFees = ([groups, groupOis]) => groups.map((value, ix) => (0, exports.convertGroupBorrowingFee)(value, groupOis[ix]));
41
+ exports.convertGroupBorrowingFees = convertGroupBorrowingFees;
42
+ const convertFeePerBlockCap = (feeCap) => ({
43
+ minP: feeCap.minP ? parseFloat(feeCap.minP.toString()) / 1e3 / 100 : 0,
44
+ maxP: feeCap.maxP ? parseFloat(feeCap.maxP.toString()) / 1e3 / 100 : 1,
45
+ });
46
+ exports.convertFeePerBlockCap = convertFeePerBlockCap;
@@ -0,0 +1,81 @@
1
+ import { UnifiedPairOi } from "../../..";
2
+ import { OpenInterest, PairIndex } from "../../types";
3
+ import * as BorrowingFee from "./types";
4
+ export type GetBorrowingFeeContext = {
5
+ currentBlock: number;
6
+ groups: BorrowingFee.Group[];
7
+ pairs: BorrowingFee.Pair[];
8
+ collateralPriceUsd: number;
9
+ pairOis: UnifiedPairOi[];
10
+ };
11
+ /**
12
+ * @dev Calculates borrowing fees using v1 model (block-based with groups)
13
+ * @dev Still actively used by markets that haven't migrated to v2
14
+ * @dev Uses dynamic collateral OI - converts OI to USD for fee calculations
15
+ * @param posDai Position size in collateral
16
+ * @param pairIndex Trading pair index (required)
17
+ * @param long Whether position is long
18
+ * @param initialAccFees Initial accumulated fees when trade was opened
19
+ * @param context Context with current block, fee data, and collateral price
20
+ * @returns Borrowing fee in collateral tokens
21
+ */
22
+ export declare const getBorrowingFee: (posDai: number, pairIndex: PairIndex | undefined, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, currentPairPrice: number, context: GetBorrowingFeeContext) => number;
23
+ /**
24
+ * @dev This function uses static OI which doesn't reflect current market values
25
+ * @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice)
26
+ */
27
+ export declare const withinMaxGroupOi: (pairIndex: PairIndex, long: boolean, positionSizeCollateral: number, context: {
28
+ groups: BorrowingFee.Group[];
29
+ pairs: BorrowingFee.Pair[];
30
+ }) => boolean;
31
+ export declare const borrowingFeeUtils: {
32
+ getPairGroupAccFeesDeltas: (i: number, pairGroups: BorrowingFee.PairGroup[], initialFees: BorrowingFee.InitialAccFees, pairIndex: PairIndex, long: boolean, currentPairPrice: number, context: GetBorrowingFeeContext) => {
33
+ deltaGroup: number;
34
+ deltaPair: number;
35
+ beforeTradeOpen: boolean;
36
+ };
37
+ getPairPendingAccFees: (pairIndex: PairIndex, currentBlock: number, context: {
38
+ pairs: BorrowingFee.Pair[];
39
+ openInterest: OpenInterest;
40
+ collateralPriceUsd: number;
41
+ }) => {
42
+ accFeeLong: number;
43
+ accFeeShort: number;
44
+ deltaLong: number;
45
+ deltaShort: number;
46
+ };
47
+ getPairPendingAccFee: (pairIndex: PairIndex, currentBlock: number, long: boolean, context: {
48
+ pairs: BorrowingFee.Pair[];
49
+ openInterest: OpenInterest;
50
+ collateralPriceUsd: number;
51
+ }) => number;
52
+ getGroupPendingAccFees: (groupIndex: number, currentBlock: number, context: {
53
+ groups: BorrowingFee.Group[];
54
+ collateralPriceUsd: number;
55
+ }) => {
56
+ accFeeLong: number;
57
+ accFeeShort: number;
58
+ deltaLong: number;
59
+ deltaShort: number;
60
+ };
61
+ getGroupPendingAccFee: (groupIndex: number, currentBlock: number, long: boolean, context: {
62
+ groups: BorrowingFee.Group[];
63
+ collateralPriceUsd: number;
64
+ }) => number;
65
+ getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, maxOi: number, feeExponent: number, feeCaps?: BorrowingFee.BorrowingFeePerBlockCap, collateralPriceUsd?: number) => {
66
+ accFeeLong: number;
67
+ accFeeShort: number;
68
+ deltaLong: number;
69
+ deltaShort: number;
70
+ };
71
+ getActiveFeePerBlock: (pair: BorrowingFee.Pair, group: BorrowingFee.Group | undefined) => number;
72
+ getBorrowingDataActiveFeePerBlock: (val: BorrowingFee.Pair | BorrowingFee.Group) => number;
73
+ getPairGroupIndex: (pairIndex: PairIndex, context: {
74
+ pairs: BorrowingFee.Pair[];
75
+ }) => number;
76
+ getPendingAccFeesDelta: (blockDistance: number, feePerBlock: number, netOi: number, maxOi: number, feeExponent: number) => number;
77
+ getFeePerBlockCaps: (cap?: BorrowingFee.BorrowingFeePerBlockCap) => BorrowingFee.BorrowingFeePerBlockCap;
78
+ };
79
+ export * as BorrowingFee from "./types";
80
+ export * from "./converter";
81
+ export * from "./builder";
@@ -0,0 +1,259 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.BorrowingFee = exports.borrowingFeeUtils = exports.withinMaxGroupOi = exports.getBorrowingFee = void 0;
30
+ const __1 = require("../../..");
31
+ /**
32
+ * @dev Calculates borrowing fees using v1 model (block-based with groups)
33
+ * @dev Still actively used by markets that haven't migrated to v2
34
+ * @dev Uses dynamic collateral OI - converts OI to USD for fee calculations
35
+ * @param posDai Position size in collateral
36
+ * @param pairIndex Trading pair index (required)
37
+ * @param long Whether position is long
38
+ * @param initialAccFees Initial accumulated fees when trade was opened
39
+ * @param context Context with current block, fee data, and collateral price
40
+ * @returns Borrowing fee in collateral tokens
41
+ */
42
+ const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, currentPairPrice, context) => {
43
+ if (pairIndex === undefined) {
44
+ throw new Error("pairIndex is required for borrowing fee calculations");
45
+ }
46
+ const { pairs, groups } = context;
47
+ if (!groups || !pairs || !pairs[pairIndex]) {
48
+ return 0;
49
+ }
50
+ const pairGroups = pairs[pairIndex].groups;
51
+ const firstPairGroup = pairGroups?.length > 0 ? pairGroups[0] : undefined;
52
+ let fee = 0;
53
+ if (!firstPairGroup || firstPairGroup.block > initialAccFees.block) {
54
+ const openInterest = (0, __1.getPairTotalOisDynamicCollateral)(pairIndex, {
55
+ pairOis: context.pairOis,
56
+ currentPairPrice,
57
+ });
58
+ fee =
59
+ (!firstPairGroup
60
+ ? getPairPendingAccFee(pairIndex, context.currentBlock, long, {
61
+ pairs,
62
+ openInterest: {
63
+ long: openInterest.long,
64
+ short: openInterest.short,
65
+ max: context.pairOis[pairIndex].maxCollateral,
66
+ },
67
+ collateralPriceUsd: context.collateralPriceUsd,
68
+ })
69
+ : long
70
+ ? firstPairGroup.pairAccFeeLong
71
+ : firstPairGroup.pairAccFeeShort) - initialAccFees.accPairFee;
72
+ }
73
+ for (let i = pairGroups.length; i > 0; i--) {
74
+ const { deltaGroup, deltaPair, beforeTradeOpen } = getPairGroupAccFeesDeltas(i - 1, pairGroups, initialAccFees, pairIndex, long, currentPairPrice, {
75
+ currentBlock: context.currentBlock,
76
+ groups,
77
+ pairs,
78
+ collateralPriceUsd: context.collateralPriceUsd,
79
+ pairOis: context.pairOis,
80
+ });
81
+ fee += Math.max(deltaGroup, deltaPair);
82
+ if (beforeTradeOpen) {
83
+ break;
84
+ }
85
+ }
86
+ return (posDai * fee) / 100;
87
+ };
88
+ exports.getBorrowingFee = getBorrowingFee;
89
+ /**
90
+ * @dev This function uses static OI which doesn't reflect current market values
91
+ * @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice)
92
+ */
93
+ const withinMaxGroupOi = (pairIndex, long, positionSizeCollateral, context) => {
94
+ const { groups, pairs } = context;
95
+ if (!groups || !pairs) {
96
+ return false;
97
+ }
98
+ const g = groups[getPairGroupIndex(pairIndex, { pairs })].oi;
99
+ return (g.max == 0 || (long ? g.long : g.short) + positionSizeCollateral <= g.max);
100
+ };
101
+ exports.withinMaxGroupOi = withinMaxGroupOi;
102
+ const getPairGroupIndex = (pairIndex, context) => {
103
+ const { pairs } = context;
104
+ if (!pairs[pairIndex]) {
105
+ return 0;
106
+ }
107
+ const pairGroups = pairs[pairIndex].groups;
108
+ return pairGroups.length == 0 ? 0 : pairGroups[0].groupIndex;
109
+ };
110
+ const getPairPendingAccFees = (pairIndex, currentBlock, context) => {
111
+ const { pairs, openInterest: { long, short }, collateralPriceUsd, } = context;
112
+ const pair = pairs[pairIndex];
113
+ return getPendingAccFees(pair.accFeeLong, pair.accFeeShort, long, short, pair.feePerBlock, currentBlock, pair.accLastUpdatedBlock, context.openInterest.max, pair.feeExponent, pair.feePerBlockCap, collateralPriceUsd);
114
+ };
115
+ const getPairPendingAccFee = (pairIndex, currentBlock, long, context) => {
116
+ const { accFeeLong, accFeeShort } = getPairPendingAccFees(pairIndex, currentBlock, context);
117
+ return long ? accFeeLong : accFeeShort;
118
+ };
119
+ const getGroupPendingAccFees = (groupIndex, currentBlock, context) => {
120
+ const { groups, collateralPriceUsd } = context;
121
+ const group = groups[groupIndex];
122
+ 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
123
+ collateralPriceUsd);
124
+ };
125
+ const getGroupPendingAccFee = (groupIndex, currentBlock, long, context) => {
126
+ const { accFeeLong, accFeeShort } = getGroupPendingAccFees(groupIndex, currentBlock, context);
127
+ return long ? accFeeLong : accFeeShort;
128
+ };
129
+ const getPairGroupAccFeesDeltas = (i, pairGroups, initialFees, pairIndex, long, currentPairPrice, context) => {
130
+ const group = pairGroups[i];
131
+ const beforeTradeOpen = group.block < initialFees.block;
132
+ let deltaGroup, deltaPair;
133
+ if (i == pairGroups.length - 1) {
134
+ const { currentBlock, groups, pairs, collateralPriceUsd } = context;
135
+ const openInterest = (0, __1.getPairTotalOisDynamicCollateral)(pairIndex, {
136
+ pairOis: context.pairOis,
137
+ currentPairPrice,
138
+ });
139
+ deltaGroup = getGroupPendingAccFee(group.groupIndex, currentBlock, long, {
140
+ groups,
141
+ collateralPriceUsd,
142
+ });
143
+ deltaPair = getPairPendingAccFee(pairIndex, currentBlock, long, {
144
+ pairs,
145
+ openInterest: {
146
+ long: openInterest.long,
147
+ short: openInterest.short,
148
+ max: context.pairOis[pairIndex].maxCollateral,
149
+ },
150
+ collateralPriceUsd,
151
+ });
152
+ }
153
+ else {
154
+ const nextGroup = pairGroups[i + 1];
155
+ if (beforeTradeOpen && nextGroup.block <= initialFees.block) {
156
+ return { deltaGroup: 0, deltaPair: 0, beforeTradeOpen };
157
+ }
158
+ deltaGroup = long
159
+ ? nextGroup.prevGroupAccFeeLong
160
+ : nextGroup.prevGroupAccFeeShort;
161
+ deltaPair = long ? nextGroup.pairAccFeeLong : nextGroup.pairAccFeeShort;
162
+ }
163
+ if (beforeTradeOpen) {
164
+ deltaGroup -= initialFees.accGroupFee;
165
+ deltaPair -= initialFees.accPairFee;
166
+ }
167
+ else {
168
+ deltaGroup -= long ? group.initialAccFeeLong : group.initialAccFeeShort;
169
+ deltaPair -= long ? group.pairAccFeeLong : group.pairAccFeeShort;
170
+ }
171
+ return { deltaGroup, deltaPair, beforeTradeOpen };
172
+ };
173
+ const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock, currentBlock, accLastUpdatedBlock, maxOi, feeExponent, feeCaps, // as percentage: eg minP: 0.1 = 10%, maxP: 0.5 = 50%
174
+ collateralPriceUsd) => {
175
+ const moreShorts = oiLong < oiShort;
176
+ const blockDistance = currentBlock > accLastUpdatedBlock ? currentBlock - accLastUpdatedBlock : 0;
177
+ // If block distance is zero nothing changes
178
+ if (blockDistance === 0) {
179
+ return {
180
+ accFeeLong,
181
+ accFeeShort,
182
+ deltaLong: 0,
183
+ deltaShort: 0,
184
+ };
185
+ }
186
+ // Convert OI to USD if collateral price is provided (dynamic collateral OI)
187
+ const oiLongUsd = collateralPriceUsd ? oiLong * collateralPriceUsd : oiLong;
188
+ const oiShortUsd = collateralPriceUsd
189
+ ? oiShort * collateralPriceUsd
190
+ : oiShort;
191
+ const maxOiUsd = collateralPriceUsd ? maxOi * collateralPriceUsd : maxOi;
192
+ const netOi = Math.abs(oiLongUsd - oiShortUsd);
193
+ // Calculate minimum and maximum effective oi (using USD values if available)
194
+ const { minP, maxP } = getFeePerBlockCaps(feeCaps);
195
+ const minNetOi = maxOiUsd * minP;
196
+ const maxNetOi = maxOiUsd * maxP;
197
+ // Calculate the minimum acc fee delta (applies to both sides)
198
+ const minDelta = minNetOi > 0
199
+ ? getPendingAccFeesDelta(blockDistance, feePerBlock, minNetOi, maxOiUsd, feeExponent)
200
+ : 0;
201
+ // Calculate the actual acc fee (using capped oi of 100% or less)
202
+ const delta = netOi > minNetOi
203
+ ? getPendingAccFeesDelta(blockDistance, feePerBlock, Math.min(netOi, maxNetOi), // if netOi > cap, use cap
204
+ maxOiUsd, feeExponent)
205
+ : minDelta;
206
+ const [deltaLong, deltaShort] = moreShorts
207
+ ? [minDelta, delta]
208
+ : [delta, minDelta];
209
+ return {
210
+ accFeeLong: accFeeLong + deltaLong,
211
+ accFeeShort: accFeeShort + deltaShort,
212
+ deltaLong,
213
+ deltaShort,
214
+ };
215
+ };
216
+ const getPendingAccFeesDelta = (blockDistance, feePerBlock, netOi, maxOi, feeExponent) => {
217
+ return maxOi > 0 && feeExponent > 0
218
+ ? feePerBlock * blockDistance * (netOi / maxOi) ** feeExponent
219
+ : 0;
220
+ };
221
+ const getFeePerBlockCaps = (cap) => {
222
+ return {
223
+ minP: cap?.minP || 0,
224
+ maxP: cap?.maxP && cap.maxP > 0 ? cap.maxP : 1,
225
+ };
226
+ };
227
+ const getBorrowingDataActiveFeePerBlock = (val) => {
228
+ const { long, short, max } = val.oi;
229
+ const { minP, maxP } = getFeePerBlockCaps("feePerBlockCap" in val ? val.feePerBlockCap : undefined);
230
+ // Calculate the effective open interest
231
+ // If minP > 0 then netOi has to be at least minP * maxOi
232
+ // If maxP > 0 then netOi cannot be more than maxP * maxOi
233
+ const effectiveOi = Math.min(Math.max(Math.abs(long - short), max * minP), max * maxP);
234
+ return val.feePerBlock * (effectiveOi / max) ** val.feeExponent;
235
+ };
236
+ const getActiveFeePerBlock = (pair, group) => {
237
+ const pairFeePerBlock = getBorrowingDataActiveFeePerBlock(pair);
238
+ if (!group) {
239
+ return pairFeePerBlock;
240
+ }
241
+ const groupFeePerBlock = getBorrowingDataActiveFeePerBlock(group);
242
+ return Math.max(pairFeePerBlock, groupFeePerBlock);
243
+ };
244
+ exports.borrowingFeeUtils = {
245
+ getPairGroupAccFeesDeltas,
246
+ getPairPendingAccFees,
247
+ getPairPendingAccFee,
248
+ getGroupPendingAccFees,
249
+ getGroupPendingAccFee,
250
+ getPendingAccFees,
251
+ getActiveFeePerBlock,
252
+ getBorrowingDataActiveFeePerBlock,
253
+ getPairGroupIndex,
254
+ getPendingAccFeesDelta,
255
+ getFeePerBlockCaps,
256
+ };
257
+ exports.BorrowingFee = __importStar(require("./types"));
258
+ __exportStar(require("./converter"), exports);
259
+ __exportStar(require("./builder"), exports);
@@ -0,0 +1,36 @@
1
+ import { OpenInterest } from "../../types";
2
+ export type BorrowingData = {
3
+ feePerBlock: number;
4
+ accFeeLong: number;
5
+ accFeeShort: number;
6
+ accLastUpdatedBlock: number;
7
+ feeExponent: number;
8
+ };
9
+ export type PairGroup = {
10
+ groupIndex: number;
11
+ name?: string;
12
+ block: number;
13
+ initialAccFeeLong: number;
14
+ initialAccFeeShort: number;
15
+ prevGroupAccFeeLong: number;
16
+ prevGroupAccFeeShort: number;
17
+ pairAccFeeLong: number;
18
+ pairAccFeeShort: number;
19
+ };
20
+ export type BorrowingOi = {
21
+ oi: OpenInterest;
22
+ };
23
+ export type BorrowingFeePerBlockCap = {
24
+ minP: number;
25
+ maxP: number;
26
+ };
27
+ export type Pair = BorrowingData & BorrowingOi & {
28
+ groups: PairGroup[];
29
+ feePerBlockCap?: BorrowingFeePerBlockCap;
30
+ };
31
+ export type Group = BorrowingData & BorrowingOi;
32
+ export type InitialAccFees = {
33
+ accPairFee: number;
34
+ accGroupFee: number;
35
+ block: number;
36
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,23 @@
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
+ const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
9
+ if (!collateral?.pairBorrowingFeesV2) {
10
+ return undefined;
11
+ }
12
+ const params = collateral.pairBorrowingFeesV2.params?.[pairIndex];
13
+ const data = collateral.pairBorrowingFeesV2.data?.[pairIndex];
14
+ if (!params || !data) {
15
+ return undefined;
16
+ }
17
+ return {
18
+ params,
19
+ data,
20
+ currentTimestamp,
21
+ };
22
+ };
23
+ exports.buildBorrowingV2Context = buildBorrowingV2Context;