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

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 (176) 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 +2 -0
  4. package/lib/backend/index.js +18 -0
  5. package/lib/backend/tradingVariables/backend.types.d.ts +312 -0
  6. package/lib/backend/tradingVariables/backend.types.js +2 -0
  7. package/lib/backend/tradingVariables/converter.d.ts +30 -0
  8. package/lib/backend/tradingVariables/converter.js +329 -0
  9. package/lib/backend/tradingVariables/index.d.ts +3 -0
  10. package/lib/backend/tradingVariables/index.js +78 -0
  11. package/lib/backend/tradingVariables/types.d.ts +109 -0
  12. package/lib/backend/tradingVariables/types.js +14 -0
  13. package/lib/constants.d.ts +8 -1
  14. package/lib/constants.js +8 -1
  15. package/lib/contracts/fetch/fees/borrowingFeesV2.d.ts +75 -0
  16. package/lib/contracts/fetch/fees/borrowingFeesV2.js +193 -0
  17. package/lib/contracts/fetch/fees/fundingFees.d.ts +66 -0
  18. package/lib/contracts/fetch/fees/fundingFees.js +150 -0
  19. package/lib/contracts/fetch/priceImpact/skew.d.ts +63 -0
  20. package/lib/contracts/fetch/priceImpact/skew.js +168 -0
  21. package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
  22. package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
  23. package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
  24. package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
  25. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
  26. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
  27. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
  28. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
  29. package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -0
  30. package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -0
  31. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.d.ts +613 -0
  32. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.js +2 -0
  33. package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
  34. package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
  35. package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
  36. package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -0
  37. package/lib/contracts/types/generated/GNSTrading.d.ts +758 -0
  38. package/lib/contracts/types/generated/GNSTrading.js +2 -0
  39. package/lib/contracts/types/generated/GNSTradingCallbacks.d.ts +875 -0
  40. package/lib/contracts/types/generated/GNSTradingCallbacks.js +2 -0
  41. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.d.ts +806 -0
  42. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.js +2 -0
  43. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.d.ts +821 -0
  44. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.js +2 -0
  45. package/lib/contracts/types/generated/GNSTradingStorage.d.ts +1387 -0
  46. package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
  47. package/lib/contracts/types/generated/GTokenV6_3_2.d.ts +1838 -0
  48. package/lib/contracts/types/generated/GTokenV6_3_2.js +2 -0
  49. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
  50. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
  51. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
  52. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
  53. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
  54. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
  55. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
  56. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
  57. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
  58. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
  59. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
  60. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
  61. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
  62. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
  63. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
  64. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
  65. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
  66. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
  67. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
  68. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
  69. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
  70. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
  71. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
  72. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
  73. package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
  74. package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
  75. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
  76. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -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/openTrades.d.ts +1 -0
  80. package/lib/contracts/utils/openTrades.js +94 -56
  81. package/lib/contracts/utils/pairs.js +7 -0
  82. package/lib/index.d.ts +1 -0
  83. package/lib/index.js +1 -0
  84. package/lib/markets/collateral/converter.d.ts +5 -0
  85. package/lib/markets/collateral/converter.js +11 -0
  86. package/lib/markets/collateral/index.d.ts +1 -0
  87. package/lib/markets/collateral/index.js +17 -0
  88. package/lib/markets/collateral/types.d.ts +7 -0
  89. package/lib/markets/collateral/types.js +2 -0
  90. package/lib/markets/index.d.ts +2 -0
  91. package/lib/markets/index.js +2 -0
  92. package/lib/markets/oi/converter.d.ts +63 -0
  93. package/lib/markets/oi/converter.js +103 -0
  94. package/lib/markets/oi/fetcher.d.ts +58 -0
  95. package/lib/markets/oi/fetcher.js +181 -0
  96. package/lib/markets/oi/index.d.ts +10 -0
  97. package/lib/markets/oi/index.js +37 -0
  98. package/lib/markets/oi/types.d.ts +82 -0
  99. package/lib/markets/oi/types.js +6 -0
  100. package/lib/markets/oi/validation.d.ts +80 -0
  101. package/lib/markets/oi/validation.js +172 -0
  102. package/lib/trade/fees/borrowing/index.d.ts +22 -1
  103. package/lib/trade/fees/borrowing/index.js +39 -13
  104. package/lib/trade/fees/borrowingV2/converter.d.ts +66 -0
  105. package/lib/trade/fees/borrowingV2/converter.js +121 -0
  106. package/lib/trade/fees/borrowingV2/fetcher.d.ts +75 -0
  107. package/lib/trade/fees/borrowingV2/fetcher.js +193 -0
  108. package/lib/trade/fees/borrowingV2/index.d.ts +60 -0
  109. package/lib/trade/fees/borrowingV2/index.js +140 -0
  110. package/lib/trade/fees/borrowingV2/types.d.ts +79 -0
  111. package/lib/trade/fees/borrowingV2/types.js +5 -0
  112. package/lib/trade/fees/converter.d.ts +48 -0
  113. package/lib/trade/fees/converter.js +110 -0
  114. package/lib/trade/fees/fundingFees/converter.d.ts +102 -0
  115. package/lib/trade/fees/fundingFees/converter.js +196 -0
  116. package/lib/trade/fees/fundingFees/fetcher.d.ts +66 -0
  117. package/lib/trade/fees/fundingFees/fetcher.js +150 -0
  118. package/lib/trade/fees/fundingFees/index.d.ts +136 -0
  119. package/lib/trade/fees/fundingFees/index.js +326 -0
  120. package/lib/trade/fees/fundingFees/types.d.ts +77 -0
  121. package/lib/trade/fees/fundingFees/types.js +5 -0
  122. package/lib/trade/fees/index.d.ts +7 -2
  123. package/lib/trade/fees/index.js +67 -16
  124. package/lib/trade/fees/tiers/converter.d.ts +54 -0
  125. package/lib/trade/fees/tiers/converter.js +81 -0
  126. package/lib/trade/fees/tiers/index.d.ts +18 -0
  127. package/lib/trade/fees/tiers/index.js +45 -1
  128. package/lib/trade/fees/trading/converter.d.ts +30 -0
  129. package/lib/trade/fees/trading/converter.js +43 -0
  130. package/lib/trade/fees/trading/index.d.ts +54 -0
  131. package/lib/trade/fees/trading/index.js +147 -0
  132. package/lib/trade/fees/trading/types.d.ts +48 -0
  133. package/lib/trade/fees/trading/types.js +5 -0
  134. package/lib/trade/index.d.ts +3 -2
  135. package/lib/trade/index.js +3 -2
  136. package/lib/trade/liquidation/converter.d.ts +23 -0
  137. package/lib/trade/liquidation/converter.js +46 -0
  138. package/lib/trade/liquidation/index.d.ts +31 -0
  139. package/lib/trade/liquidation/index.js +187 -0
  140. package/lib/trade/liquidation/types.d.ts +44 -0
  141. package/lib/trade/liquidation/types.js +2 -0
  142. package/lib/trade/pnl/converter.d.ts +47 -0
  143. package/lib/trade/pnl/converter.js +72 -0
  144. package/lib/trade/pnl/index.d.ts +86 -0
  145. package/lib/trade/pnl/index.js +201 -0
  146. package/lib/trade/pnl/types.d.ts +86 -0
  147. package/lib/trade/pnl/types.js +5 -0
  148. package/lib/trade/priceImpact/close/index.d.ts +21 -0
  149. package/lib/trade/priceImpact/close/index.js +131 -0
  150. package/lib/trade/priceImpact/close/types.d.ts +43 -0
  151. package/lib/trade/priceImpact/close/types.js +5 -0
  152. package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
  153. package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
  154. package/lib/trade/priceImpact/cumulVol/index.d.ts +107 -0
  155. package/lib/trade/priceImpact/cumulVol/index.js +228 -0
  156. package/lib/trade/priceImpact/index.d.ts +12 -0
  157. package/lib/trade/priceImpact/index.js +59 -0
  158. package/lib/trade/priceImpact/open/index.d.ts +22 -0
  159. package/lib/trade/priceImpact/open/index.js +76 -0
  160. package/lib/trade/priceImpact/open/types.d.ts +41 -0
  161. package/lib/trade/priceImpact/open/types.js +5 -0
  162. package/lib/trade/priceImpact/skew/converter.d.ts +77 -0
  163. package/lib/trade/priceImpact/skew/converter.js +171 -0
  164. package/lib/trade/priceImpact/skew/fetcher.d.ts +63 -0
  165. package/lib/trade/priceImpact/skew/fetcher.js +168 -0
  166. package/lib/trade/priceImpact/skew/index.d.ts +58 -0
  167. package/lib/trade/priceImpact/skew/index.js +179 -0
  168. package/lib/trade/priceImpact/skew/types.d.ts +55 -0
  169. package/lib/trade/priceImpact/skew/types.js +5 -0
  170. package/lib/trade/spread.d.ts +5 -18
  171. package/lib/trade/spread.js +17 -106
  172. package/lib/trade/types.d.ts +34 -9
  173. package/lib/trade/types.js +7 -0
  174. package/lib/trade/utils.d.ts +18 -0
  175. package/lib/trade/utils.js +30 -0
  176. package/package.json +2 -1
