@gainsnetwork/sdk 0.2.71-rc4 → 1.0.0-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 (247) hide show
  1. package/README.md +2 -2
  2. package/lib/backend/globalTrades/index.d.ts +11 -0
  3. package/lib/backend/globalTrades/index.js +69 -0
  4. package/lib/backend/index.d.ts +3 -0
  5. package/lib/backend/index.js +28 -0
  6. package/lib/backend/tradingVariables/backend.types.d.ts +318 -0
  7. package/lib/backend/tradingVariables/backend.types.js +2 -0
  8. package/lib/backend/tradingVariables/converter.d.ts +34 -0
  9. package/lib/backend/tradingVariables/converter.js +338 -0
  10. package/lib/backend/tradingVariables/index.d.ts +5 -0
  11. package/lib/backend/tradingVariables/index.js +96 -0
  12. package/lib/backend/tradingVariables/types.d.ts +113 -0
  13. package/lib/backend/tradingVariables/types.js +14 -0
  14. package/lib/constants.d.ts +0 -3
  15. package/lib/constants.js +7 -9
  16. package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
  17. package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
  18. package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
  19. package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
  20. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
  21. package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
  22. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
  23. package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
  24. package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +2134 -293
  25. package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -0
  26. package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -0
  27. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.d.ts +613 -0
  28. package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.js +2 -0
  29. package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
  30. package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
  31. package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
  32. package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -0
  33. package/lib/contracts/types/generated/GNSTrading.d.ts +758 -0
  34. package/lib/contracts/types/generated/GNSTrading.js +2 -0
  35. package/lib/contracts/types/generated/GNSTradingCallbacks.d.ts +875 -0
  36. package/lib/contracts/types/generated/GNSTradingCallbacks.js +2 -0
  37. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.d.ts +806 -0
  38. package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.js +2 -0
  39. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.d.ts +821 -0
  40. package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.js +2 -0
  41. package/lib/contracts/types/generated/GNSTradingStorage.d.ts +1387 -0
  42. package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
  43. package/lib/contracts/types/generated/GToken.d.ts +78 -107
  44. package/lib/contracts/types/generated/GTokenV6_3_2.d.ts +1838 -0
  45. package/lib/contracts/types/generated/GTokenV6_3_2.js +2 -0
  46. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
  47. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
  48. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
  49. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
  50. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
  51. package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
  52. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
  53. package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
  54. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.d.ts +90 -53
  55. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +4496 -430
  56. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
  57. package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
  58. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
  59. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
  60. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
  61. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
  62. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
  63. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
  64. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
  65. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
  66. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
  67. package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
  68. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
  69. package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
  70. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
  71. package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
  72. package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
  73. package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
  74. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
  75. package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -0
  76. package/lib/contracts/types/generated/factories/GToken__factory.d.ts +7 -0
  77. package/lib/contracts/types/generated/factories/GToken__factory.js +69 -142
  78. package/lib/contracts/types/index.d.ts +2 -1
  79. package/lib/contracts/types/index.js +1 -0
  80. package/lib/contracts/utils/openTrades.d.ts +1 -0
  81. package/lib/contracts/utils/openTrades.js +94 -56
  82. package/lib/contracts/utils/pairs.js +0 -3
  83. package/lib/index.d.ts +2 -0
  84. package/lib/index.js +5 -0
  85. package/lib/markets/collateral/converter.d.ts +5 -0
  86. package/lib/markets/collateral/converter.js +11 -0
  87. package/lib/markets/collateral/index.d.ts +1 -0
  88. package/lib/markets/collateral/index.js +17 -0
  89. package/lib/markets/collateral/types.d.ts +7 -0
  90. package/lib/markets/collateral/types.js +2 -0
  91. package/lib/markets/holdingFees/index.d.ts +46 -0
  92. package/lib/markets/holdingFees/index.js +105 -0
  93. package/lib/markets/holdingFees/types.d.ts +23 -0
  94. package/lib/markets/holdingFees/types.js +5 -0
  95. package/lib/markets/index.d.ts +5 -0
  96. package/lib/markets/index.js +5 -0
  97. package/lib/markets/leverage/builder.d.ts +12 -0
  98. package/lib/markets/leverage/builder.js +25 -0
  99. package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
  100. package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
  101. package/lib/markets/leverage/index.d.ts +3 -0
  102. package/lib/markets/leverage/index.js +19 -0
  103. package/lib/markets/leverage/types.d.ts +15 -0
  104. package/lib/markets/leverage/types.js +2 -0
  105. package/lib/markets/oi/converter.d.ts +62 -0
  106. package/lib/markets/oi/converter.js +102 -0
  107. package/lib/markets/oi/fetcher.d.ts +58 -0
  108. package/lib/markets/oi/fetcher.js +181 -0
  109. package/lib/markets/oi/index.d.ts +49 -0
  110. package/lib/markets/oi/index.js +77 -0
  111. package/lib/markets/oi/types.d.ts +73 -0
  112. package/lib/markets/oi/types.js +6 -0
  113. package/lib/markets/oi/validation.d.ts +80 -0
  114. package/lib/markets/oi/validation.js +172 -0
  115. package/lib/markets/price/builder.d.ts +25 -0
  116. package/lib/markets/price/builder.js +69 -0
  117. package/lib/markets/price/index.d.ts +6 -0
  118. package/lib/markets/price/index.js +22 -0
  119. package/lib/markets/price/marketPrice.d.ts +13 -0
  120. package/lib/markets/price/marketPrice.js +35 -0
  121. package/lib/markets/price/types.d.ts +23 -0
  122. package/lib/markets/price/types.js +5 -0
  123. package/lib/trade/counterTrade/index.d.ts +2 -0
  124. package/lib/trade/counterTrade/index.js +18 -0
  125. package/lib/trade/counterTrade/types.d.ts +7 -0
  126. package/lib/trade/counterTrade/types.js +2 -0
  127. package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
  128. package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
  129. package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
  130. package/lib/trade/effectiveLeverage/builder.js +30 -0
  131. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +23 -0
  132. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +64 -0
  133. package/lib/trade/effectiveLeverage/index.d.ts +3 -0
  134. package/lib/trade/effectiveLeverage/index.js +22 -0
  135. package/lib/trade/effectiveLeverage/types.d.ts +33 -0
  136. package/lib/trade/effectiveLeverage/types.js +2 -0
  137. package/lib/trade/fees/borrowing/builder.d.ts +14 -0
  138. package/lib/trade/fees/borrowing/builder.js +33 -0
  139. package/lib/trade/fees/borrowing/index.d.ts +23 -2
  140. package/lib/trade/fees/borrowing/index.js +50 -16
  141. package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
  142. package/lib/trade/fees/borrowingV2/builder.js +24 -0
  143. package/lib/trade/fees/borrowingV2/converter.d.ts +75 -0
  144. package/lib/trade/fees/borrowingV2/converter.js +132 -0
  145. package/lib/trade/fees/borrowingV2/fetcher.d.ts +75 -0
  146. package/lib/trade/fees/borrowingV2/fetcher.js +185 -0
  147. package/lib/trade/fees/borrowingV2/index.d.ts +48 -0
  148. package/lib/trade/fees/borrowingV2/index.js +112 -0
  149. package/lib/trade/fees/borrowingV2/types.d.ts +95 -0
  150. package/lib/trade/fees/borrowingV2/types.js +5 -0
  151. package/lib/trade/fees/converter.d.ts +48 -0
  152. package/lib/trade/fees/converter.js +114 -0
  153. package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
  154. package/lib/trade/fees/fundingFees/builder.js +35 -0
  155. package/lib/trade/fees/fundingFees/converter.d.ts +102 -0
  156. package/lib/trade/fees/fundingFees/converter.js +196 -0
  157. package/lib/trade/fees/fundingFees/fetcher.d.ts +66 -0
  158. package/lib/trade/fees/fundingFees/fetcher.js +150 -0
  159. package/lib/trade/fees/fundingFees/index.d.ts +124 -0
  160. package/lib/trade/fees/fundingFees/index.js +309 -0
  161. package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
  162. package/lib/trade/fees/fundingFees/pairContext.js +17 -0
  163. package/lib/trade/fees/fundingFees/types.d.ts +77 -0
  164. package/lib/trade/fees/fundingFees/types.js +5 -0
  165. package/lib/trade/fees/holdingFees/index.d.ts +46 -0
  166. package/lib/trade/fees/holdingFees/index.js +105 -0
  167. package/lib/trade/fees/holdingFees/types.d.ts +23 -0
  168. package/lib/trade/fees/holdingFees/types.js +5 -0
  169. package/lib/trade/fees/index.d.ts +8 -2
  170. package/lib/trade/fees/index.js +67 -16
  171. package/lib/trade/fees/tiers/converter.d.ts +54 -0
  172. package/lib/trade/fees/tiers/converter.js +81 -0
  173. package/lib/trade/fees/tiers/index.d.ts +18 -0
  174. package/lib/trade/fees/tiers/index.js +45 -1
  175. package/lib/trade/fees/trading/builder.d.ts +18 -0
  176. package/lib/trade/fees/trading/builder.js +20 -0
  177. package/lib/trade/fees/trading/converter.d.ts +32 -0
  178. package/lib/trade/fees/trading/converter.js +47 -0
  179. package/lib/trade/fees/trading/holdingFees.d.ts +28 -0
  180. package/lib/trade/fees/trading/holdingFees.js +66 -0
  181. package/lib/trade/fees/trading/holdingFeesStructured.d.ts +28 -0
  182. package/lib/trade/fees/trading/holdingFeesStructured.js +66 -0
  183. package/lib/trade/fees/trading/index.d.ts +62 -0
  184. package/lib/trade/fees/trading/index.js +155 -0
  185. package/lib/trade/fees/trading/types.d.ts +48 -0
  186. package/lib/trade/fees/trading/types.js +5 -0
  187. package/lib/trade/index.d.ts +5 -2
  188. package/lib/trade/index.js +5 -2
  189. package/lib/trade/liquidation/builder.d.ts +25 -0
  190. package/lib/trade/liquidation/builder.js +59 -0
  191. package/lib/trade/liquidation/converter.d.ts +23 -0
  192. package/lib/trade/liquidation/converter.js +46 -0
  193. package/lib/trade/liquidation/index.d.ts +29 -0
  194. package/lib/trade/liquidation/index.js +218 -0
  195. package/lib/trade/liquidation/types.d.ts +43 -0
  196. package/lib/trade/liquidation/types.js +2 -0
  197. package/lib/trade/pnl/builder.d.ts +16 -0
  198. package/lib/trade/pnl/builder.js +44 -0
  199. package/lib/trade/pnl/converter.d.ts +47 -0
  200. package/lib/trade/pnl/converter.js +72 -0
  201. package/lib/trade/pnl/index.d.ts +89 -0
  202. package/lib/trade/pnl/index.js +302 -0
  203. package/lib/trade/pnl/types.d.ts +79 -0
  204. package/lib/trade/pnl/types.js +5 -0
  205. package/lib/trade/priceImpact/close/builder.d.ts +23 -0
  206. package/lib/trade/priceImpact/close/builder.js +45 -0
  207. package/lib/trade/priceImpact/close/index.d.ts +22 -0
  208. package/lib/trade/priceImpact/close/index.js +134 -0
  209. package/lib/trade/priceImpact/close/types.d.ts +47 -0
  210. package/lib/trade/priceImpact/close/types.js +5 -0
  211. package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
  212. package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
  213. package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
  214. package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
  215. package/lib/trade/priceImpact/cumulVol/index.d.ts +108 -0
  216. package/lib/trade/priceImpact/cumulVol/index.js +235 -0
  217. package/lib/trade/priceImpact/index.d.ts +21 -0
  218. package/lib/trade/priceImpact/index.js +79 -0
  219. package/lib/trade/priceImpact/open/builder.d.ts +21 -0
  220. package/lib/trade/priceImpact/open/builder.js +43 -0
  221. package/lib/trade/priceImpact/open/index.d.ts +23 -0
  222. package/lib/trade/priceImpact/open/index.js +78 -0
  223. package/lib/trade/priceImpact/open/types.d.ts +44 -0
  224. package/lib/trade/priceImpact/open/types.js +5 -0
  225. package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
  226. package/lib/trade/priceImpact/skew/builder.js +28 -0
  227. package/lib/trade/priceImpact/skew/converter.d.ts +46 -0
  228. package/lib/trade/priceImpact/skew/converter.js +81 -0
  229. package/lib/trade/priceImpact/skew/fetcher.d.ts +60 -0
  230. package/lib/trade/priceImpact/skew/fetcher.js +169 -0
  231. package/lib/trade/priceImpact/skew/index.d.ts +53 -0
  232. package/lib/trade/priceImpact/skew/index.js +148 -0
  233. package/lib/trade/priceImpact/skew/types.d.ts +44 -0
  234. package/lib/trade/priceImpact/skew/types.js +5 -0
  235. package/lib/trade/spread.d.ts +5 -18
  236. package/lib/trade/spread.js +17 -106
  237. package/lib/trade/types.d.ts +109 -12
  238. package/lib/trade/types.js +0 -3
  239. package/lib/trade/utils.d.ts +18 -0
  240. package/lib/trade/utils.js +30 -0
  241. package/lib/vault/index.d.ts +3 -1
  242. package/lib/vault/index.js +2 -2
  243. package/package.json +2 -1
  244. package/lib/trade/liquidation.d.ts +0 -12
  245. package/lib/trade/liquidation.js +0 -55
  246. package/lib/trade/pnl.d.ts +0 -10
  247. package/lib/trade/pnl.js +0 -33
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Converters for funding fees 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.createGetFundingFeeContext = exports.calculateVelocityFromSkew = exports.aprToFundingRate = exports.fundingRateToAPR = exports.isValidFundingRate = exports.createFundingFeeContext = exports.convertTradeInitialAccFundingFees = exports.convertPairGlobalParamsArray = exports.convertPairGlobalParams = exports.convertPairFundingFeeDataArray = exports.convertPairFundingFeeData = exports.convertFundingFeeParamsArray = exports.convertFundingFeeParams = exports.FUNDING_FEES_PRECISION = void 0;
8
+ // Precision constants from contract
9
+ exports.FUNDING_FEES_PRECISION = {
10
+ SKEW_COEFFICIENT_PER_YEAR: 1e26,
11
+ ABSOLUTE_VELOCITY_PER_YEAR_CAP: 1e7,
12
+ ABSOLUTE_RATE_PER_SECOND_CAP: 1e10,
13
+ ACC_FUNDING_FEE_P: 1e20,
14
+ FUNDING_RATE_PER_SECOND_P: 1e18, // Funding rate per second precision
15
+ };
16
+ /**
17
+ * @dev Converts contract funding fee params to SDK format
18
+ * @param contractParams Contract funding fee params struct
19
+ * @returns Normalized funding fee params
20
+ */
21
+ const convertFundingFeeParams = (contractParams) => {
22
+ return {
23
+ skewCoefficientPerYear: Number(contractParams.skewCoefficientPerYear) /
24
+ exports.FUNDING_FEES_PRECISION.SKEW_COEFFICIENT_PER_YEAR,
25
+ absoluteVelocityPerYearCap: Number(contractParams.absoluteVelocityPerYearCap) /
26
+ exports.FUNDING_FEES_PRECISION.ABSOLUTE_VELOCITY_PER_YEAR_CAP,
27
+ absoluteRatePerSecondCap: Number(contractParams.absoluteRatePerSecondCap) /
28
+ exports.FUNDING_FEES_PRECISION.ABSOLUTE_RATE_PER_SECOND_CAP,
29
+ thetaThresholdUsd: Number(contractParams.thetaThresholdUsd),
30
+ fundingFeesEnabled: Boolean(contractParams.fundingFeesEnabled),
31
+ aprMultiplierEnabled: Boolean(contractParams.aprMultiplierEnabled),
32
+ };
33
+ };
34
+ exports.convertFundingFeeParams = convertFundingFeeParams;
35
+ /**
36
+ * @dev Converts array of contract funding fee params to SDK format
37
+ * @param contractParamsArray Array of contract funding fee params
38
+ * @returns Array of normalized funding fee params
39
+ */
40
+ const convertFundingFeeParamsArray = (contractParamsArray) => {
41
+ return contractParamsArray.map(exports.convertFundingFeeParams);
42
+ };
43
+ exports.convertFundingFeeParamsArray = convertFundingFeeParamsArray;
44
+ /**
45
+ * @dev Converts contract pair funding fee data to SDK format
46
+ * @param contractData Contract pair funding fee data struct
47
+ * @returns Normalized pair funding fee data
48
+ */
49
+ const convertPairFundingFeeData = (contractData) => {
50
+ return {
51
+ accFundingFeeLongP: Number(contractData.accFundingFeeLongP) /
52
+ exports.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
53
+ accFundingFeeShortP: Number(contractData.accFundingFeeShortP) /
54
+ exports.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
55
+ lastFundingRatePerSecondP: Number(contractData.lastFundingRatePerSecondP) /
56
+ exports.FUNDING_FEES_PRECISION.FUNDING_RATE_PER_SECOND_P,
57
+ lastFundingUpdateTs: Number(contractData.lastFundingUpdateTs),
58
+ };
59
+ };
60
+ exports.convertPairFundingFeeData = convertPairFundingFeeData;
61
+ /**
62
+ * @dev Converts array of contract pair funding fee data to SDK format
63
+ * @param contractDataArray Array of contract pair funding fee data
64
+ * @returns Array of normalized pair funding fee data
65
+ */
66
+ const convertPairFundingFeeDataArray = (contractDataArray) => {
67
+ return contractDataArray.map(exports.convertPairFundingFeeData);
68
+ };
69
+ exports.convertPairFundingFeeDataArray = convertPairFundingFeeDataArray;
70
+ /**
71
+ * @dev Converts contract pair global params to SDK format
72
+ * @param contractParams Contract pair global params struct
73
+ * @returns Normalized pair global params
74
+ */
75
+ const convertPairGlobalParams = (contractParams) => {
76
+ return {
77
+ maxSkewCollateral: Number(contractParams.maxSkewCollateral),
78
+ };
79
+ };
80
+ exports.convertPairGlobalParams = convertPairGlobalParams;
81
+ /**
82
+ * @dev Converts array of contract pair global params to SDK format
83
+ * @param contractParamsArray Array of contract pair global params
84
+ * @returns Array of normalized pair global params
85
+ */
86
+ const convertPairGlobalParamsArray = (contractParamsArray) => {
87
+ return contractParamsArray.map(exports.convertPairGlobalParams);
88
+ };
89
+ exports.convertPairGlobalParamsArray = convertPairGlobalParamsArray;
90
+ /**
91
+ * @dev Converts contract trade initial acc funding fees to SDK format
92
+ * @param contractFees Contract trade fees data (only funding fee part)
93
+ * @returns Normalized trade initial acc funding fees
94
+ */
95
+ const convertTradeInitialAccFundingFees = (contractFees) => {
96
+ return {
97
+ initialAccFundingFeeP: Number(contractFees.initialAccFundingFeeP) /
98
+ exports.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
99
+ };
100
+ };
101
+ exports.convertTradeInitialAccFundingFees = convertTradeInitialAccFundingFees;
102
+ /**
103
+ * @dev Creates a funding fee context from arrays of data
104
+ * @param collateralIndices Array of collateral indices
105
+ * @param pairIndices Array of pair indices
106
+ * @param params Array of funding fee parameters
107
+ * @param data Array of pair funding fee data
108
+ * @param globalParams Optional array of global parameters
109
+ * @param currentTimestamp Optional current timestamp
110
+ * @returns Complete funding fee context
111
+ */
112
+ const createFundingFeeContext = (collateralIndices, pairIndices, params, data, globalParams, currentTimestamp) => {
113
+ const context = {
114
+ currentTimestamp: currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000),
115
+ fundingParams: {},
116
+ fundingData: {},
117
+ globalParams: globalParams ? {} : undefined,
118
+ };
119
+ // Build nested objects indexed by collateralIndex and pairIndex
120
+ for (let i = 0; i < collateralIndices.length; i++) {
121
+ const collateralIndex = collateralIndices[i];
122
+ const pairIndex = pairIndices[i];
123
+ // Initialize collateral index objects if they don't exist
124
+ if (!context.fundingParams[collateralIndex]) {
125
+ context.fundingParams[collateralIndex] = {};
126
+ }
127
+ if (!context.fundingData[collateralIndex]) {
128
+ context.fundingData[collateralIndex] = {};
129
+ }
130
+ if (globalParams && context.globalParams) {
131
+ if (!context.globalParams[collateralIndex]) {
132
+ context.globalParams[collateralIndex] = {};
133
+ }
134
+ }
135
+ // Store data
136
+ context.fundingParams[collateralIndex][pairIndex] = params[i];
137
+ context.fundingData[collateralIndex][pairIndex] = data[i];
138
+ if (globalParams && context.globalParams) {
139
+ context.globalParams[collateralIndex][pairIndex] = globalParams[i];
140
+ }
141
+ }
142
+ return context;
143
+ };
144
+ exports.createFundingFeeContext = createFundingFeeContext;
145
+ /**
146
+ * @dev Validates funding rate is within allowed bounds
147
+ * @param absoluteRatePerSecondCap Rate cap (normalized)
148
+ * @returns Whether the rate is valid
149
+ */
150
+ const isValidFundingRate = (absoluteRatePerSecondCap) => {
151
+ // Convert back to contract precision for validation
152
+ const contractValue = absoluteRatePerSecondCap *
153
+ exports.FUNDING_FEES_PRECISION.ABSOLUTE_RATE_PER_SECOND_CAP;
154
+ return contractValue <= 3170979; // MAX_FUNDING_RATE_PER_SECOND from contract
155
+ };
156
+ exports.isValidFundingRate = isValidFundingRate;
157
+ /**
158
+ * @dev Converts funding rate per second to APR
159
+ * @param ratePerSecondP Funding rate per second (normalized)
160
+ * @returns APR as percentage
161
+ */
162
+ const fundingRateToAPR = (ratePerSecondP) => {
163
+ return ratePerSecondP * 365 * 24 * 60 * 60 * 100;
164
+ };
165
+ exports.fundingRateToAPR = fundingRateToAPR;
166
+ /**
167
+ * @dev Converts APR to funding rate per second
168
+ * @param apr APR as percentage
169
+ * @returns Funding rate per second (normalized)
170
+ */
171
+ const aprToFundingRate = (apr) => {
172
+ return apr / (365 * 24 * 60 * 60 * 100);
173
+ };
174
+ exports.aprToFundingRate = aprToFundingRate;
175
+ /**
176
+ * @dev Calculates velocity per year from skew coefficient
177
+ * @param skewRatio Current skew ratio (net exposure / total OI)
178
+ * @param skewCoefficientPerYear Skew coefficient per year (normalized)
179
+ * @returns Velocity per year
180
+ */
181
+ const calculateVelocityFromSkew = (skewRatio, skewCoefficientPerYear) => {
182
+ return Math.abs(skewRatio) * skewCoefficientPerYear;
183
+ };
184
+ exports.calculateVelocityFromSkew = calculateVelocityFromSkew;
185
+ /**
186
+ * @dev Creates a GetFundingFeeContext from arrays (alias for consistency)
187
+ * @param collateralIndices Array of collateral indices
188
+ * @param pairIndices Array of pair indices
189
+ * @param params Array of funding fee parameters
190
+ * @param data Array of pair funding fee data
191
+ * @returns Complete funding fee context
192
+ */
193
+ const createGetFundingFeeContext = (collateralIndices, pairIndices, params, data) => {
194
+ return (0, exports.createFundingFeeContext)(collateralIndices, pairIndices, params, data);
195
+ };
196
+ exports.createGetFundingFeeContext = createGetFundingFeeContext;
@@ -0,0 +1,66 @@
1
+ import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
2
+ import type { TradeInitialAccFees } from ".";
3
+ /**
4
+ * @dev Fetches pending accumulated funding fees for a specific pair
5
+ * @param contract GNSMultiCollatDiamond contract instance
6
+ * @param collateralIndex Collateral index
7
+ * @param pairIndex Pair index
8
+ * @param currentPairPrice Current pair price (1e10)
9
+ * @returns Promise resolving to accumulated funding fees and current rate
10
+ */
11
+ export declare const fetchPairPendingAccFundingFees: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number, currentPairPrice: bigint) => Promise<{
12
+ accFundingFeeLongP: number;
13
+ accFundingFeeShortP: number;
14
+ currentFundingRatePerSecondP: number;
15
+ }>;
16
+ /**
17
+ * @dev Fetches funding fees for a specific trade in collateral tokens
18
+ * @param contract GNSMultiCollatDiamond contract instance
19
+ * @param trader Trader address
20
+ * @param index Trade index
21
+ * @param currentPairPrice Current pair price (1e10)
22
+ * @returns Promise resolving to funding fee in collateral tokens
23
+ */
24
+ export declare const fetchTradeFundingFeesCollateral: (contract: GNSMultiCollatDiamond, trader: string, index: number, currentPairPrice: bigint) => Promise<number>;
25
+ /**
26
+ * @dev Fetches trade fees data for a specific trade
27
+ * @param contract GNSMultiCollatDiamond contract instance
28
+ * @param trader Trader address
29
+ * @param index Trade index
30
+ * @returns Promise resolving to trade fees data
31
+ */
32
+ export declare const fetchTradeFeesData: (contract: GNSMultiCollatDiamond, trader: string, index: number) => Promise<TradeInitialAccFees>;
33
+ /**
34
+ * @dev Fetches trade fees data for multiple trades
35
+ * @param contract GNSMultiCollatDiamond contract instance
36
+ * @param traders Array of trader addresses
37
+ * @param indices Array of trade indices
38
+ * @returns Promise resolving to array of trade fees data
39
+ */
40
+ export declare const fetchTradeFeesDataBatch: (contract: GNSMultiCollatDiamond, traders: string[], indices: number[]) => Promise<TradeInitialAccFees[]>;
41
+ /**
42
+ * @dev Fetches pending accumulated funding fees for multiple pairs
43
+ * @param contract GNSMultiCollatDiamond contract instance
44
+ * @param collateralIndices Array of collateral indices
45
+ * @param pairIndices Array of pair indices
46
+ * @param currentPairPrices Array of current pair prices (1e10)
47
+ * @returns Promise resolving to array of accumulated funding fees
48
+ */
49
+ export declare const fetchPairPendingAccFundingFeesBatch: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[], currentPairPrices: bigint[]) => Promise<Array<{
50
+ accFundingFeeLongP: number;
51
+ accFundingFeeShortP: number;
52
+ currentFundingRatePerSecondP: number;
53
+ }>>;
54
+ /**
55
+ * @dev Helper to convert price from number to contract format
56
+ * @param price Price as number
57
+ * @returns Price in contract format (1e10)
58
+ */
59
+ export declare const priceToContractFormat: (price: number) => bigint;
60
+ /**
61
+ * @dev Helper to convert collateral amount to contract format
62
+ * @param amount Amount as number
63
+ * @param decimals Collateral decimals (6 for USDC, 18 for others)
64
+ * @returns Amount in contract format
65
+ */
66
+ export declare const collateralToContractFormat: (amount: number, decimals: number) => bigint;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.collateralToContractFormat = exports.priceToContractFormat = exports.fetchPairPendingAccFundingFeesBatch = exports.fetchTradeFeesDataBatch = exports.fetchTradeFeesData = exports.fetchTradeFundingFeesCollateral = exports.fetchPairPendingAccFundingFees = void 0;
13
+ /**
14
+ * @dev Fetches pending accumulated funding fees for a specific pair
15
+ * @param contract GNSMultiCollatDiamond contract instance
16
+ * @param collateralIndex Collateral index
17
+ * @param pairIndex Pair index
18
+ * @param currentPairPrice Current pair price (1e10)
19
+ * @returns Promise resolving to accumulated funding fees and current rate
20
+ */
21
+ const fetchPairPendingAccFundingFees = (contract, collateralIndex, pairIndex, currentPairPrice) => __awaiter(void 0, void 0, void 0, function* () {
22
+ try {
23
+ const result = yield contract.getPairPendingAccFundingFees(collateralIndex, pairIndex, currentPairPrice);
24
+ return {
25
+ accFundingFeeLongP: Number(result.accFundingFeeLongP) / 1e20,
26
+ accFundingFeeShortP: Number(result.accFundingFeeShortP) / 1e20,
27
+ currentFundingRatePerSecondP: Number(result.currentFundingRatePerSecondP) / 1e18, // FUNDING_RATE_PER_SECOND_P precision
28
+ };
29
+ }
30
+ catch (error) {
31
+ console.error("Error fetching pair pending acc funding fees:", error);
32
+ throw error;
33
+ }
34
+ });
35
+ exports.fetchPairPendingAccFundingFees = fetchPairPendingAccFundingFees;
36
+ /**
37
+ * @dev Fetches funding fees for a specific trade in collateral tokens
38
+ * @param contract GNSMultiCollatDiamond contract instance
39
+ * @param trader Trader address
40
+ * @param index Trade index
41
+ * @param currentPairPrice Current pair price (1e10)
42
+ * @returns Promise resolving to funding fee in collateral tokens
43
+ */
44
+ const fetchTradeFundingFeesCollateral = (contract, trader, index, currentPairPrice) => __awaiter(void 0, void 0, void 0, function* () {
45
+ try {
46
+ const fundingFeeCollateral = yield contract.getTradeFundingFeesCollateral(trader, index, currentPairPrice);
47
+ // Convert from BigNumber to number (collateral precision already applied)
48
+ return Number(fundingFeeCollateral);
49
+ }
50
+ catch (error) {
51
+ console.error("Error fetching trade funding fees:", error);
52
+ throw error;
53
+ }
54
+ });
55
+ exports.fetchTradeFundingFeesCollateral = fetchTradeFundingFeesCollateral;
56
+ /**
57
+ * @dev Fetches trade fees data for a specific trade
58
+ * @param contract GNSMultiCollatDiamond contract instance
59
+ * @param trader Trader address
60
+ * @param index Trade index
61
+ * @returns Promise resolving to trade fees data
62
+ */
63
+ const fetchTradeFeesData = (contract, trader, index) => __awaiter(void 0, void 0, void 0, function* () {
64
+ try {
65
+ const feesData = yield contract.getTradeFeesData(trader, index);
66
+ return {
67
+ accPerOiLong: Number(feesData.initialAccFundingFeeP) / 1e20,
68
+ accPerOiShort: Number(feesData.initialAccFundingFeeP) / 1e20,
69
+ openBlock: 0, // Not available in this struct
70
+ };
71
+ }
72
+ catch (error) {
73
+ console.error("Error fetching trade fees data:", error);
74
+ throw error;
75
+ }
76
+ });
77
+ exports.fetchTradeFeesData = fetchTradeFeesData;
78
+ /**
79
+ * @dev Fetches trade fees data for multiple trades
80
+ * @param contract GNSMultiCollatDiamond contract instance
81
+ * @param traders Array of trader addresses
82
+ * @param indices Array of trade indices
83
+ * @returns Promise resolving to array of trade fees data
84
+ */
85
+ const fetchTradeFeesDataBatch = (contract, traders, indices) => __awaiter(void 0, void 0, void 0, function* () {
86
+ if (traders.length !== indices.length) {
87
+ throw new Error("Traders and indices arrays must have the same length");
88
+ }
89
+ try {
90
+ const feesDatas = yield contract.getTradeFeesDataArray(traders, indices);
91
+ return feesDatas.map(feesData => ({
92
+ accPerOiLong: Number(feesData.initialAccFundingFeeP) / 1e20,
93
+ accPerOiShort: Number(feesData.initialAccFundingFeeP) / 1e20,
94
+ openBlock: 0,
95
+ }));
96
+ }
97
+ catch (error) {
98
+ console.error("Error fetching trade fees data batch:", error);
99
+ throw error;
100
+ }
101
+ });
102
+ exports.fetchTradeFeesDataBatch = fetchTradeFeesDataBatch;
103
+ /**
104
+ * @dev Fetches pending accumulated funding fees for multiple pairs
105
+ * @param contract GNSMultiCollatDiamond contract instance
106
+ * @param collateralIndices Array of collateral indices
107
+ * @param pairIndices Array of pair indices
108
+ * @param currentPairPrices Array of current pair prices (1e10)
109
+ * @returns Promise resolving to array of accumulated funding fees
110
+ */
111
+ const fetchPairPendingAccFundingFeesBatch = (contract, collateralIndices, pairIndices, currentPairPrices) => __awaiter(void 0, void 0, void 0, function* () {
112
+ if (collateralIndices.length !== pairIndices.length ||
113
+ pairIndices.length !== currentPairPrices.length) {
114
+ throw new Error("All input arrays must have the same length");
115
+ }
116
+ try {
117
+ // Fetch all in parallel
118
+ const promises = collateralIndices.map((collateralIndex, i) => contract.getPairPendingAccFundingFees(collateralIndex, pairIndices[i], currentPairPrices[i]));
119
+ const results = yield Promise.all(promises);
120
+ return results.map(result => ({
121
+ accFundingFeeLongP: Number(result.accFundingFeeLongP) / 1e20,
122
+ accFundingFeeShortP: Number(result.accFundingFeeShortP) / 1e20,
123
+ currentFundingRatePerSecondP: Number(result.currentFundingRatePerSecondP) / 1e18,
124
+ }));
125
+ }
126
+ catch (error) {
127
+ console.error("Error fetching pair pending acc funding fees batch:", error);
128
+ throw error;
129
+ }
130
+ });
131
+ exports.fetchPairPendingAccFundingFeesBatch = fetchPairPendingAccFundingFeesBatch;
132
+ /**
133
+ * @dev Helper to convert price from number to contract format
134
+ * @param price Price as number
135
+ * @returns Price in contract format (1e10)
136
+ */
137
+ const priceToContractFormat = (price) => {
138
+ return BigInt(Math.round(price * 1e10));
139
+ };
140
+ exports.priceToContractFormat = priceToContractFormat;
141
+ /**
142
+ * @dev Helper to convert collateral amount to contract format
143
+ * @param amount Amount as number
144
+ * @param decimals Collateral decimals (6 for USDC, 18 for others)
145
+ * @returns Amount in contract format
146
+ */
147
+ const collateralToContractFormat = (amount, decimals) => {
148
+ return BigInt(Math.round(amount * Math.pow(10, decimals)));
149
+ };
150
+ 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";