@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,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collateralToContractFormat = exports.priceToContractFormat = exports.fetchPairPendingAccFundingFeesBatch = exports.fetchTradeFeesDataBatch = exports.fetchTradeFeesData = exports.fetchTradeFundingFeesCollateral = exports.fetchPairPendingAccFundingFees = void 0;
4
+ /**
5
+ * @dev Fetches pending accumulated funding fees for a specific pair
6
+ * @param contract GNSMultiCollatDiamond contract instance
7
+ * @param collateralIndex Collateral index
8
+ * @param pairIndex Pair index
9
+ * @param currentPairPrice Current pair price (1e10)
10
+ * @returns Promise resolving to accumulated funding fees and current rate
11
+ */
12
+ const fetchPairPendingAccFundingFees = async (contract, collateralIndex, pairIndex, currentPairPrice) => {
13
+ try {
14
+ const result = await contract.getPairPendingAccFundingFees(collateralIndex, pairIndex, currentPairPrice);
15
+ return {
16
+ accFundingFeeLongP: Number(result.accFundingFeeLongP) / 1e20,
17
+ accFundingFeeShortP: Number(result.accFundingFeeShortP) / 1e20,
18
+ currentFundingRatePerSecondP: Number(result.currentFundingRatePerSecondP) / 1e18, // FUNDING_RATE_PER_SECOND_P precision
19
+ };
20
+ }
21
+ catch (error) {
22
+ console.error("Error fetching pair pending acc funding fees:", error);
23
+ throw error;
24
+ }
25
+ };
26
+ exports.fetchPairPendingAccFundingFees = fetchPairPendingAccFundingFees;
27
+ /**
28
+ * @dev Fetches funding fees for a specific trade in collateral tokens
29
+ * @param contract GNSMultiCollatDiamond contract instance
30
+ * @param trader Trader address
31
+ * @param index Trade index
32
+ * @param currentPairPrice Current pair price (1e10)
33
+ * @returns Promise resolving to funding fee in collateral tokens
34
+ */
35
+ const fetchTradeFundingFeesCollateral = async (contract, trader, index, currentPairPrice) => {
36
+ try {
37
+ const fundingFeeCollateral = await contract.getTradeFundingFeesCollateral(trader, index, currentPairPrice);
38
+ // Convert from BigNumber to number (collateral precision already applied)
39
+ return Number(fundingFeeCollateral);
40
+ }
41
+ catch (error) {
42
+ console.error("Error fetching trade funding fees:", error);
43
+ throw error;
44
+ }
45
+ };
46
+ exports.fetchTradeFundingFeesCollateral = fetchTradeFundingFeesCollateral;
47
+ /**
48
+ * @dev Fetches trade fees data for a specific trade
49
+ * @param contract GNSMultiCollatDiamond contract instance
50
+ * @param trader Trader address
51
+ * @param index Trade index
52
+ * @returns Promise resolving to trade fees data
53
+ */
54
+ const fetchTradeFeesData = async (contract, trader, index) => {
55
+ try {
56
+ const feesData = await contract.getTradeFeesData(trader, index);
57
+ return {
58
+ accPerOiLong: Number(feesData.initialAccFundingFeeP) / 1e20,
59
+ accPerOiShort: Number(feesData.initialAccFundingFeeP) / 1e20,
60
+ openBlock: 0, // Not available in this struct
61
+ };
62
+ }
63
+ catch (error) {
64
+ console.error("Error fetching trade fees data:", error);
65
+ throw error;
66
+ }
67
+ };
68
+ exports.fetchTradeFeesData = fetchTradeFeesData;
69
+ /**
70
+ * @dev Fetches trade fees data for multiple trades
71
+ * @param contract GNSMultiCollatDiamond contract instance
72
+ * @param traders Array of trader addresses
73
+ * @param indices Array of trade indices
74
+ * @returns Promise resolving to array of trade fees data
75
+ */
76
+ const fetchTradeFeesDataBatch = async (contract, traders, indices) => {
77
+ if (traders.length !== indices.length) {
78
+ throw new Error("Traders and indices arrays must have the same length");
79
+ }
80
+ try {
81
+ const feesDatas = await contract.getTradeFeesDataArray(traders, indices);
82
+ return feesDatas.map(feesData => ({
83
+ accPerOiLong: Number(feesData.initialAccFundingFeeP) / 1e20,
84
+ accPerOiShort: Number(feesData.initialAccFundingFeeP) / 1e20,
85
+ openBlock: 0,
86
+ }));
87
+ }
88
+ catch (error) {
89
+ console.error("Error fetching trade fees data batch:", error);
90
+ throw error;
91
+ }
92
+ };
93
+ exports.fetchTradeFeesDataBatch = fetchTradeFeesDataBatch;
94
+ /**
95
+ * @dev Fetches pending accumulated funding fees for multiple pairs
96
+ * @param contract GNSMultiCollatDiamond contract instance
97
+ * @param collateralIndices Array of collateral indices
98
+ * @param pairIndices Array of pair indices
99
+ * @param currentPairPrices Array of current pair prices (1e10)
100
+ * @returns Promise resolving to array of accumulated funding fees
101
+ */
102
+ const fetchPairPendingAccFundingFeesBatch = async (contract, collateralIndices, pairIndices, currentPairPrices) => {
103
+ if (collateralIndices.length !== pairIndices.length ||
104
+ pairIndices.length !== currentPairPrices.length) {
105
+ throw new Error("All input arrays must have the same length");
106
+ }
107
+ try {
108
+ // Fetch all in parallel
109
+ const promises = collateralIndices.map((collateralIndex, i) => contract.getPairPendingAccFundingFees(collateralIndex, pairIndices[i], currentPairPrices[i]));
110
+ const results = await Promise.all(promises);
111
+ return results.map(result => ({
112
+ accFundingFeeLongP: Number(result.accFundingFeeLongP) / 1e20,
113
+ accFundingFeeShortP: Number(result.accFundingFeeShortP) / 1e20,
114
+ currentFundingRatePerSecondP: Number(result.currentFundingRatePerSecondP) / 1e18,
115
+ }));
116
+ }
117
+ catch (error) {
118
+ console.error("Error fetching pair pending acc funding fees batch:", error);
119
+ throw error;
120
+ }
121
+ };
122
+ exports.fetchPairPendingAccFundingFeesBatch = fetchPairPendingAccFundingFeesBatch;
123
+ /**
124
+ * @dev Helper to convert price from number to contract format
125
+ * @param price Price as number
126
+ * @returns Price in contract format (1e10)
127
+ */
128
+ const priceToContractFormat = (price) => {
129
+ return BigInt(Math.round(price * 1e10));
130
+ };
131
+ exports.priceToContractFormat = priceToContractFormat;
132
+ /**
133
+ * @dev Helper to convert collateral amount to contract format
134
+ * @param amount Amount as number
135
+ * @param decimals Collateral decimals (6 for USDC, 18 for others)
136
+ * @returns Amount in contract format
137
+ */
138
+ const collateralToContractFormat = (amount, decimals) => {
139
+ return BigInt(Math.round(amount * 10 ** decimals));
140
+ };
141
+ exports.collateralToContractFormat = collateralToContractFormat;
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @dev Funding fees calculations for v10+ trades
3
+ * @dev Based on skew-based funding rate model with velocity and APR multipliers
4
+ */
5
+ import { FundingFeeParams, PairFundingFeeData, GetFundingFeeContext, TradeFundingFeeResult, PairPendingAccFundingFeesResult, PairOiAfterV10 } from "./types";
6
+ import { GetPairFundingFeeContext } from "./pairContext";
7
+ /**
8
+ * @dev Calculates current funding velocity per year based on skew
9
+ * @param netExposureToken Net exposure (long - short) in tokens
10
+ * @param netExposureUsd Net exposure in USD
11
+ * @param skewCoefficientPerYear Skew coefficient per year from params
12
+ * @param absoluteVelocityPerYearCap Cap on velocity per year
13
+ * @param thetaThresholdUsd Minimum exposure USD to start charging funding fees
14
+ * @returns Current yearly funding velocity
15
+ */
16
+ export declare const getCurrentFundingVelocityPerYear: (netExposureToken: number, netExposureUsd: number, skewCoefficientPerYear: number, absoluteVelocityPerYearCap: number, thetaThresholdUsd: number) => number;
17
+ /**
18
+ * @dev Calculates seconds until funding rate reaches zero
19
+ * @param lastFundingRatePerSecondP Last funding rate per second
20
+ * @param currentVelocityPerYear Current velocity per year
21
+ * @returns Seconds until rate reaches zero
22
+ */
23
+ export declare const getSecondsToReachZeroRate: (lastFundingRatePerSecondP: number, currentVelocityPerYear: number) => number;
24
+ /**
25
+ * @dev Calculates average and current funding rate per second
26
+ * @param lastFundingRatePerSecondP Last funding rate per second
27
+ * @param absoluteRatePerSecondCap Absolute cap on funding rate per second
28
+ * @param currentVelocityPerYear Current velocity per year
29
+ * @param secondsSinceLastUpdate Seconds elapsed since last update
30
+ * @returns Average and current funding rate per second
31
+ */
32
+ export declare const getAvgFundingRatePerSecondP: (lastFundingRatePerSecondP: number, absoluteRatePerSecondCap: number, currentVelocityPerYear: number, secondsSinceLastUpdate: number) => {
33
+ avgFundingRatePerSecondP: number;
34
+ currentFundingRatePerSecondP: number;
35
+ };
36
+ /**
37
+ * @dev Calculates APR multipliers for long and short sides based on OI ratio
38
+ * @param avgFundingRatePerSecondP Average funding rate per second
39
+ * @param pairOiLongToken Long OI in tokens
40
+ * @param pairOiShortToken Short OI in tokens
41
+ * @param aprMultiplierEnabled Whether APR multiplier is enabled
42
+ * @returns Long and short APR multipliers
43
+ */
44
+ export declare const getLongShortAprMultiplier: (avgFundingRatePerSecondP: number, pairOiLongToken: number, pairOiShortToken: number, aprMultiplierEnabled: boolean) => {
45
+ longAprMultiplier: number;
46
+ shortAprMultiplier: number;
47
+ };
48
+ /**
49
+ * @dev Calculates pending accumulated funding fees for a pair
50
+ * @param params Funding fee parameters
51
+ * @param data Current funding fee data
52
+ * @param currentPairPrice Current pair price
53
+ * @param pairOiToken Pair OI after v10
54
+ * @param netExposureToken Net exposure in tokens
55
+ * @param netExposureUsd Net exposure in USD
56
+ * @param currentTimestamp Current timestamp
57
+ * @returns Pending accumulated funding fees and current rate
58
+ */
59
+ export declare const getPairPendingAccFundingFees: (params: FundingFeeParams, data: PairFundingFeeData, currentPairPrice: number, pairOiToken: PairOiAfterV10, netExposureToken: number, netExposureUsd: number, currentTimestamp: number) => PairPendingAccFundingFeesResult;
60
+ /**
61
+ * @dev Calculates funding fees for a specific trade
62
+ * @param trade Trade parameters (collateral amount, leverage, open price, long/short)
63
+ * @param tradeInfo Trade info (contracts version)
64
+ * @param tradeFeesData Trade fees data containing initial acc funding fee
65
+ * @param currentPairPrice Current pair price
66
+ * @param context Pair-specific funding fee context
67
+ * @returns Funding fee in collateral tokens
68
+ */
69
+ export declare const getTradeFundingFeesCollateral: (trade: {
70
+ collateralAmount: number;
71
+ leverage: number;
72
+ openPrice: number;
73
+ long: boolean;
74
+ }, tradeInfo: {
75
+ contractsVersion: number;
76
+ }, tradeFeesData: {
77
+ initialAccFundingFeeP: number;
78
+ }, currentPairPrice: number, context: GetPairFundingFeeContext) => number;
79
+ /**
80
+ * @dev Main function to calculate funding fees for a trade within context
81
+ * @param input Trade funding fee input parameters
82
+ * @param context Funding fee context with params and data
83
+ * @returns Complete funding fee calculation result
84
+ */
85
+ export declare const getTradeFundingFees: (input: {
86
+ collateralIndex: number;
87
+ pairIndex: number;
88
+ trade: {
89
+ collateralAmount: number;
90
+ leverage: number;
91
+ openPrice: number;
92
+ long: boolean;
93
+ };
94
+ tradeInfo: {
95
+ contractsVersion: number;
96
+ };
97
+ initialAccFundingFeeP: number;
98
+ currentPairPrice: number;
99
+ pairOiToken: PairOiAfterV10;
100
+ netExposureToken: number;
101
+ netExposureUsd: number;
102
+ }, context: GetFundingFeeContext) => TradeFundingFeeResult;
103
+ /**
104
+ * @dev Simple version of getTradeFundingFeesCollateral for backward compatibility
105
+ * @param trade Trade parameters
106
+ * @param tradeInfo Trade info with contracts version
107
+ * @param initialAccFundingFeeP Initial accumulated funding fee
108
+ * @param currentAccFundingFeeP Current accumulated funding fee
109
+ * @returns Funding fee in collateral tokens
110
+ */
111
+ export declare const getTradeFundingFeesCollateralSimple: (trade: {
112
+ collateralAmount: number;
113
+ leverage: number;
114
+ openPrice: number;
115
+ long: boolean;
116
+ }, tradeInfo: {
117
+ contractsVersion: number;
118
+ }, initialAccFundingFeeP: number, currentAccFundingFeeP: number) => number;
119
+ export * as FundingFees from "./types";
120
+ export type { FundingFeeParams, PairFundingFeeData, PairGlobalParams, TradeInitialAccFundingFees, PairOiAfterV10, FundingRateCalculation, GetFundingFeeContext, TradeFundingFeeResult, PairPendingAccFundingFeesResult, PairAccumulatedFees, TradeInitialAccFees, } from "./types";
121
+ export type { GetPairFundingFeeContext } from "./pairContext";
122
+ export * from "./fetcher";
123
+ export * from "./pairContext";
124
+ export * from "./builder";
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Funding fees calculations for v10+ trades
4
+ * @dev Based on skew-based funding rate model with velocity and APR multipliers
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.FundingFees = exports.getTradeFundingFeesCollateralSimple = exports.getTradeFundingFees = exports.getTradeFundingFeesCollateral = exports.getPairPendingAccFundingFees = exports.getLongShortAprMultiplier = exports.getAvgFundingRatePerSecondP = exports.getSecondsToReachZeroRate = exports.getCurrentFundingVelocityPerYear = void 0;
34
+ const types_1 = require("../../../contracts/types");
35
+ // Constants from contract
36
+ const FUNDING_APR_MULTIPLIER_CAP = 100; // Smaller side can earn up to 100x more APR
37
+ const ONE_YEAR = 365 * 24 * 60 * 60; // 1 year in seconds
38
+ /**
39
+ * @dev Calculates current funding velocity per year based on skew
40
+ * @param netExposureToken Net exposure (long - short) in tokens
41
+ * @param netExposureUsd Net exposure in USD
42
+ * @param skewCoefficientPerYear Skew coefficient per year from params
43
+ * @param absoluteVelocityPerYearCap Cap on velocity per year
44
+ * @param thetaThresholdUsd Minimum exposure USD to start charging funding fees
45
+ * @returns Current yearly funding velocity
46
+ */
47
+ const getCurrentFundingVelocityPerYear = (netExposureToken, netExposureUsd, skewCoefficientPerYear, absoluteVelocityPerYearCap, thetaThresholdUsd) => {
48
+ // If no exposure or skew coefficient 0 or velocity cap 0, velocity is 0
49
+ if (netExposureToken === 0 ||
50
+ skewCoefficientPerYear === 0 ||
51
+ absoluteVelocityPerYearCap === 0) {
52
+ return 0;
53
+ }
54
+ // Check theta threshold
55
+ const absNetExposureUsd = Math.abs(netExposureUsd);
56
+ if (absNetExposureUsd < thetaThresholdUsd) {
57
+ return 0;
58
+ }
59
+ // Calculate absolute velocity
60
+ const absoluteVelocityPerYear = Math.abs(netExposureToken) * skewCoefficientPerYear;
61
+ // Apply cap
62
+ const cappedAbsoluteVelocity = Math.min(absoluteVelocityPerYear, absoluteVelocityPerYearCap);
63
+ // Return with proper sign
64
+ return netExposureToken < 0
65
+ ? -cappedAbsoluteVelocity
66
+ : cappedAbsoluteVelocity;
67
+ };
68
+ exports.getCurrentFundingVelocityPerYear = getCurrentFundingVelocityPerYear;
69
+ /**
70
+ * @dev Calculates seconds until funding rate reaches zero
71
+ * @param lastFundingRatePerSecondP Last funding rate per second
72
+ * @param currentVelocityPerYear Current velocity per year
73
+ * @returns Seconds until rate reaches zero
74
+ */
75
+ const getSecondsToReachZeroRate = (lastFundingRatePerSecondP, currentVelocityPerYear) => {
76
+ if (currentVelocityPerYear === 0) {
77
+ throw new Error("Velocity cannot be zero when calculating time to reach zero rate");
78
+ }
79
+ const secondsToReachZeroRate = (-lastFundingRatePerSecondP * ONE_YEAR) / currentVelocityPerYear;
80
+ if (secondsToReachZeroRate < 0) {
81
+ throw new Error("Invalid calculation: seconds to reach zero rate cannot be negative");
82
+ }
83
+ return secondsToReachZeroRate;
84
+ };
85
+ exports.getSecondsToReachZeroRate = getSecondsToReachZeroRate;
86
+ /**
87
+ * @dev Calculates average and current funding rate per second
88
+ * @param lastFundingRatePerSecondP Last funding rate per second
89
+ * @param absoluteRatePerSecondCap Absolute cap on funding rate per second
90
+ * @param currentVelocityPerYear Current velocity per year
91
+ * @param secondsSinceLastUpdate Seconds elapsed since last update
92
+ * @returns Average and current funding rate per second
93
+ */
94
+ const getAvgFundingRatePerSecondP = (lastFundingRatePerSecondP, absoluteRatePerSecondCap, currentVelocityPerYear, secondsSinceLastUpdate) => {
95
+ // If cap is 0, there are no funding fees
96
+ if (absoluteRatePerSecondCap === 0) {
97
+ return { avgFundingRatePerSecondP: 0, currentFundingRatePerSecondP: 0 };
98
+ }
99
+ // If velocity is 0 or no time elapsed, funding rate is still the same
100
+ if (currentVelocityPerYear === 0 || secondsSinceLastUpdate === 0) {
101
+ return {
102
+ avgFundingRatePerSecondP: lastFundingRatePerSecondP,
103
+ currentFundingRatePerSecondP: lastFundingRatePerSecondP,
104
+ };
105
+ }
106
+ const ratePerSecondCap = absoluteRatePerSecondCap * (currentVelocityPerYear < 0 ? -1 : 1);
107
+ // If rate is already at cap, just return it
108
+ if (ratePerSecondCap === lastFundingRatePerSecondP) {
109
+ return {
110
+ avgFundingRatePerSecondP: ratePerSecondCap,
111
+ currentFundingRatePerSecondP: ratePerSecondCap,
112
+ };
113
+ }
114
+ const secondsToReachCap = ((ratePerSecondCap - lastFundingRatePerSecondP) * ONE_YEAR) /
115
+ currentVelocityPerYear;
116
+ if (secondsSinceLastUpdate > secondsToReachCap) {
117
+ // Rate reached cap during this period
118
+ const currentFundingRatePerSecondP = ratePerSecondCap;
119
+ // Weighted average: time to cap at average rate + time at cap
120
+ const avgFundingRatePerSecondP_1 = (lastFundingRatePerSecondP + ratePerSecondCap) / 2;
121
+ const avgFundingRatePerSecondP = (avgFundingRatePerSecondP_1 * secondsToReachCap +
122
+ ratePerSecondCap * (secondsSinceLastUpdate - secondsToReachCap)) /
123
+ secondsSinceLastUpdate;
124
+ return { avgFundingRatePerSecondP, currentFundingRatePerSecondP };
125
+ }
126
+ else {
127
+ // Rate didn't reach cap
128
+ const currentFundingRatePerSecondP = lastFundingRatePerSecondP +
129
+ (secondsSinceLastUpdate * currentVelocityPerYear) / ONE_YEAR;
130
+ const avgFundingRatePerSecondP = (lastFundingRatePerSecondP + currentFundingRatePerSecondP) / 2;
131
+ return { avgFundingRatePerSecondP, currentFundingRatePerSecondP };
132
+ }
133
+ };
134
+ exports.getAvgFundingRatePerSecondP = getAvgFundingRatePerSecondP;
135
+ /**
136
+ * @dev Calculates APR multipliers for long and short sides based on OI ratio
137
+ * @param avgFundingRatePerSecondP Average funding rate per second
138
+ * @param pairOiLongToken Long OI in tokens
139
+ * @param pairOiShortToken Short OI in tokens
140
+ * @param aprMultiplierEnabled Whether APR multiplier is enabled
141
+ * @returns Long and short APR multipliers
142
+ */
143
+ const getLongShortAprMultiplier = (avgFundingRatePerSecondP, pairOiLongToken, pairOiShortToken, aprMultiplierEnabled) => {
144
+ // If funding rate is 0, multipliers don't matter
145
+ if (avgFundingRatePerSecondP === 0) {
146
+ return { longAprMultiplier: 1, shortAprMultiplier: 1 };
147
+ }
148
+ const longsEarned = avgFundingRatePerSecondP < 0;
149
+ let longAprMultiplier = 1;
150
+ let shortAprMultiplier = 1;
151
+ if (aprMultiplierEnabled) {
152
+ if (longsEarned && pairOiLongToken > 0) {
153
+ longAprMultiplier = pairOiShortToken / pairOiLongToken;
154
+ }
155
+ else if (!longsEarned && pairOiShortToken > 0) {
156
+ shortAprMultiplier = pairOiLongToken / pairOiShortToken;
157
+ }
158
+ // Apply cap
159
+ longAprMultiplier = Math.min(longAprMultiplier, FUNDING_APR_MULTIPLIER_CAP);
160
+ shortAprMultiplier = Math.min(shortAprMultiplier, FUNDING_APR_MULTIPLIER_CAP);
161
+ }
162
+ return { longAprMultiplier, shortAprMultiplier };
163
+ };
164
+ exports.getLongShortAprMultiplier = getLongShortAprMultiplier;
165
+ /**
166
+ * @dev Calculates pending accumulated funding fees for a pair
167
+ * @param params Funding fee parameters
168
+ * @param data Current funding fee data
169
+ * @param currentPairPrice Current pair price
170
+ * @param pairOiToken Pair OI after v10
171
+ * @param netExposureToken Net exposure in tokens
172
+ * @param netExposureUsd Net exposure in USD
173
+ * @param currentTimestamp Current timestamp
174
+ * @returns Pending accumulated funding fees and current rate
175
+ */
176
+ const getPairPendingAccFundingFees = (params, data, currentPairPrice, pairOiToken, netExposureToken, netExposureUsd, currentTimestamp) => {
177
+ let accFundingFeeLongP = data.accFundingFeeLongP;
178
+ let accFundingFeeShortP = data.accFundingFeeShortP;
179
+ // If funding fees are disabled, return current values
180
+ if (!params.fundingFeesEnabled) {
181
+ return {
182
+ accFundingFeeLongP,
183
+ accFundingFeeShortP,
184
+ currentFundingRatePerSecondP: data.lastFundingRatePerSecondP,
185
+ };
186
+ }
187
+ const secondsSinceLastUpdate = currentTimestamp - data.lastFundingUpdateTs;
188
+ // Calculate current velocity
189
+ const currentVelocityPerYear = (0, exports.getCurrentFundingVelocityPerYear)(netExposureToken, netExposureUsd, params.skewCoefficientPerYear, params.absoluteVelocityPerYearCap, params.thetaThresholdUsd);
190
+ // Get average and current funding rates
191
+ const { avgFundingRatePerSecondP, currentFundingRatePerSecondP } = (0, exports.getAvgFundingRatePerSecondP)(data.lastFundingRatePerSecondP, params.absoluteRatePerSecondCap, currentVelocityPerYear, secondsSinceLastUpdate);
192
+ // Check if we need to handle rate sign change
193
+ const rateChangedSign = params.aprMultiplierEnabled &&
194
+ ((currentFundingRatePerSecondP > 0 && data.lastFundingRatePerSecondP < 0) ||
195
+ (currentFundingRatePerSecondP < 0 && data.lastFundingRatePerSecondP > 0));
196
+ if (rateChangedSign) {
197
+ // Split calculation into two periods: before and after sign change
198
+ // 1. From last update to rate = 0
199
+ const secondsToReachZeroRate = (0, exports.getSecondsToReachZeroRate)(data.lastFundingRatePerSecondP, currentVelocityPerYear);
200
+ const avgFundingRatePerSecondP_1 = data.lastFundingRatePerSecondP / 2;
201
+ const fundingFeesDeltaP_1 = avgFundingRatePerSecondP_1 * secondsToReachZeroRate * currentPairPrice;
202
+ const { longAprMultiplier: longMultiplier1, shortAprMultiplier: shortMultiplier1, } = (0, exports.getLongShortAprMultiplier)(avgFundingRatePerSecondP_1, pairOiToken.oiLongToken, pairOiToken.oiShortToken, true);
203
+ accFundingFeeLongP += fundingFeesDeltaP_1 * longMultiplier1;
204
+ accFundingFeeShortP -= fundingFeesDeltaP_1 * shortMultiplier1;
205
+ // 2. From rate = 0 to current rate
206
+ const avgFundingRatePerSecondP_2 = currentFundingRatePerSecondP / 2;
207
+ const fundingFeesDeltaP_2 = avgFundingRatePerSecondP_2 *
208
+ (secondsSinceLastUpdate - secondsToReachZeroRate) *
209
+ currentPairPrice;
210
+ const { longAprMultiplier: longMultiplier2, shortAprMultiplier: shortMultiplier2, } = (0, exports.getLongShortAprMultiplier)(avgFundingRatePerSecondP_2, pairOiToken.oiLongToken, pairOiToken.oiShortToken, true);
211
+ accFundingFeeLongP += fundingFeesDeltaP_2 * longMultiplier2;
212
+ accFundingFeeShortP -= fundingFeesDeltaP_2 * shortMultiplier2;
213
+ }
214
+ else {
215
+ // Single period calculation
216
+ const fundingFeesDeltaP = avgFundingRatePerSecondP * secondsSinceLastUpdate * currentPairPrice;
217
+ const { longAprMultiplier, shortAprMultiplier } = (0, exports.getLongShortAprMultiplier)(avgFundingRatePerSecondP, pairOiToken.oiLongToken, pairOiToken.oiShortToken, params.aprMultiplierEnabled);
218
+ accFundingFeeLongP += fundingFeesDeltaP * longAprMultiplier;
219
+ accFundingFeeShortP -= fundingFeesDeltaP * shortAprMultiplier;
220
+ }
221
+ return {
222
+ accFundingFeeLongP,
223
+ accFundingFeeShortP,
224
+ currentFundingRatePerSecondP,
225
+ };
226
+ };
227
+ exports.getPairPendingAccFundingFees = getPairPendingAccFundingFees;
228
+ /**
229
+ * @dev Calculates funding fees for a specific trade
230
+ * @param trade Trade parameters (collateral amount, leverage, open price, long/short)
231
+ * @param tradeInfo Trade info (contracts version)
232
+ * @param tradeFeesData Trade fees data containing initial acc funding fee
233
+ * @param currentPairPrice Current pair price
234
+ * @param context Pair-specific funding fee context
235
+ * @returns Funding fee in collateral tokens
236
+ */
237
+ const getTradeFundingFeesCollateral = (trade, tradeInfo, tradeFeesData, currentPairPrice, context) => {
238
+ if (tradeInfo.contractsVersion < types_1.ContractsVersion.V10) {
239
+ return 0;
240
+ }
241
+ context.netExposureUsd = (context.netExposureToken || 0) * currentPairPrice;
242
+ const positionSizeCollateral = trade.collateralAmount * trade.leverage;
243
+ if (!context.params.fundingFeesEnabled) {
244
+ return 0;
245
+ }
246
+ // Calculate pending accumulated fees
247
+ const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(context.params, context.data, currentPairPrice, context.pairOi || { oiLongToken: 0, oiShortToken: 0 }, context.netExposureToken || 0, context.netExposureUsd || 0, context.currentTimestamp);
248
+ const currentAccFundingFeeP = trade.long
249
+ ? accFundingFeeLongP
250
+ : accFundingFeeShortP;
251
+ const fundingFeeDelta = currentAccFundingFeeP - tradeFeesData.initialAccFundingFeeP;
252
+ return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice / 100;
253
+ };
254
+ exports.getTradeFundingFeesCollateral = getTradeFundingFeesCollateral;
255
+ /**
256
+ * @dev Main function to calculate funding fees for a trade within context
257
+ * @param input Trade funding fee input parameters
258
+ * @param context Funding fee context with params and data
259
+ * @returns Complete funding fee calculation result
260
+ */
261
+ const getTradeFundingFees = (input, context) => {
262
+ // Get params and data from context
263
+ const params = context.fundingParams[input.collateralIndex]?.[input.pairIndex];
264
+ const data = context.fundingData[input.collateralIndex]?.[input.pairIndex];
265
+ if (!params || !data) {
266
+ throw new Error(`Missing funding fee data for collateral ${input.collateralIndex} pair ${input.pairIndex}`);
267
+ }
268
+ // Calculate pending accumulated fees
269
+ const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(params, data, input.currentPairPrice, input.pairOiToken, input.netExposureToken, input.netExposureUsd, context.currentTimestamp);
270
+ const currentAccFundingFeeP = input.trade.long
271
+ ? accFundingFeeLongP
272
+ : accFundingFeeShortP;
273
+ // Calculate funding fee in collateral
274
+ const fundingFeeCollateral = (0, exports.getTradeFundingFeesCollateralSimple)(input.trade, input.tradeInfo, input.initialAccFundingFeeP, currentAccFundingFeeP);
275
+ // Calculate funding fee as percentage
276
+ const fundingFeeP = input.trade.collateralAmount > 0
277
+ ? (fundingFeeCollateral / input.trade.collateralAmount) * 100
278
+ : 0;
279
+ return {
280
+ fundingFeeCollateral,
281
+ fundingFeeP,
282
+ currentAccFundingFeeP,
283
+ initialAccFundingFeeP: input.initialAccFundingFeeP,
284
+ };
285
+ };
286
+ exports.getTradeFundingFees = getTradeFundingFees;
287
+ /**
288
+ * @dev Simple version of getTradeFundingFeesCollateral for backward compatibility
289
+ * @param trade Trade parameters
290
+ * @param tradeInfo Trade info with contracts version
291
+ * @param initialAccFundingFeeP Initial accumulated funding fee
292
+ * @param currentAccFundingFeeP Current accumulated funding fee
293
+ * @returns Funding fee in collateral tokens
294
+ */
295
+ const getTradeFundingFeesCollateralSimple = (trade, tradeInfo, initialAccFundingFeeP, currentAccFundingFeeP) => {
296
+ // Funding fees are only charged on post-v10 trades
297
+ if (tradeInfo.contractsVersion < types_1.ContractsVersion.V10) {
298
+ return 0;
299
+ }
300
+ const positionSizeCollateral = trade.collateralAmount * trade.leverage;
301
+ const fundingFeeDelta = currentAccFundingFeeP - initialAccFundingFeeP;
302
+ return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice / 100;
303
+ };
304
+ exports.getTradeFundingFeesCollateralSimple = getTradeFundingFeesCollateralSimple;
305
+ // Export namespace for types
306
+ exports.FundingFees = __importStar(require("./types"));
307
+ __exportStar(require("./fetcher"), exports);
308
+ __exportStar(require("./pairContext"), exports);
309
+ __exportStar(require("./builder"), exports);
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @dev Pair-specific funding fee types and utilities
3
+ */
4
+ import { FundingFeeParams, PairFundingFeeData, PairGlobalParams, PairOiAfterV10, PairPendingAccFundingFeesResult } from "./types";
5
+ /**
6
+ * @dev Context for pair-specific funding fee calculations
7
+ */
8
+ export type GetPairFundingFeeContext = {
9
+ currentTimestamp: number;
10
+ params: FundingFeeParams;
11
+ data: PairFundingFeeData;
12
+ globalParams?: PairGlobalParams;
13
+ pairOi?: PairOiAfterV10;
14
+ netExposureToken?: number;
15
+ netExposureUsd?: number;
16
+ };
17
+ /**
18
+ * @dev Input for pair-specific trade funding fee calculation
19
+ */
20
+ export type PairTradeFundingFeeInput = {
21
+ positionSizeCollateral: number;
22
+ openPrice: number;
23
+ long: boolean;
24
+ currentPairPrice: number;
25
+ initialAccFundingFeeP: number;
26
+ };
27
+ /**
28
+ * @dev Calculate pending accumulated funding fees for a pair using pair-specific context
29
+ * @param currentPairPrice Current price of the pair
30
+ * @param context Pair-specific funding context
31
+ * @returns Pending accumulated funding fees
32
+ */
33
+ export declare const getPairPendingAccFundingFees: (currentPairPrice: number, context: GetPairFundingFeeContext) => PairPendingAccFundingFeesResult;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Pair-specific funding fee types and utilities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPairPendingAccFundingFees = void 0;
7
+ const index_1 = require("./index");
8
+ /**
9
+ * @dev Calculate pending accumulated funding fees for a pair using pair-specific context
10
+ * @param currentPairPrice Current price of the pair
11
+ * @param context Pair-specific funding context
12
+ * @returns Pending accumulated funding fees
13
+ */
14
+ const getPairPendingAccFundingFees = (currentPairPrice, context) => {
15
+ return (0, index_1.getPairPendingAccFundingFees)(context.params, context.data, currentPairPrice, context.pairOi || { oiLongToken: 0, oiShortToken: 0 }, context.netExposureToken || 0, context.netExposureUsd || 0, context.currentTimestamp);
16
+ };
17
+ exports.getPairPendingAccFundingFees = getPairPendingAccFundingFees;