@@ -0,0 +1,326 @@
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
+ // Constants from contract
35
+ const FUNDING_APR_MULTIPLIER_CAP = 100; // Smaller side can earn up to 100x more APR
36
+ const ONE_YEAR = 365 * 24 * 60 * 60; // 1 year in seconds
37
+ /**
38
+ * @dev Calculates current funding velocity per year based on skew
39
+ * @param netExposureToken Net exposure (long - short) in tokens
40
+ * @param netExposureUsd Net exposure in USD
41
+ * @param skewCoefficientPerYear Skew coefficient per year from params
42
+ * @param absoluteVelocityPerYearCap Cap on velocity per year
43
+ * @param thetaThresholdUsd Minimum exposure USD to start charging funding fees
44
+ * @returns Current yearly funding velocity
45
+ */
46
+ const getCurrentFundingVelocityPerYear = (netExposureToken, netExposureUsd, skewCoefficientPerYear, absoluteVelocityPerYearCap, thetaThresholdUsd) => {
47
+ // If no exposure or skew coefficient 0 or velocity cap 0, velocity is 0
48
+ if (netExposureToken === 0 ||
49
+ skewCoefficientPerYear === 0 ||
50
+ absoluteVelocityPerYearCap === 0) {
51
+ return 0;
52
+ }
53
+ // Check theta threshold
54
+ const absNetExposureUsd = Math.abs(netExposureUsd);
55
+ if (absNetExposureUsd < thetaThresholdUsd) {
56
+ return 0;
57
+ }
58
+ // Calculate absolute velocity
59
+ const absoluteVelocityPerYear = Math.abs(netExposureToken) * skewCoefficientPerYear;
60
+ // Apply cap
61
+ const cappedAbsoluteVelocity = Math.min(absoluteVelocityPerYear, absoluteVelocityPerYearCap);
62
+ // Return with proper sign
63
+ return netExposureToken < 0
64
+ ? -cappedAbsoluteVelocity
65
+ : cappedAbsoluteVelocity;
66
+ };
67
+ exports.getCurrentFundingVelocityPerYear = getCurrentFundingVelocityPerYear;
68
+ /**
69
+ * @dev Calculates seconds until funding rate reaches zero
70
+ * @param lastFundingRatePerSecondP Last funding rate per second
71
+ * @param currentVelocityPerYear Current velocity per year
72
+ * @returns Seconds until rate reaches zero
73
+ */
74
+ const getSecondsToReachZeroRate = (lastFundingRatePerSecondP, currentVelocityPerYear) => {
75
+ if (currentVelocityPerYear === 0) {
76
+ throw new Error("Velocity cannot be zero when calculating time to reach zero rate");
77
+ }
78
+ const secondsToReachZeroRate = (-lastFundingRatePerSecondP * ONE_YEAR) / currentVelocityPerYear;
79
+ if (secondsToReachZeroRate < 0) {
80
+ throw new Error("Invalid calculation: seconds to reach zero rate cannot be negative");
81
+ }
82
+ return secondsToReachZeroRate;
83
+ };
84
+ exports.getSecondsToReachZeroRate = getSecondsToReachZeroRate;
85
+ /**
86
+ * @dev Calculates average and current funding rate per second
87
+ * @param lastFundingRatePerSecondP Last funding rate per second
88
+ * @param absoluteRatePerSecondCap Absolute cap on funding rate per second
89
+ * @param currentVelocityPerYear Current velocity per year
90
+ * @param secondsSinceLastUpdate Seconds elapsed since last update
91
+ * @returns Average and current funding rate per second
92
+ */
93
+ const getAvgFundingRatePerSecondP = (lastFundingRatePerSecondP, absoluteRatePerSecondCap, currentVelocityPerYear, secondsSinceLastUpdate) => {
94
+ // If cap is 0, there are no funding fees
95
+ if (absoluteRatePerSecondCap === 0) {
96
+ return { avgFundingRatePerSecondP: 0, currentFundingRatePerSecondP: 0 };
97
+ }
98
+ // If velocity is 0 or no time elapsed, funding rate is still the same
99
+ if (currentVelocityPerYear === 0 || secondsSinceLastUpdate === 0) {
100
+ return {
101
+ avgFundingRatePerSecondP: lastFundingRatePerSecondP,
102
+ currentFundingRatePerSecondP: lastFundingRatePerSecondP,
103
+ };
104
+ }
105
+ const ratePerSecondCap = absoluteRatePerSecondCap * (currentVelocityPerYear < 0 ? -1 : 1);
106
+ // If rate is already at cap, just return it
107
+ if (ratePerSecondCap === lastFundingRatePerSecondP) {
108
+ return {
109
+ avgFundingRatePerSecondP: ratePerSecondCap,
110
+ currentFundingRatePerSecondP: ratePerSecondCap,
111
+ };
112
+ }
113
+ const secondsToReachCap = ((ratePerSecondCap - lastFundingRatePerSecondP) * ONE_YEAR) /
114
+ currentVelocityPerYear;
115
+ if (secondsSinceLastUpdate > secondsToReachCap) {
116
+ // Rate reached cap during this period
117
+ const currentFundingRatePerSecondP = ratePerSecondCap;
118
+ // Weighted average: time to cap at average rate + time at cap
119
+ const avgFundingRatePerSecondP_1 = (lastFundingRatePerSecondP + ratePerSecondCap) / 2;
120
+ const avgFundingRatePerSecondP = (avgFundingRatePerSecondP_1 * secondsToReachCap +
121
+ ratePerSecondCap * (secondsSinceLastUpdate - secondsToReachCap)) /
122
+ secondsSinceLastUpdate;
123
+ return { avgFundingRatePerSecondP, currentFundingRatePerSecondP };
124
+ }
125
+ else {
126
+ // Rate didn't reach cap
127
+ const currentFundingRatePerSecondP = lastFundingRatePerSecondP +
128
+ (secondsSinceLastUpdate * currentVelocityPerYear) / ONE_YEAR;
129
+ const avgFundingRatePerSecondP = (lastFundingRatePerSecondP + currentFundingRatePerSecondP) / 2;
130
+ return { avgFundingRatePerSecondP, currentFundingRatePerSecondP };
131
+ }
132
+ };
133
+ exports.getAvgFundingRatePerSecondP = getAvgFundingRatePerSecondP;
134
+ /**
135
+ * @dev Calculates APR multipliers for long and short sides based on OI ratio
136
+ * @param avgFundingRatePerSecondP Average funding rate per second
137
+ * @param pairOiLongToken Long OI in tokens
138
+ * @param pairOiShortToken Short OI in tokens
139
+ * @param aprMultiplierEnabled Whether APR multiplier is enabled
140
+ * @returns Long and short APR multipliers
141
+ */
142
+ const getLongShortAprMultiplier = (avgFundingRatePerSecondP, pairOiLongToken, pairOiShortToken, aprMultiplierEnabled) => {
143
+ // If funding rate is 0, multipliers don't matter
144
+ if (avgFundingRatePerSecondP === 0) {
145
+ return { longAprMultiplier: 1, shortAprMultiplier: 1 };
146
+ }
147
+ const longsEarned = avgFundingRatePerSecondP < 0;
148
+ let longAprMultiplier = 1;
149
+ let shortAprMultiplier = 1;
150
+ if (aprMultiplierEnabled) {
151
+ if (longsEarned && pairOiLongToken > 0) {
152
+ longAprMultiplier = pairOiShortToken / pairOiLongToken;
153
+ }
154
+ else if (!longsEarned && pairOiShortToken > 0) {
155
+ shortAprMultiplier = pairOiLongToken / pairOiShortToken;
156
+ }
157
+ // Apply cap
158
+ longAprMultiplier = Math.min(longAprMultiplier, FUNDING_APR_MULTIPLIER_CAP);
159
+ shortAprMultiplier = Math.min(shortAprMultiplier, FUNDING_APR_MULTIPLIER_CAP);
160
+ }
161
+ return { longAprMultiplier, shortAprMultiplier };
162
+ };
163
+ exports.getLongShortAprMultiplier = getLongShortAprMultiplier;
164
+ /**
165
+ * @dev Calculates pending accumulated funding fees for a pair
166
+ * @param params Funding fee parameters
167
+ * @param data Current funding fee data
168
+ * @param currentPairPrice Current pair price
169
+ * @param pairOiToken Pair OI after v10
170
+ * @param netExposureToken Net exposure in tokens
171
+ * @param netExposureUsd Net exposure in USD
172
+ * @param currentTimestamp Current timestamp
173
+ * @returns Pending accumulated funding fees and current rate
174
+ */
175
+ const getPairPendingAccFundingFees = (params, data, currentPairPrice, pairOiToken, netExposureToken, netExposureUsd, currentTimestamp) => {
176
+ let accFundingFeeLongP = data.accFundingFeeLongP;
177
+ let accFundingFeeShortP = data.accFundingFeeShortP;
178
+ // If funding fees are disabled, return current values
179
+ if (!params.fundingFeesEnabled) {
180
+ return {
181
+ accFundingFeeLongP,
182
+ accFundingFeeShortP,
183
+ currentFundingRatePerSecondP: data.lastFundingRatePerSecondP,
184
+ };
185
+ }
186
+ const secondsSinceLastUpdate = currentTimestamp - data.lastFundingUpdateTs;
187
+ // Calculate current velocity
188
+ const currentVelocityPerYear = (0, exports.getCurrentFundingVelocityPerYear)(netExposureToken, netExposureUsd, params.skewCoefficientPerYear, params.absoluteVelocityPerYearCap, params.thetaThresholdUsd);
189
+ // Get average and current funding rates
190
+ const { avgFundingRatePerSecondP, currentFundingRatePerSecondP } = (0, exports.getAvgFundingRatePerSecondP)(data.lastFundingRatePerSecondP, params.absoluteRatePerSecondCap, currentVelocityPerYear, secondsSinceLastUpdate);
191
+ // Check if we need to handle rate sign change
192
+ const rateChangedSign = params.aprMultiplierEnabled &&
193
+ ((currentFundingRatePerSecondP > 0 && data.lastFundingRatePerSecondP < 0) ||
194
+ (currentFundingRatePerSecondP < 0 && data.lastFundingRatePerSecondP > 0));
195
+ if (rateChangedSign) {
196
+ // Split calculation into two periods: before and after sign change
197
+ // 1. From last update to rate = 0
198
+ const secondsToReachZeroRate = (0, exports.getSecondsToReachZeroRate)(data.lastFundingRatePerSecondP, currentVelocityPerYear);
199
+ const avgFundingRatePerSecondP_1 = data.lastFundingRatePerSecondP / 2;
200
+ const fundingFeesDeltaP_1 = avgFundingRatePerSecondP_1 * secondsToReachZeroRate * currentPairPrice;
201
+ const { longAprMultiplier: longMultiplier1, shortAprMultiplier: shortMultiplier1, } = (0, exports.getLongShortAprMultiplier)(avgFundingRatePerSecondP_1, pairOiToken.oiLongToken, pairOiToken.oiShortToken, true);
202
+ accFundingFeeLongP += fundingFeesDeltaP_1 * longMultiplier1;
203
+ accFundingFeeShortP -= fundingFeesDeltaP_1 * shortMultiplier1;
204
+ // 2. From rate = 0 to current rate
205
+ const avgFundingRatePerSecondP_2 = currentFundingRatePerSecondP / 2;
206
+ const fundingFeesDeltaP_2 = avgFundingRatePerSecondP_2 *
207
+ (secondsSinceLastUpdate - secondsToReachZeroRate) *
208
+ currentPairPrice;
209
+ const { longAprMultiplier: longMultiplier2, shortAprMultiplier: shortMultiplier2, } = (0, exports.getLongShortAprMultiplier)(avgFundingRatePerSecondP_2, pairOiToken.oiLongToken, pairOiToken.oiShortToken, true);
210
+ accFundingFeeLongP += fundingFeesDeltaP_2 * longMultiplier2;
211
+ accFundingFeeShortP -= fundingFeesDeltaP_2 * shortMultiplier2;
212
+ }
213
+ else {
214
+ // Single period calculation
215
+ const fundingFeesDeltaP = avgFundingRatePerSecondP * secondsSinceLastUpdate * currentPairPrice;
216
+ const { longAprMultiplier, shortAprMultiplier } = (0, exports.getLongShortAprMultiplier)(avgFundingRatePerSecondP, pairOiToken.oiLongToken, pairOiToken.oiShortToken, params.aprMultiplierEnabled);
217
+ accFundingFeeLongP += fundingFeesDeltaP * longAprMultiplier;
218
+ accFundingFeeShortP -= fundingFeesDeltaP * shortAprMultiplier;
219
+ }
220
+ return {
221
+ accFundingFeeLongP,
222
+ accFundingFeeShortP,
223
+ currentFundingRatePerSecondP,
224
+ };
225
+ };
226
+ exports.getPairPendingAccFundingFees = getPairPendingAccFundingFees;
227
+ /**
228
+ * @dev Calculates funding fees for a specific trade (SDK version following contract pattern)
229
+ * @param trade Trade parameters (collateral amount, leverage, open price, long/short, collateralIndex, pairIndex)
230
+ * @param tradeInfo Trade info (contracts version)
231
+ * @param tradeFeesData Trade fees data containing initial acc funding fee
232
+ * @param currentPairPrice Current pair price
233
+ * @param context Optional context with funding fee data (if not provided, uses simple calculation)
234
+ * @returns Funding fee in collateral tokens
235
+ */
236
+ const getTradeFundingFeesCollateral = (trade, tradeInfo, tradeFeesData, currentPairPrice, context) => {
237
+ var _a, _b, _c, _d, _e, _f, _g, _h;
238
+ // Funding fees are only charged on post-v10 trades
239
+ if (tradeInfo.contractsVersion < 10) {
240
+ return 0;
241
+ }
242
+ const positionSizeCollateral = trade.collateralAmount * trade.leverage;
243
+ // If we have full context, calculate current accumulated funding fee
244
+ if (context &&
245
+ trade.collateralIndex !== undefined &&
246
+ trade.pairIndex !== undefined) {
247
+ const params = (_a = context.fundingParams[trade.collateralIndex]) === null || _a === void 0 ? void 0 : _a[trade.pairIndex];
248
+ const data = (_b = context.fundingData[trade.collateralIndex]) === null || _b === void 0 ? void 0 : _b[trade.pairIndex];
249
+ const pairOi = (_d = (_c = context.pairOiAfterV10) === null || _c === void 0 ? void 0 : _c[trade.collateralIndex]) === null || _d === void 0 ? void 0 : _d[trade.pairIndex];
250
+ const netExposureToken = ((_f = (_e = context.netExposureToken) === null || _e === void 0 ? void 0 : _e[trade.collateralIndex]) === null || _f === void 0 ? void 0 : _f[trade.pairIndex]) || 0;
251
+ const netExposureUsd = ((_h = (_g = context.netExposureUsd) === null || _g === void 0 ? void 0 : _g[trade.collateralIndex]) === null || _h === void 0 ? void 0 : _h[trade.pairIndex]) || 0;
252
+ if (params && data && pairOi) {
253
+ // Calculate pending accumulated fees
254
+ const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(params, data, currentPairPrice, pairOi, netExposureToken, netExposureUsd, context.currentTimestamp);
255
+ const currentAccFundingFeeP = trade.long
256
+ ? accFundingFeeLongP
257
+ : accFundingFeeShortP;
258
+ const fundingFeeDelta = currentAccFundingFeeP - tradeFeesData.initialAccFundingFeeP;
259
+ return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice;
260
+ }
261
+ }
262
+ return 0; // Cannot calculate without proper context
263
+ };
264
+ exports.getTradeFundingFeesCollateral = getTradeFundingFeesCollateral;
265
+ /**
266
+ * @dev Main function to calculate funding fees for a trade within context
267
+ * @param context Funding fee context with params and data
268
+ * @param collateralIndex Collateral index
269
+ * @param pairIndex Pair index
270
+ * @param trade Trade details
271
+ * @param tradeInfo Trade info (contracts version)
272
+ * @param initialAccFundingFeeP Initial accumulated funding fee
273
+ * @param currentPairPrice Current pair price
274
+ * @param pairOiToken Pair OI after v10
275
+ * @param netExposureToken Net exposure in tokens
276
+ * @param netExposureUsd Net exposure in USD
277
+ * @returns Complete funding fee calculation result
278
+ */
279
+ const getTradeFundingFees = (context, collateralIndex, pairIndex, trade, tradeInfo, initialAccFundingFeeP, currentPairPrice, pairOiToken, netExposureToken, netExposureUsd) => {
280
+ var _a, _b;
281
+ // Get params and data from context
282
+ const params = (_a = context.fundingParams[collateralIndex]) === null || _a === void 0 ? void 0 : _a[pairIndex];
283
+ const data = (_b = context.fundingData[collateralIndex]) === null || _b === void 0 ? void 0 : _b[pairIndex];
284
+ if (!params || !data) {
285
+ throw new Error(`Missing funding fee data for collateral ${collateralIndex} pair ${pairIndex}`);
286
+ }
287
+ // Calculate pending accumulated fees
288
+ const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(params, data, currentPairPrice, pairOiToken, netExposureToken, netExposureUsd, context.currentTimestamp);
289
+ const currentAccFundingFeeP = trade.long
290
+ ? accFundingFeeLongP
291
+ : accFundingFeeShortP;
292
+ // Calculate funding fee in collateral
293
+ const fundingFeeCollateral = (0, exports.getTradeFundingFeesCollateralSimple)(trade, tradeInfo, initialAccFundingFeeP, currentAccFundingFeeP);
294
+ // Calculate funding fee as percentage
295
+ const fundingFeeP = trade.collateralAmount > 0
296
+ ? (fundingFeeCollateral / trade.collateralAmount) * 100
297
+ : 0;
298
+ return {
299
+ fundingFeeCollateral,
300
+ fundingFeeP,
301
+ currentAccFundingFeeP,
302
+ initialAccFundingFeeP,
303
+ };
304
+ };
305
+ exports.getTradeFundingFees = getTradeFundingFees;
306
+ /**
307
+ * @dev Simple version of getTradeFundingFeesCollateral for backward compatibility
308
+ * @param trade Trade parameters
309
+ * @param tradeInfo Trade info with contracts version
310
+ * @param initialAccFundingFeeP Initial accumulated funding fee
311
+ * @param currentAccFundingFeeP Current accumulated funding fee
312
+ * @returns Funding fee in collateral tokens
313
+ */
314
+ const getTradeFundingFeesCollateralSimple = (trade, tradeInfo, initialAccFundingFeeP, currentAccFundingFeeP) => {
315
+ // Funding fees are only charged on post-v10 trades
316
+ if (tradeInfo.contractsVersion < 10) {
317
+ return 0;
318
+ }
319
+ const positionSizeCollateral = trade.collateralAmount * trade.leverage;
320
+ const fundingFeeDelta = currentAccFundingFeeP - initialAccFundingFeeP;
321
+ return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice;
322
+ };
323
+ exports.getTradeFundingFeesCollateralSimple = getTradeFundingFeesCollateralSimple;
324
+ // Export namespace for types
325
+ exports.FundingFees = __importStar(require("./types"));
326
+ __exportStar(require("./fetcher"), exports);
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @dev Funding fees types for v10+ trades
3
+ */
4
+ export type FundingFeeParams = {
5
+ skewCoefficientPerYear: number;
6
+ absoluteVelocityPerYearCap: number;
7
+ absoluteRatePerSecondCap: number;
8
+ thetaThresholdUsd: number;
9
+ fundingFeesEnabled: boolean;
10
+ aprMultiplierEnabled: boolean;
11
+ };
12
+ export type PairFundingFeeData = {
13
+ accFundingFeeLongP: number;
14
+ accFundingFeeShortP: number;
15
+ lastFundingRatePerSecondP: number;
16
+ lastFundingUpdateTs: number;
17
+ };
18
+ export type PairGlobalParams = {
19
+ maxSkewCollateral: number;
20
+ };
21
+ export type TradeInitialAccFundingFees = {
22
+ initialAccFundingFeeP: number;
23
+ };
24
+ export type PairAccumulatedFees = {
25
+ accPerOiLong: number;
26
+ accPerOiShort: number;
27
+ lastUpdateBlock: number;
28
+ };
29
+ export type TradeInitialAccFees = {
30
+ accPerOiLong: number;
31
+ accPerOiShort: number;
32
+ openBlock: number;
33
+ };
34
+ export type PairOiAfterV10 = {
35
+ oiLongToken: number;
36
+ oiShortToken: number;
37
+ };
38
+ export type FundingRateCalculation = {
39
+ pairOiToken: PairOiAfterV10;
40
+ netExposureToken: number;
41
+ netExposureUsd: number;
42
+ currentVelocityPerYear: number;
43
+ avgFundingRatePerSecondP: number;
44
+ currentFundingRatePerSecondP: number;
45
+ secondsSinceLastUpdate: number;
46
+ longAprMultiplier: number;
47
+ shortAprMultiplier: number;
48
+ };
49
+ export type GetFundingFeeContext = {
50
+ currentTimestamp: number;
51
+ fundingParams: {
52
+ [collateralIndex: number]: {
53
+ [pairIndex: number]: FundingFeeParams;
54
+ };
55
+ };
56
+ fundingData: {
57
+ [collateralIndex: number]: {
58
+ [pairIndex: number]: PairFundingFeeData;
59
+ };
60
+ };
61
+ globalParams?: {
62
+ [collateralIndex: number]: {
63
+ [pairIndex: number]: PairGlobalParams;
64
+ };
65
+ };
66
+ };
67
+ export type TradeFundingFeeResult = {
68
+ fundingFeeCollateral: number;
69
+ fundingFeeP: number;
70
+ currentAccFundingFeeP: number;
71
+ initialAccFundingFeeP: number;
72
+ };
73
+ export type PairPendingAccFundingFeesResult = {
74
+ accFundingFeeLongP: number;
75
+ accFundingFeeShortP: number;
76
+ currentFundingRatePerSecondP: number;
77
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Funding fees types for v10+ trades
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,4 +1,9 @@
1
- import { Fee, PairIndex } from "../types";
2
- export declare const getClosingFee: (posDai: number, leverage: number, pairIndex: PairIndex, pairFee: Fee | undefined, collateralPriceUsd?: number | undefined, feeMultiplier?: number | undefined) => number;
3
1
  export * from "./borrowing";
4
2
  export * from "./tiers";
3
+ export * from "./trading";
4
+ export { convertTradeFeesData, convertTradeFeesDataArray, convertUiRealizedPnlData, convertUiRealizedPnlDataArray, encodeTradeFeesData, encodeUiRealizedPnlData, } from "./converter";
5
+ export { BorrowingFeeV2, borrowingFeeV2Utils, getPairPendingAccBorrowingFees as getPairPendingAccBorrowingFeesV2, getTradeBorrowingFeesCollateral as getTradeBorrowingFeesCollateralV2, getBorrowingFee as getBorrowingFeeV2, getPairBorrowingFees as getPairBorrowingFeesV2, MAX_BORROWING_RATE_PER_SECOND as MAX_BORROWING_RATE_PER_SECOND_V2, BORROWING_V2_PRECISION, } from "./borrowingV2";
6
+ export { convertBorrowingFeeParams as convertBorrowingFeeParamsV2, convertBorrowingFeeParamsArray as convertBorrowingFeeParamsArrayV2, convertPairBorrowingFeeData as convertPairBorrowingFeeDataV2, convertPairBorrowingFeeDataArray as convertPairBorrowingFeeDataArrayV2, convertTradeInitialAccFees as convertTradeInitialAccFeesV2, convertTradeInitialAccFeesArray as convertTradeInitialAccFeesArrayV2, createBorrowingV2Context, isValidBorrowingRate as isValidBorrowingRateV2, borrowingRateToAPR as borrowingRateToAPRV2, aprToBorrowingRate as aprToBorrowingRateV2, } from "./borrowingV2/converter";
7
+ export { fetchBorrowingFeeParamsV2, fetchPairBorrowingFeeDataV2, fetchTradeBorrowingFeesCollateralV2, fetchPairPendingAccBorrowingFeesV2, fetchAllBorrowingV2Data, createBorrowingV2ContextFromContract, createBorrowingV2ContextFromArrays, fetchBorrowingV2DataForPairs, } from "./borrowingV2/fetcher";
8
+ export { FundingFees, getCurrentFundingVelocityPerYear, getSecondsToReachZeroRate, getAvgFundingRatePerSecondP, getLongShortAprMultiplier, getPairPendingAccFundingFees, getTradeFundingFeesCollateral, getTradeFundingFeesCollateralSimple, getTradeFundingFees, } from "./fundingFees";
9
+ export { convertFundingFeeParams, convertFundingFeeParamsArray, convertPairFundingFeeData, convertPairFundingFeeDataArray, convertPairGlobalParams, convertPairGlobalParamsArray, convertTradeInitialAccFundingFees, createFundingFeeContext, isValidFundingRate, fundingRateToAPR, aprToFundingRate, calculateVelocityFromSkew, FUNDING_FEES_PRECISION, } from "./fundingFees/converter";
@@ -14,21 +14,72 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.getClosingFee = void 0;
18
- const getClosingFee = (posDai, leverage, pairIndex, pairFee, collateralPriceUsd = 0, feeMultiplier = 1) => {
19
- if (posDai === undefined ||
20
- leverage === undefined ||
21
- pairIndex === undefined ||
22
- pairFee === undefined) {
23
- return 0;
24
- }
25
- const { totalPositionSizeFeeP, minPositionSizeUsd } = pairFee;
26
- return (totalPositionSizeFeeP *
27
- feeMultiplier *
28
- Math.max(collateralPriceUsd && collateralPriceUsd > 0
29
- ? minPositionSizeUsd / collateralPriceUsd
30
- : 0, posDai * leverage));
31
- };
32
- exports.getClosingFee = getClosingFee;
17
+ exports.isValidFundingRate = exports.createFundingFeeContext = exports.convertTradeInitialAccFundingFees = exports.convertPairGlobalParamsArray = exports.convertPairGlobalParams = exports.convertPairFundingFeeDataArray = exports.convertPairFundingFeeData = exports.convertFundingFeeParamsArray = exports.convertFundingFeeParams = exports.getTradeFundingFees = exports.getTradeFundingFeesCollateralSimple = exports.getTradeFundingFeesCollateral = exports.getPairPendingAccFundingFees = exports.getLongShortAprMultiplier = exports.getAvgFundingRatePerSecondP = exports.getSecondsToReachZeroRate = exports.getCurrentFundingVelocityPerYear = exports.FundingFees = exports.fetchBorrowingV2DataForPairs = exports.createBorrowingV2ContextFromArrays = exports.createBorrowingV2ContextFromContract = exports.fetchAllBorrowingV2Data = exports.fetchPairPendingAccBorrowingFeesV2 = exports.fetchTradeBorrowingFeesCollateralV2 = exports.fetchPairBorrowingFeeDataV2 = exports.fetchBorrowingFeeParamsV2 = exports.aprToBorrowingRateV2 = exports.borrowingRateToAPRV2 = exports.isValidBorrowingRateV2 = exports.createBorrowingV2Context = exports.convertTradeInitialAccFeesArrayV2 = exports.convertTradeInitialAccFeesV2 = exports.convertPairBorrowingFeeDataArrayV2 = exports.convertPairBorrowingFeeDataV2 = exports.convertBorrowingFeeParamsArrayV2 = exports.convertBorrowingFeeParamsV2 = exports.BORROWING_V2_PRECISION = exports.MAX_BORROWING_RATE_PER_SECOND_V2 = exports.getPairBorrowingFeesV2 = exports.getBorrowingFeeV2 = exports.getTradeBorrowingFeesCollateralV2 = exports.getPairPendingAccBorrowingFeesV2 = exports.borrowingFeeV2Utils = exports.BorrowingFeeV2 = exports.encodeUiRealizedPnlData = exports.encodeTradeFeesData = exports.convertUiRealizedPnlDataArray = exports.convertUiRealizedPnlData = exports.convertTradeFeesDataArray = exports.convertTradeFeesData = void 0;
18
+ exports.FUNDING_FEES_PRECISION = exports.calculateVelocityFromSkew = exports.aprToFundingRate = exports.fundingRateToAPR = void 0;
33
19
  __exportStar(require("./borrowing"), exports);
34
20
  __exportStar(require("./tiers"), exports);
21
+ __exportStar(require("./trading"), exports);
22
+ // TradeFeesData and UiRealizedPnlData converters
23
+ var converter_1 = require("./converter");
24
+ Object.defineProperty(exports, "convertTradeFeesData", { enumerable: true, get: function () { return converter_1.convertTradeFeesData; } });
25
+ Object.defineProperty(exports, "convertTradeFeesDataArray", { enumerable: true, get: function () { return converter_1.convertTradeFeesDataArray; } });
26
+ Object.defineProperty(exports, "convertUiRealizedPnlData", { enumerable: true, get: function () { return converter_1.convertUiRealizedPnlData; } });
27
+ Object.defineProperty(exports, "convertUiRealizedPnlDataArray", { enumerable: true, get: function () { return converter_1.convertUiRealizedPnlDataArray; } });
28
+ Object.defineProperty(exports, "encodeTradeFeesData", { enumerable: true, get: function () { return converter_1.encodeTradeFeesData; } });
29
+ Object.defineProperty(exports, "encodeUiRealizedPnlData", { enumerable: true, get: function () { return converter_1.encodeUiRealizedPnlData; } });
30
+ // Borrowing V2 exports with explicit naming to avoid conflicts
31
+ var borrowingV2_1 = require("./borrowingV2");
32
+ Object.defineProperty(exports, "BorrowingFeeV2", { enumerable: true, get: function () { return borrowingV2_1.BorrowingFeeV2; } });
33
+ Object.defineProperty(exports, "borrowingFeeV2Utils", { enumerable: true, get: function () { return borrowingV2_1.borrowingFeeV2Utils; } });
34
+ Object.defineProperty(exports, "getPairPendingAccBorrowingFeesV2", { enumerable: true, get: function () { return borrowingV2_1.getPairPendingAccBorrowingFees; } });
35
+ Object.defineProperty(exports, "getTradeBorrowingFeesCollateralV2", { enumerable: true, get: function () { return borrowingV2_1.getTradeBorrowingFeesCollateral; } });
36
+ Object.defineProperty(exports, "getBorrowingFeeV2", { enumerable: true, get: function () { return borrowingV2_1.getBorrowingFee; } });
37
+ Object.defineProperty(exports, "getPairBorrowingFeesV2", { enumerable: true, get: function () { return borrowingV2_1.getPairBorrowingFees; } });
38
+ Object.defineProperty(exports, "MAX_BORROWING_RATE_PER_SECOND_V2", { enumerable: true, get: function () { return borrowingV2_1.MAX_BORROWING_RATE_PER_SECOND; } });
39
+ Object.defineProperty(exports, "BORROWING_V2_PRECISION", { enumerable: true, get: function () { return borrowingV2_1.BORROWING_V2_PRECISION; } });
40
+ var converter_2 = require("./borrowingV2/converter");
41
+ Object.defineProperty(exports, "convertBorrowingFeeParamsV2", { enumerable: true, get: function () { return converter_2.convertBorrowingFeeParams; } });
42
+ Object.defineProperty(exports, "convertBorrowingFeeParamsArrayV2", { enumerable: true, get: function () { return converter_2.convertBorrowingFeeParamsArray; } });
43
+ Object.defineProperty(exports, "convertPairBorrowingFeeDataV2", { enumerable: true, get: function () { return converter_2.convertPairBorrowingFeeData; } });
44
+ Object.defineProperty(exports, "convertPairBorrowingFeeDataArrayV2", { enumerable: true, get: function () { return converter_2.convertPairBorrowingFeeDataArray; } });
45
+ Object.defineProperty(exports, "convertTradeInitialAccFeesV2", { enumerable: true, get: function () { return converter_2.convertTradeInitialAccFees; } });
46
+ Object.defineProperty(exports, "convertTradeInitialAccFeesArrayV2", { enumerable: true, get: function () { return converter_2.convertTradeInitialAccFeesArray; } });
47
+ Object.defineProperty(exports, "createBorrowingV2Context", { enumerable: true, get: function () { return converter_2.createBorrowingV2Context; } });
48
+ Object.defineProperty(exports, "isValidBorrowingRateV2", { enumerable: true, get: function () { return converter_2.isValidBorrowingRate; } });
49
+ Object.defineProperty(exports, "borrowingRateToAPRV2", { enumerable: true, get: function () { return converter_2.borrowingRateToAPR; } });
50
+ Object.defineProperty(exports, "aprToBorrowingRateV2", { enumerable: true, get: function () { return converter_2.aprToBorrowingRate; } });
51
+ // Contract utilities re-exported for convenience
52
+ var fetcher_1 = require("./borrowingV2/fetcher");
53
+ Object.defineProperty(exports, "fetchBorrowingFeeParamsV2", { enumerable: true, get: function () { return fetcher_1.fetchBorrowingFeeParamsV2; } });
54
+ Object.defineProperty(exports, "fetchPairBorrowingFeeDataV2", { enumerable: true, get: function () { return fetcher_1.fetchPairBorrowingFeeDataV2; } });
55
+ Object.defineProperty(exports, "fetchTradeBorrowingFeesCollateralV2", { enumerable: true, get: function () { return fetcher_1.fetchTradeBorrowingFeesCollateralV2; } });
56
+ Object.defineProperty(exports, "fetchPairPendingAccBorrowingFeesV2", { enumerable: true, get: function () { return fetcher_1.fetchPairPendingAccBorrowingFeesV2; } });
57
+ Object.defineProperty(exports, "fetchAllBorrowingV2Data", { enumerable: true, get: function () { return fetcher_1.fetchAllBorrowingV2Data; } });
58
+ Object.defineProperty(exports, "createBorrowingV2ContextFromContract", { enumerable: true, get: function () { return fetcher_1.createBorrowingV2ContextFromContract; } });
59
+ Object.defineProperty(exports, "createBorrowingV2ContextFromArrays", { enumerable: true, get: function () { return fetcher_1.createBorrowingV2ContextFromArrays; } });
60
+ Object.defineProperty(exports, "fetchBorrowingV2DataForPairs", { enumerable: true, get: function () { return fetcher_1.fetchBorrowingV2DataForPairs; } });
61
+ // Funding Fees exports
62
+ var fundingFees_1 = require("./fundingFees");
63
+ Object.defineProperty(exports, "FundingFees", { enumerable: true, get: function () { return fundingFees_1.FundingFees; } });
64
+ Object.defineProperty(exports, "getCurrentFundingVelocityPerYear", { enumerable: true, get: function () { return fundingFees_1.getCurrentFundingVelocityPerYear; } });
65
+ Object.defineProperty(exports, "getSecondsToReachZeroRate", { enumerable: true, get: function () { return fundingFees_1.getSecondsToReachZeroRate; } });
66
+ Object.defineProperty(exports, "getAvgFundingRatePerSecondP", { enumerable: true, get: function () { return fundingFees_1.getAvgFundingRatePerSecondP; } });
67
+ Object.defineProperty(exports, "getLongShortAprMultiplier", { enumerable: true, get: function () { return fundingFees_1.getLongShortAprMultiplier; } });
68
+ Object.defineProperty(exports, "getPairPendingAccFundingFees", { enumerable: true, get: function () { return fundingFees_1.getPairPendingAccFundingFees; } });
69
+ Object.defineProperty(exports, "getTradeFundingFeesCollateral", { enumerable: true, get: function () { return fundingFees_1.getTradeFundingFeesCollateral; } });
70
+ Object.defineProperty(exports, "getTradeFundingFeesCollateralSimple", { enumerable: true, get: function () { return fundingFees_1.getTradeFundingFeesCollateralSimple; } });
71
+ Object.defineProperty(exports, "getTradeFundingFees", { enumerable: true, get: function () { return fundingFees_1.getTradeFundingFees; } });
72
+ var converter_3 = require("./fundingFees/converter");
73
+ Object.defineProperty(exports, "convertFundingFeeParams", { enumerable: true, get: function () { return converter_3.convertFundingFeeParams; } });
74
+ Object.defineProperty(exports, "convertFundingFeeParamsArray", { enumerable: true, get: function () { return converter_3.convertFundingFeeParamsArray; } });
75
+ Object.defineProperty(exports, "convertPairFundingFeeData", { enumerable: true, get: function () { return converter_3.convertPairFundingFeeData; } });
76
+ Object.defineProperty(exports, "convertPairFundingFeeDataArray", { enumerable: true, get: function () { return converter_3.convertPairFundingFeeDataArray; } });
77
+ Object.defineProperty(exports, "convertPairGlobalParams", { enumerable: true, get: function () { return converter_3.convertPairGlobalParams; } });
78
+ Object.defineProperty(exports, "convertPairGlobalParamsArray", { enumerable: true, get: function () { return converter_3.convertPairGlobalParamsArray; } });
79
+ Object.defineProperty(exports, "convertTradeInitialAccFundingFees", { enumerable: true, get: function () { return converter_3.convertTradeInitialAccFundingFees; } });
80
+ Object.defineProperty(exports, "createFundingFeeContext", { enumerable: true, get: function () { return converter_3.createFundingFeeContext; } });
81
+ Object.defineProperty(exports, "isValidFundingRate", { enumerable: true, get: function () { return converter_3.isValidFundingRate; } });
82
+ Object.defineProperty(exports, "fundingRateToAPR", { enumerable: true, get: function () { return converter_3.fundingRateToAPR; } });
83
+ Object.defineProperty(exports, "aprToFundingRate", { enumerable: true, get: function () { return converter_3.aprToFundingRate; } });
84
+ Object.defineProperty(exports, "calculateVelocityFromSkew", { enumerable: true, get: function () { return converter_3.calculateVelocityFromSkew; } });
85
+ Object.defineProperty(exports, "FUNDING_FEES_PRECISION", { enumerable: true, get: function () { return converter_3.FUNDING_FEES_PRECISION; } });
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @dev Converters for fee tier data between contract and SDK formats
3
+ * @dev All BigNumber values are normalized to floats with appropriate precision
4
+ */
5
+ import { IFeeTiers } from "../../../contracts/types/generated/GNSMultiCollatDiamond";
6
+ import { FeeTier, TraderInfo, TraderEnrollment } from "./types";
7
+ /**
8
+ * @dev Converts contract fee tier data to SDK format
9
+ * @param contractData Contract FeeTier struct
10
+ * @returns Normalized fee tier data
11
+ */
12
+ export declare const convertFeeTier: (contractData: IFeeTiers.FeeTierStructOutput) => FeeTier;
13
+ /**
14
+ * @dev Converts array of fee tiers from contract format
15
+ * @param contractDataArray Array of contract FeeTier structs
16
+ * @returns Array of normalized fee tiers
17
+ */
18
+ export declare const convertFeeTierArray: (contractDataArray: IFeeTiers.FeeTierStructOutput[]) => FeeTier[];
19
+ /**
20
+ * @dev Converts contract trader info to SDK format
21
+ * @param contractData Contract TraderInfo struct
22
+ * @returns Normalized trader info
23
+ */
24
+ export declare const convertTraderInfo: (contractData: IFeeTiers.TraderInfoStructOutput) => TraderInfo;
25
+ /**
26
+ * @dev Converts contract trader enrollment to SDK format
27
+ * @param contractData Contract TraderEnrollment struct
28
+ * @returns Normalized trader enrollment
29
+ */
30
+ export declare const convertTraderEnrollment: (contractData: IFeeTiers.TraderEnrollmentStructOutput) => TraderEnrollment;
31
+ /**
32
+ * @dev Converts the complete fee tiers configuration from contract format
33
+ * @param tiers Array of fee tiers from contract
34
+ * @param groupVolumeMultipliers Array of group volume multipliers
35
+ * @param currentDay Current day from contract
36
+ * @returns Complete fee tiers configuration
37
+ */
38
+ export declare const convertFeeTiersConfig: (tiers: IFeeTiers.FeeTierStructOutput[], groupVolumeMultipliers: readonly bigint[], currentDay: bigint) => {
39
+ tiers: FeeTier[];
40
+ groupVolumeMultipliers: number[];
41
+ currentDay: number;
42
+ };
43
+ /**
44
+ * @dev Converts trader's fee tier data from contract format
45
+ * @param traderInfo Trader info from contract
46
+ * @param traderDailyInfo Array of daily points info
47
+ * @param traderEnrollment Enrollment status from contract
48
+ * @returns Complete trader fee tier data
49
+ */
50
+ export declare const convertTraderFeeTiersData: (traderInfo: IFeeTiers.TraderInfoStructOutput, traderDailyInfo: readonly bigint[], traderEnrollment: IFeeTiers.TraderEnrollmentStructOutput) => {
51
+ traderInfo: TraderInfo;
52
+ dailyPoints: number[];
53
+ traderEnrollment: TraderEnrollment;
54
+ };
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Converters for fee tier data between contract and SDK formats
4
+ * @dev All BigNumber values are normalized to floats with appropriate precision
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.convertTraderFeeTiersData = exports.convertFeeTiersConfig = exports.convertTraderEnrollment = exports.convertTraderInfo = exports.convertFeeTierArray = exports.convertFeeTier = void 0;
8
+ /**
9
+ * @dev Converts contract fee tier data to SDK format
10
+ * @param contractData Contract FeeTier struct
11
+ * @returns Normalized fee tier data
12
+ */
13
+ const convertFeeTier = (contractData) => {
14
+ return {
15
+ feeMultiplier: Number(contractData.feeMultiplier) / 1e3,
16
+ pointsThreshold: Number(contractData.pointsThreshold) / 1e18, // Points in 1e18 precision
17
+ };
18
+ };
19
+ exports.convertFeeTier = convertFeeTier;
20
+ /**
21
+ * @dev Converts array of fee tiers from contract format
22
+ * @param contractDataArray Array of contract FeeTier structs
23
+ * @returns Array of normalized fee tiers
24
+ */
25
+ const convertFeeTierArray = (contractDataArray) => {
26
+ return contractDataArray.map(exports.convertFeeTier);
27
+ };
28
+ exports.convertFeeTierArray = convertFeeTierArray;
29
+ /**
30
+ * @dev Converts contract trader info to SDK format
31
+ * @param contractData Contract TraderInfo struct
32
+ * @returns Normalized trader info
33
+ */
34
+ const convertTraderInfo = (contractData) => {
35
+ return {
36
+ lastDayUpdated: Number(contractData.lastDayUpdated),
37
+ trailingPoints: Number(contractData.trailingPoints) / 1e18, // Points in 1e18 precision
38
+ };
39
+ };
40
+ exports.convertTraderInfo = convertTraderInfo;
41
+ /**
42
+ * @dev Converts contract trader enrollment to SDK format
43
+ * @param contractData Contract TraderEnrollment struct
44
+ * @returns Normalized trader enrollment
45
+ */
46
+ const convertTraderEnrollment = (contractData) => {
47
+ return {
48
+ status: Number(contractData.status),
49
+ };
50
+ };
51
+ exports.convertTraderEnrollment = convertTraderEnrollment;
52
+ /**
53
+ * @dev Converts the complete fee tiers configuration from contract format
54
+ * @param tiers Array of fee tiers from contract
55
+ * @param groupVolumeMultipliers Array of group volume multipliers
56
+ * @param currentDay Current day from contract
57
+ * @returns Complete fee tiers configuration
58
+ */
59
+ const convertFeeTiersConfig = (tiers, groupVolumeMultipliers, currentDay) => {
60
+ return {
61
+ tiers: (0, exports.convertFeeTierArray)(tiers),
62
+ groupVolumeMultipliers: groupVolumeMultipliers.map(m => Number(m) / 1e3),
63
+ currentDay: Number(currentDay),
64
+ };
65
+ };
66
+ exports.convertFeeTiersConfig = convertFeeTiersConfig;
67
+ /**
68
+ * @dev Converts trader's fee tier data from contract format
69
+ * @param traderInfo Trader info from contract
70
+ * @param traderDailyInfo Array of daily points info
71
+ * @param traderEnrollment Enrollment status from contract
72
+ * @returns Complete trader fee tier data
73
+ */
74
+ const convertTraderFeeTiersData = (traderInfo, traderDailyInfo, traderEnrollment) => {
75
+ return {
76
+ traderInfo: (0, exports.convertTraderInfo)(traderInfo),
77
+ dailyPoints: traderDailyInfo.map(points => Number(points) / 1e18),
78
+ traderEnrollment: (0, exports.convertTraderEnrollment)(traderEnrollment),
79
+ };
80
+ };
81
+ exports.convertTraderFeeTiersData = convertTraderFeeTiersData;