@gainsnetwork/sdk 0.0.0-v10.rc2 → 0.0.0-v10.rc21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/backend/globalTrades/index.d.ts +11 -0
- package/lib/backend/globalTrades/index.js +69 -0
- package/lib/backend/index.d.ts +3 -0
- package/lib/backend/index.js +28 -0
- package/lib/backend/tradingVariables/backend.types.d.ts +318 -0
- package/lib/backend/tradingVariables/backend.types.js +2 -0
- package/lib/backend/tradingVariables/converter.d.ts +34 -0
- package/lib/backend/tradingVariables/converter.js +338 -0
- package/lib/backend/tradingVariables/index.d.ts +5 -0
- package/lib/backend/tradingVariables/index.js +96 -0
- package/lib/backend/tradingVariables/types.d.ts +113 -0
- package/lib/backend/tradingVariables/types.js +14 -0
- package/lib/constants.d.ts +20 -0
- package/lib/constants.js +24 -3
- package/lib/contracts/addresses.json +20 -0
- package/lib/contracts/index.js +3 -1
- package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
- package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
- package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +7 -20
- package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.d.ts +613 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.js +2 -0
- package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
- package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
- package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
- package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -0
- package/lib/contracts/types/generated/GNSTrading.d.ts +758 -0
- package/lib/contracts/types/generated/GNSTrading.js +2 -0
- package/lib/contracts/types/generated/GNSTradingCallbacks.d.ts +875 -0
- package/lib/contracts/types/generated/GNSTradingCallbacks.js +2 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.d.ts +806 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.js +2 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.d.ts +821 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.js +2 -0
- package/lib/contracts/types/generated/GNSTradingStorage.d.ts +1387 -0
- package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
- package/lib/contracts/types/generated/GTokenV6_3_2.d.ts +1838 -0
- package/lib/contracts/types/generated/GTokenV6_3_2.js +2 -0
- package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
- package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
- package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +7 -16
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
- package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
- package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
- package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
- package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
- package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
- package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -0
- package/lib/contracts/types/generated/factories/GToken__factory.d.ts +7 -0
- package/lib/contracts/types/generated/factories/GToken__factory.js +4 -0
- package/lib/contracts/types/index.d.ts +2 -1
- package/lib/contracts/types/index.js +1 -0
- package/lib/contracts/utils/index.d.ts +0 -3
- package/lib/contracts/utils/index.js +0 -3
- package/lib/contracts/utils/openTrades.js +14 -30
- package/lib/contracts/utils/pairs.js +20 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +5 -0
- package/lib/markets/collateral/converter.d.ts +5 -0
- package/lib/markets/collateral/converter.js +11 -0
- package/lib/markets/collateral/index.d.ts +1 -0
- package/lib/markets/collateral/index.js +17 -0
- package/lib/markets/collateral/types.d.ts +7 -0
- package/lib/markets/collateral/types.js +2 -0
- package/lib/markets/holdingFees/index.d.ts +46 -0
- package/lib/markets/holdingFees/index.js +105 -0
- package/lib/markets/holdingFees/types.d.ts +23 -0
- package/lib/markets/holdingFees/types.js +5 -0
- package/lib/markets/index.d.ts +5 -0
- package/lib/markets/index.js +5 -0
- package/lib/markets/leverage/builder.d.ts +12 -0
- package/lib/markets/leverage/builder.js +25 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
- package/lib/markets/leverage/index.d.ts +3 -0
- package/lib/markets/leverage/index.js +19 -0
- package/lib/markets/leverage/types.d.ts +15 -0
- package/lib/markets/leverage/types.js +2 -0
- package/lib/markets/oi/converter.d.ts +62 -0
- package/lib/markets/oi/converter.js +102 -0
- package/lib/markets/oi/fetcher.d.ts +58 -0
- package/lib/markets/oi/fetcher.js +181 -0
- package/lib/markets/oi/index.d.ts +49 -0
- package/lib/markets/oi/index.js +77 -0
- package/lib/markets/oi/types.d.ts +73 -0
- package/lib/markets/oi/types.js +6 -0
- package/lib/markets/oi/validation.d.ts +80 -0
- package/lib/markets/oi/validation.js +172 -0
- package/lib/markets/price/builder.d.ts +25 -0
- package/lib/markets/price/builder.js +69 -0
- package/lib/markets/price/index.d.ts +6 -0
- package/lib/markets/price/index.js +22 -0
- package/lib/markets/price/marketPrice.d.ts +12 -0
- package/lib/markets/price/marketPrice.js +34 -0
- package/lib/markets/price/types.d.ts +23 -0
- package/lib/markets/price/types.js +5 -0
- package/lib/trade/counterTrade/index.d.ts +2 -0
- package/lib/trade/counterTrade/index.js +18 -0
- package/lib/trade/counterTrade/types.d.ts +7 -0
- package/lib/trade/counterTrade/types.js +2 -0
- package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
- package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
- package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
- package/lib/trade/effectiveLeverage/builder.js +30 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +23 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +64 -0
- package/lib/trade/effectiveLeverage/index.d.ts +3 -0
- package/lib/trade/effectiveLeverage/index.js +22 -0
- package/lib/trade/effectiveLeverage/types.d.ts +33 -0
- package/lib/trade/effectiveLeverage/types.js +2 -0
- package/lib/trade/fees/borrowing/builder.d.ts +14 -0
- package/lib/trade/fees/borrowing/builder.js +33 -0
- package/lib/trade/fees/borrowing/index.d.ts +15 -4
- package/lib/trade/fees/borrowing/index.js +42 -18
- package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
- package/lib/trade/fees/borrowingV2/builder.js +24 -0
- package/lib/trade/fees/borrowingV2/converter.d.ts +12 -3
- package/lib/trade/fees/borrowingV2/converter.js +29 -18
- package/lib/{contracts/fetch/fees/borrowingFeesV2.d.ts → trade/fees/borrowingV2/fetcher.d.ts} +2 -3
- package/lib/{contracts/fetch/fees/borrowingFeesV2.js → trade/fees/borrowingV2/fetcher.js} +6 -14
- package/lib/trade/fees/borrowingV2/index.d.ts +6 -17
- package/lib/trade/fees/borrowingV2/index.js +10 -37
- package/lib/trade/fees/borrowingV2/types.d.ts +22 -6
- package/lib/trade/fees/converter.d.ts +48 -0
- package/lib/trade/fees/converter.js +114 -0
- package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
- package/lib/trade/fees/fundingFees/builder.js +35 -0
- package/lib/{contracts/fetch/fees/fundingFees.d.ts → trade/fees/fundingFees/fetcher.d.ts} +2 -2
- package/lib/trade/fees/fundingFees/index.d.ts +28 -39
- package/lib/trade/fees/fundingFees/index.js +33 -46
- package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
- package/lib/trade/fees/fundingFees/pairContext.js +17 -0
- package/lib/trade/fees/holdingFees/index.d.ts +46 -0
- package/lib/trade/fees/holdingFees/index.js +105 -0
- package/lib/trade/fees/holdingFees/types.d.ts +23 -0
- package/lib/trade/fees/holdingFees/types.js +5 -0
- package/lib/trade/fees/index.d.ts +4 -2
- package/lib/trade/fees/index.js +45 -36
- package/lib/trade/fees/tiers/converter.d.ts +54 -0
- package/lib/trade/fees/tiers/converter.js +81 -0
- package/lib/trade/fees/tiers/index.d.ts +1 -0
- package/lib/trade/fees/tiers/index.js +1 -0
- package/lib/trade/fees/trading/builder.d.ts +18 -0
- package/lib/trade/fees/trading/builder.js +20 -0
- package/lib/trade/fees/trading/converter.d.ts +2 -0
- package/lib/trade/fees/trading/converter.js +5 -1
- package/lib/trade/fees/trading/holdingFees.d.ts +28 -0
- package/lib/trade/fees/trading/holdingFees.js +66 -0
- package/lib/trade/fees/trading/holdingFeesStructured.d.ts +28 -0
- package/lib/trade/fees/trading/holdingFeesStructured.js +66 -0
- package/lib/trade/fees/trading/index.d.ts +30 -2
- package/lib/trade/fees/trading/index.js +52 -1
- package/lib/trade/fees/trading/types.d.ts +9 -0
- package/lib/trade/index.d.ts +3 -1
- package/lib/trade/index.js +3 -1
- package/lib/trade/liquidation/builder.d.ts +25 -0
- package/lib/trade/liquidation/builder.js +59 -0
- package/lib/trade/liquidation/converter.d.ts +23 -0
- package/lib/trade/liquidation/converter.js +46 -0
- package/lib/trade/liquidation/index.d.ts +16 -0
- package/lib/trade/liquidation/index.js +123 -0
- package/lib/trade/liquidation/types.d.ts +42 -0
- package/lib/trade/liquidation/types.js +2 -0
- package/lib/trade/pnl/builder.d.ts +16 -0
- package/lib/trade/pnl/builder.js +44 -0
- package/lib/trade/pnl/converter.d.ts +47 -0
- package/lib/trade/pnl/converter.js +72 -0
- package/lib/trade/pnl/index.d.ts +88 -0
- package/lib/trade/pnl/index.js +286 -0
- package/lib/trade/pnl/types.d.ts +75 -0
- package/lib/trade/pnl/types.js +5 -0
- package/lib/trade/priceImpact/close/builder.d.ts +23 -0
- package/lib/trade/priceImpact/close/builder.js +45 -0
- package/lib/trade/priceImpact/close/index.d.ts +22 -0
- package/lib/trade/priceImpact/close/index.js +119 -0
- package/lib/trade/priceImpact/close/types.d.ts +44 -0
- package/lib/trade/priceImpact/close/types.js +5 -0
- package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
- package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
- package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
- package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
- package/lib/trade/priceImpact/cumulVol/index.d.ts +108 -0
- package/lib/trade/priceImpact/cumulVol/index.js +235 -0
- package/lib/trade/priceImpact/index.d.ts +18 -5
- package/lib/trade/priceImpact/index.js +57 -10
- package/lib/trade/priceImpact/open/builder.d.ts +21 -0
- package/lib/trade/priceImpact/open/builder.js +43 -0
- package/lib/trade/priceImpact/open/index.d.ts +23 -0
- package/lib/trade/priceImpact/open/index.js +74 -0
- package/lib/trade/priceImpact/open/types.d.ts +41 -0
- package/lib/trade/priceImpact/open/types.js +5 -0
- package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
- package/lib/trade/priceImpact/skew/builder.js +28 -0
- package/lib/trade/priceImpact/skew/converter.d.ts +11 -42
- package/lib/trade/priceImpact/skew/converter.js +19 -109
- package/lib/{contracts/fetch/priceImpact/skew.d.ts → trade/priceImpact/skew/fetcher.d.ts} +9 -12
- package/lib/{contracts/fetch/priceImpact/skew.js → trade/priceImpact/skew/fetcher.js} +23 -22
- package/lib/trade/priceImpact/skew/index.d.ts +11 -15
- package/lib/trade/priceImpact/skew/index.js +22 -54
- package/lib/trade/priceImpact/skew/types.d.ts +2 -15
- package/lib/trade/spread.d.ts +5 -18
- package/lib/trade/spread.js +17 -106
- package/lib/trade/types.d.ts +30 -8
- package/lib/trade/types.js +20 -0
- package/lib/vault/index.d.ts +3 -1
- package/lib/vault/index.js +2 -2
- package/package.json +2 -2
- package/lib/trade/liquidation.d.ts +0 -42
- package/lib/trade/liquidation.js +0 -140
- package/lib/trade/pnl.d.ts +0 -10
- package/lib/trade/pnl.js +0 -38
- /package/lib/{contracts/fetch/fees/fundingFees.js → trade/fees/fundingFees/fetcher.js} +0 -0
|
@@ -26,7 +26,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
26
26
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.BorrowingFeeV2 = exports.borrowingFeeV2Utils = exports.getPairBorrowingFees = exports.
|
|
29
|
+
exports.BorrowingFeeV2 = exports.borrowingFeeV2Utils = exports.getPairBorrowingFees = exports.getTradeBorrowingFeesCollateral = exports.getPairPendingAccBorrowingFees = exports.BORROWING_V2_PRECISION = exports.MAX_BORROWING_RATE_PER_SECOND = void 0;
|
|
30
30
|
/**
|
|
31
31
|
* @dev Maximum borrowing rate per second (1,000% APR)
|
|
32
32
|
*/
|
|
@@ -63,21 +63,18 @@ const getPairPendingAccBorrowingFees = (params, data, currentPairPrice, currentT
|
|
|
63
63
|
exports.getPairPendingAccBorrowingFees = getPairPendingAccBorrowingFees;
|
|
64
64
|
/**
|
|
65
65
|
* @dev Calculates borrowing fees owed by a specific trade
|
|
66
|
-
* @param input Trade borrowing fee calculation input
|
|
67
|
-
* @param context
|
|
66
|
+
* @param input Trade borrowing fee calculation input (without pairIndex)
|
|
67
|
+
* @param context Pair-specific borrowing context
|
|
68
68
|
* @returns Borrowing fees in collateral tokens
|
|
69
69
|
*/
|
|
70
70
|
const getTradeBorrowingFeesCollateral = (input, context) => {
|
|
71
|
-
|
|
72
|
-
const {
|
|
73
|
-
// Get borrowing parameters and data for the pair
|
|
74
|
-
const params = (_a = context.borrowingParams[collateralIndex]) === null || _a === void 0 ? void 0 : _a[pairIndex];
|
|
75
|
-
const data = (_b = context.borrowingData[collateralIndex]) === null || _b === void 0 ? void 0 : _b[pairIndex];
|
|
71
|
+
const { positionSizeCollateral, openPrice, currentPairPrice, initialAccBorrowingFeeP, currentTimestamp, } = input;
|
|
72
|
+
const { params, data } = context;
|
|
76
73
|
if (!params || !data) {
|
|
77
74
|
return 0;
|
|
78
75
|
}
|
|
79
76
|
// Calculate current accumulated borrowing fees
|
|
80
|
-
const currentAccBorrowingFeeP = (0, exports.getPairPendingAccBorrowingFees)(params, data, currentPairPrice, currentTimestamp);
|
|
77
|
+
const currentAccBorrowingFeeP = (0, exports.getPairPendingAccBorrowingFees)(params, data, currentPairPrice, currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : context.currentTimestamp);
|
|
81
78
|
// Calculate borrowing fees for this trade
|
|
82
79
|
// Formula: (positionSizeCollateral * (currentAccFee - initialAccFee)) / openPrice / 100
|
|
83
80
|
const feeDeltaP = currentAccBorrowingFeeP - initialAccBorrowingFeeP;
|
|
@@ -86,29 +83,6 @@ const getTradeBorrowingFeesCollateral = (input, context) => {
|
|
|
86
83
|
exports.BORROWING_V2_PRECISION.PERCENTAGE);
|
|
87
84
|
};
|
|
88
85
|
exports.getTradeBorrowingFeesCollateral = getTradeBorrowingFeesCollateral;
|
|
89
|
-
/**
|
|
90
|
-
* @dev Convenience function to calculate borrowing fees for a trade using individual parameters
|
|
91
|
-
* @param positionSizeCollateral Position size in collateral tokens
|
|
92
|
-
* @param pairIndex Index of the trading pair
|
|
93
|
-
* @param collateralIndex Index of the collateral
|
|
94
|
-
* @param openPrice Price at which the trade was opened
|
|
95
|
-
* @param currentPairPrice Current price of the trading pair
|
|
96
|
-
* @param initialAccBorrowingFeeP Initial accumulated borrowing fee when trade was opened
|
|
97
|
-
* @param context Context containing borrowing parameters and data
|
|
98
|
-
* @returns Borrowing fees in collateral tokens
|
|
99
|
-
*/
|
|
100
|
-
const getBorrowingFee = (positionSizeCollateral, pairIndex, collateralIndex, openPrice, currentPairPrice, initialAccBorrowingFeeP, context) => {
|
|
101
|
-
return (0, exports.getTradeBorrowingFeesCollateral)({
|
|
102
|
-
positionSizeCollateral,
|
|
103
|
-
openPrice,
|
|
104
|
-
collateralIndex,
|
|
105
|
-
pairIndex,
|
|
106
|
-
currentPairPrice,
|
|
107
|
-
initialAccBorrowingFeeP,
|
|
108
|
-
currentTimestamp: context.currentTimestamp,
|
|
109
|
-
}, context);
|
|
110
|
-
};
|
|
111
|
-
exports.getBorrowingFee = getBorrowingFee;
|
|
112
86
|
/**
|
|
113
87
|
* @dev Utility function to get pending accumulated borrowing fees for a pair using context
|
|
114
88
|
* @param input Pair borrowing fee calculation input
|
|
@@ -116,10 +90,9 @@ exports.getBorrowingFee = getBorrowingFee;
|
|
|
116
90
|
* @returns Updated accumulated borrowing fee (1e20 precision)
|
|
117
91
|
*/
|
|
118
92
|
const getPairBorrowingFees = (input, context) => {
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
const data = (_b = context.borrowingData[collateralIndex]) === null || _b === void 0 ? void 0 : _b[pairIndex];
|
|
93
|
+
const { pairIndex, currentPairPrice, currentTimestamp } = input;
|
|
94
|
+
const params = context.borrowingParams[pairIndex];
|
|
95
|
+
const data = context.borrowingData[pairIndex];
|
|
123
96
|
if (!params || !data) {
|
|
124
97
|
return 0;
|
|
125
98
|
}
|
|
@@ -133,7 +106,7 @@ exports.borrowingFeeV2Utils = {
|
|
|
133
106
|
getPairPendingAccBorrowingFees: exports.getPairPendingAccBorrowingFees,
|
|
134
107
|
getTradeBorrowingFeesCollateral: exports.getTradeBorrowingFeesCollateral,
|
|
135
108
|
getPairBorrowingFees: exports.getPairBorrowingFees,
|
|
136
|
-
getBorrowingFee: exports.getBorrowingFee,
|
|
137
109
|
};
|
|
138
110
|
exports.BorrowingFeeV2 = __importStar(require("./types"));
|
|
139
111
|
__exportStar(require("./converter"), exports);
|
|
112
|
+
__exportStar(require("./fetcher"), exports);
|
|
@@ -39,6 +39,7 @@ export type TradeInitialAccFees = {
|
|
|
39
39
|
};
|
|
40
40
|
/**
|
|
41
41
|
* @dev Context required for borrowing v2 fee calculations
|
|
42
|
+
* @dev Context is already scoped to a specific collateral
|
|
42
43
|
*/
|
|
43
44
|
export type GetBorrowingFeeV2Context = {
|
|
44
45
|
/**
|
|
@@ -47,20 +48,36 @@ export type GetBorrowingFeeV2Context = {
|
|
|
47
48
|
currentTimestamp?: number;
|
|
48
49
|
/**
|
|
49
50
|
* @dev Borrowing fee parameters for pairs
|
|
50
|
-
* @dev Indexed by: params[
|
|
51
|
+
* @dev Indexed by: params[pairIndex]
|
|
51
52
|
*/
|
|
52
|
-
borrowingParams: Record<number,
|
|
53
|
+
borrowingParams: Record<number, BorrowingFeeParams>;
|
|
53
54
|
/**
|
|
54
55
|
* @dev Borrowing fee data for pairs
|
|
55
|
-
* @dev Indexed by: data[
|
|
56
|
+
* @dev Indexed by: data[pairIndex]
|
|
56
57
|
*/
|
|
57
|
-
borrowingData: Record<number,
|
|
58
|
+
borrowingData: Record<number, PairBorrowingFeeData>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* @dev Context for pair-specific borrowing v2 fee calculations
|
|
62
|
+
*/
|
|
63
|
+
export type GetPairBorrowingFeeV2Context = {
|
|
64
|
+
/**
|
|
65
|
+
* @dev Current timestamp (defaults to Date.now() / 1000)
|
|
66
|
+
*/
|
|
67
|
+
currentTimestamp?: number;
|
|
68
|
+
/**
|
|
69
|
+
* @dev Borrowing fee parameters for this specific pair
|
|
70
|
+
*/
|
|
71
|
+
params: BorrowingFeeParams;
|
|
72
|
+
/**
|
|
73
|
+
* @dev Borrowing fee data for this specific pair
|
|
74
|
+
*/
|
|
75
|
+
data: PairBorrowingFeeData;
|
|
58
76
|
};
|
|
59
77
|
/**
|
|
60
78
|
* @dev Input for calculating pending borrowing fees for a pair
|
|
61
79
|
*/
|
|
62
80
|
export type PairBorrowingFeeInput = {
|
|
63
|
-
collateralIndex: number;
|
|
64
81
|
pairIndex: number;
|
|
65
82
|
currentPairPrice: number;
|
|
66
83
|
currentTimestamp?: number;
|
|
@@ -71,7 +88,6 @@ export type PairBorrowingFeeInput = {
|
|
|
71
88
|
export type TradeBorrowingFeeInput = {
|
|
72
89
|
positionSizeCollateral: number;
|
|
73
90
|
openPrice: number;
|
|
74
|
-
collateralIndex: number;
|
|
75
91
|
pairIndex: number;
|
|
76
92
|
currentPairPrice: number;
|
|
77
93
|
initialAccBorrowingFeeP: number;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Converters for fee data between contract and SDK formats
|
|
3
|
+
*/
|
|
4
|
+
import { IFundingFees } from "../../contracts/types/generated/GNSMultiCollatDiamond";
|
|
5
|
+
import { TradeFeesData, UiRealizedPnlData } from "../types";
|
|
6
|
+
import { CollateralConfig } from "../../markets/collateral/types";
|
|
7
|
+
/**
|
|
8
|
+
* @dev Converts contract TradeFeesData to SDK format
|
|
9
|
+
* @param data Trade fees data from contract
|
|
10
|
+
* @param collateralConfig Config for the collateral (contains decimals)
|
|
11
|
+
* @returns Normalized trade fees data
|
|
12
|
+
*/
|
|
13
|
+
export declare const convertTradeFeesData: (data: IFundingFees.TradeFeesDataStructOutput, collateralConfig: CollateralConfig) => TradeFeesData;
|
|
14
|
+
/**
|
|
15
|
+
* @dev Converts array of TradeFeesData from contract
|
|
16
|
+
* @param dataArray Array of trade fees data
|
|
17
|
+
* @param collateralConfig Config for the collateral
|
|
18
|
+
* @returns Array of normalized trade fees data
|
|
19
|
+
*/
|
|
20
|
+
export declare const convertTradeFeesDataArray: (dataArray: IFundingFees.TradeFeesDataStructOutput[], collateralConfig: CollateralConfig) => TradeFeesData[];
|
|
21
|
+
/**
|
|
22
|
+
* @dev Converts contract UiRealizedPnlData to SDK format
|
|
23
|
+
* @param data UI realized PnL data from contract
|
|
24
|
+
* @param collateralConfig Config for the collateral (contains decimals)
|
|
25
|
+
* @returns Normalized UI realized PnL data
|
|
26
|
+
*/
|
|
27
|
+
export declare const convertUiRealizedPnlData: (data: IFundingFees.UiRealizedPnlDataStructOutput, collateralConfig: CollateralConfig) => UiRealizedPnlData;
|
|
28
|
+
/**
|
|
29
|
+
* @dev Converts array of UiRealizedPnlData from contract
|
|
30
|
+
* @param dataArray Array of UI realized PnL data
|
|
31
|
+
* @param collateralConfig Config for the collateral
|
|
32
|
+
* @returns Array of normalized UI realized PnL data
|
|
33
|
+
*/
|
|
34
|
+
export declare const convertUiRealizedPnlDataArray: (dataArray: IFundingFees.UiRealizedPnlDataStructOutput[], collateralConfig: CollateralConfig) => UiRealizedPnlData[];
|
|
35
|
+
/**
|
|
36
|
+
* @dev Converts TradeFeesData to contract format (for encoding)
|
|
37
|
+
* @param data SDK trade fees data
|
|
38
|
+
* @param collateralConfig Config for the collateral
|
|
39
|
+
* @returns Contract-formatted trade fees data
|
|
40
|
+
*/
|
|
41
|
+
export declare const encodeTradeFeesData: (data: TradeFeesData, collateralConfig: CollateralConfig) => IFundingFees.TradeFeesDataStruct;
|
|
42
|
+
/**
|
|
43
|
+
* @dev Converts UiRealizedPnlData to contract format (for encoding)
|
|
44
|
+
* @param data SDK UI realized PnL data
|
|
45
|
+
* @param collateralConfig Config for the collateral
|
|
46
|
+
* @returns Contract-formatted UI realized PnL data
|
|
47
|
+
*/
|
|
48
|
+
export declare const encodeUiRealizedPnlData: (data: UiRealizedPnlData, collateralConfig: CollateralConfig) => IFundingFees.UiRealizedPnlDataStruct;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Converters for fee data between contract and SDK formats
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.encodeUiRealizedPnlData = exports.encodeTradeFeesData = exports.convertUiRealizedPnlDataArray = exports.convertUiRealizedPnlData = exports.convertTradeFeesDataArray = exports.convertTradeFeesData = void 0;
|
|
7
|
+
const borrowingV2_1 = require("./borrowingV2");
|
|
8
|
+
const converter_1 = require("./fundingFees/converter");
|
|
9
|
+
/**
|
|
10
|
+
* @dev Converts contract TradeFeesData to SDK format
|
|
11
|
+
* @param data Trade fees data from contract
|
|
12
|
+
* @param collateralConfig Config for the collateral (contains decimals)
|
|
13
|
+
* @returns Normalized trade fees data
|
|
14
|
+
*/
|
|
15
|
+
const convertTradeFeesData = (data, collateralConfig) => {
|
|
16
|
+
const decimals = collateralConfig.decimals || 18;
|
|
17
|
+
return {
|
|
18
|
+
realizedTradingFeesCollateral: parseFloat(data.realizedTradingFeesCollateral.toString()) /
|
|
19
|
+
Math.pow(10, decimals),
|
|
20
|
+
realizedPnlCollateral: parseFloat(data.realizedPnlCollateral.toString()) / Math.pow(10, decimals),
|
|
21
|
+
manuallyRealizedNegativePnlCollateral: parseFloat(data.manuallyRealizedNegativePnlCollateral.toString()) /
|
|
22
|
+
Math.pow(10, decimals),
|
|
23
|
+
alreadyTransferredNegativePnlCollateral: parseFloat(data.alreadyTransferredNegativePnlCollateral.toString()) /
|
|
24
|
+
Math.pow(10, decimals),
|
|
25
|
+
virtualAvailableCollateralInDiamond: parseFloat(data.virtualAvailableCollateralInDiamond.toString()) /
|
|
26
|
+
Math.pow(10, decimals),
|
|
27
|
+
initialAccFundingFeeP: parseFloat(data.initialAccFundingFeeP.toString()) /
|
|
28
|
+
converter_1.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
|
|
29
|
+
initialAccBorrowingFeeP: parseFloat(data.initialAccBorrowingFeeP.toString()) /
|
|
30
|
+
borrowingV2_1.BORROWING_V2_PRECISION.ACC_FEE,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
exports.convertTradeFeesData = convertTradeFeesData;
|
|
34
|
+
/**
|
|
35
|
+
* @dev Converts array of TradeFeesData from contract
|
|
36
|
+
* @param dataArray Array of trade fees data
|
|
37
|
+
* @param collateralConfig Config for the collateral
|
|
38
|
+
* @returns Array of normalized trade fees data
|
|
39
|
+
*/
|
|
40
|
+
const convertTradeFeesDataArray = (dataArray, collateralConfig) => {
|
|
41
|
+
return dataArray.map(data => (0, exports.convertTradeFeesData)(data, collateralConfig));
|
|
42
|
+
};
|
|
43
|
+
exports.convertTradeFeesDataArray = convertTradeFeesDataArray;
|
|
44
|
+
/**
|
|
45
|
+
* @dev Converts contract UiRealizedPnlData to SDK format
|
|
46
|
+
* @param data UI realized PnL data from contract
|
|
47
|
+
* @param collateralConfig Config for the collateral (contains decimals)
|
|
48
|
+
* @returns Normalized UI realized PnL data
|
|
49
|
+
*/
|
|
50
|
+
const convertUiRealizedPnlData = (data, collateralConfig) => {
|
|
51
|
+
const decimals = collateralConfig.decimals || 18;
|
|
52
|
+
return {
|
|
53
|
+
realizedTradingFeesCollateral: parseFloat(data.realizedTradingFeesCollateral.toString()) /
|
|
54
|
+
Math.pow(10, decimals),
|
|
55
|
+
realizedOldBorrowingFeesCollateral: parseFloat(data.realizedOldBorrowingFeesCollateral.toString()) /
|
|
56
|
+
Math.pow(10, decimals),
|
|
57
|
+
realizedNewBorrowingFeesCollateral: parseFloat(data.realizedNewBorrowingFeesCollateral.toString()) /
|
|
58
|
+
Math.pow(10, decimals),
|
|
59
|
+
realizedFundingFeesCollateral: parseFloat(data.realizedFundingFeesCollateral.toString()) /
|
|
60
|
+
Math.pow(10, decimals),
|
|
61
|
+
realizedPnlPartialCloseCollateral: parseFloat(data.realizedPnlPartialCloseCollateral.toString()) /
|
|
62
|
+
Math.pow(10, decimals),
|
|
63
|
+
pnlWithdrawnCollateral: parseFloat(data.pnlWithdrawnCollateral.toString()) / Math.pow(10, decimals),
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.convertUiRealizedPnlData = convertUiRealizedPnlData;
|
|
67
|
+
/**
|
|
68
|
+
* @dev Converts array of UiRealizedPnlData from contract
|
|
69
|
+
* @param dataArray Array of UI realized PnL data
|
|
70
|
+
* @param collateralConfig Config for the collateral
|
|
71
|
+
* @returns Array of normalized UI realized PnL data
|
|
72
|
+
*/
|
|
73
|
+
const convertUiRealizedPnlDataArray = (dataArray, collateralConfig) => {
|
|
74
|
+
return dataArray.map(data => (0, exports.convertUiRealizedPnlData)(data, collateralConfig));
|
|
75
|
+
};
|
|
76
|
+
exports.convertUiRealizedPnlDataArray = convertUiRealizedPnlDataArray;
|
|
77
|
+
/**
|
|
78
|
+
* @dev Converts TradeFeesData to contract format (for encoding)
|
|
79
|
+
* @param data SDK trade fees data
|
|
80
|
+
* @param collateralConfig Config for the collateral
|
|
81
|
+
* @returns Contract-formatted trade fees data
|
|
82
|
+
*/
|
|
83
|
+
const encodeTradeFeesData = (data, collateralConfig) => {
|
|
84
|
+
const decimals = collateralConfig.decimals || 18;
|
|
85
|
+
return {
|
|
86
|
+
realizedTradingFeesCollateral: Math.round(data.realizedTradingFeesCollateral * Math.pow(10, decimals)),
|
|
87
|
+
realizedPnlCollateral: Math.round(data.realizedPnlCollateral * Math.pow(10, decimals)),
|
|
88
|
+
manuallyRealizedNegativePnlCollateral: Math.round(data.manuallyRealizedNegativePnlCollateral * Math.pow(10, decimals)),
|
|
89
|
+
alreadyTransferredNegativePnlCollateral: Math.round(data.alreadyTransferredNegativePnlCollateral * Math.pow(10, decimals)),
|
|
90
|
+
virtualAvailableCollateralInDiamond: Math.round(data.virtualAvailableCollateralInDiamond * Math.pow(10, decimals)),
|
|
91
|
+
__placeholder: 0,
|
|
92
|
+
initialAccFundingFeeP: Math.round(data.initialAccFundingFeeP * converter_1.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P),
|
|
93
|
+
initialAccBorrowingFeeP: Math.round(data.initialAccBorrowingFeeP * borrowingV2_1.BORROWING_V2_PRECISION.ACC_FEE),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
exports.encodeTradeFeesData = encodeTradeFeesData;
|
|
97
|
+
/**
|
|
98
|
+
* @dev Converts UiRealizedPnlData to contract format (for encoding)
|
|
99
|
+
* @param data SDK UI realized PnL data
|
|
100
|
+
* @param collateralConfig Config for the collateral
|
|
101
|
+
* @returns Contract-formatted UI realized PnL data
|
|
102
|
+
*/
|
|
103
|
+
const encodeUiRealizedPnlData = (data, collateralConfig) => {
|
|
104
|
+
const decimals = collateralConfig.decimals || 18;
|
|
105
|
+
return {
|
|
106
|
+
realizedTradingFeesCollateral: Math.round(data.realizedTradingFeesCollateral * Math.pow(10, decimals)),
|
|
107
|
+
realizedOldBorrowingFeesCollateral: Math.round(data.realizedOldBorrowingFeesCollateral * Math.pow(10, decimals)),
|
|
108
|
+
realizedNewBorrowingFeesCollateral: Math.round(data.realizedNewBorrowingFeesCollateral * Math.pow(10, decimals)),
|
|
109
|
+
realizedFundingFeesCollateral: Math.round(data.realizedFundingFeesCollateral * Math.pow(10, decimals)),
|
|
110
|
+
realizedPnlPartialCloseCollateral: Math.round(data.realizedPnlPartialCloseCollateral * Math.pow(10, decimals)),
|
|
111
|
+
pnlWithdrawnCollateral: Math.round(data.pnlWithdrawnCollateral * Math.pow(10, decimals)),
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
exports.encodeUiRealizedPnlData = encodeUiRealizedPnlData;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Builder functions for funding fees context
|
|
3
|
+
*/
|
|
4
|
+
import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
|
|
5
|
+
import { GetPairFundingFeeContext } from "./pairContext";
|
|
6
|
+
/**
|
|
7
|
+
* @dev Builds funding fees sub-context for a specific pair
|
|
8
|
+
*/
|
|
9
|
+
export declare const buildFundingContext: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, currentTimestamp: number) => GetPairFundingFeeContext | undefined;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Builder functions for funding fees context
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildFundingContext = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* @dev Builds funding fees sub-context for a specific pair
|
|
9
|
+
*/
|
|
10
|
+
const buildFundingContext = (globalTradingVariables, collateralIndex, pairIndex, currentTimestamp) => {
|
|
11
|
+
var _a, _b, _c, _d, _e;
|
|
12
|
+
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
13
|
+
if (!(collateral === null || collateral === void 0 ? void 0 : collateral.pairFundingFees)) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
const params = (_a = collateral.pairFundingFees.params) === null || _a === void 0 ? void 0 : _a[pairIndex];
|
|
17
|
+
const data = (_b = collateral.pairFundingFees.data) === null || _b === void 0 ? void 0 : _b[pairIndex];
|
|
18
|
+
const pairOi = (_c = collateral.pairOis) === null || _c === void 0 ? void 0 : _c[pairIndex];
|
|
19
|
+
if (!params || !data) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
params,
|
|
24
|
+
data,
|
|
25
|
+
pairOi: pairOi
|
|
26
|
+
? {
|
|
27
|
+
oiLongToken: ((_d = pairOi.token) === null || _d === void 0 ? void 0 : _d.long) || 0,
|
|
28
|
+
oiShortToken: ((_e = pairOi.token) === null || _e === void 0 ? void 0 : _e.short) || 0,
|
|
29
|
+
}
|
|
30
|
+
: undefined,
|
|
31
|
+
currentTimestamp,
|
|
32
|
+
// TODO: Add net exposure when available
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
exports.buildFundingContext = buildFundingContext;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { GNSMultiCollatDiamond } from "
|
|
2
|
-
import type { TradeInitialAccFees } from "
|
|
1
|
+
import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
|
|
2
|
+
import type { TradeInitialAccFees } from ".";
|
|
3
3
|
/**
|
|
4
4
|
* @dev Fetches pending accumulated funding fees for a specific pair
|
|
5
5
|
* @param contract GNSMultiCollatDiamond contract instance
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @dev Based on skew-based funding rate model with velocity and APR multipliers
|
|
4
4
|
*/
|
|
5
5
|
import { FundingFeeParams, PairFundingFeeData, GetFundingFeeContext, TradeFundingFeeResult, PairPendingAccFundingFeesResult, PairOiAfterV10 } from "./types";
|
|
6
|
+
import { GetPairFundingFeeContext } from "./pairContext";
|
|
6
7
|
/**
|
|
7
8
|
* @dev Calculates current funding velocity per year based on skew
|
|
8
9
|
* @param netExposureToken Net exposure (long - short) in tokens
|
|
@@ -57,12 +58,12 @@ export declare const getLongShortAprMultiplier: (avgFundingRatePerSecondP: numbe
|
|
|
57
58
|
*/
|
|
58
59
|
export declare const getPairPendingAccFundingFees: (params: FundingFeeParams, data: PairFundingFeeData, currentPairPrice: number, pairOiToken: PairOiAfterV10, netExposureToken: number, netExposureUsd: number, currentTimestamp: number) => PairPendingAccFundingFeesResult;
|
|
59
60
|
/**
|
|
60
|
-
* @dev Calculates funding fees for a specific trade
|
|
61
|
-
* @param trade Trade parameters (collateral amount, leverage, open price, long/short
|
|
61
|
+
* @dev Calculates funding fees for a specific trade
|
|
62
|
+
* @param trade Trade parameters (collateral amount, leverage, open price, long/short)
|
|
62
63
|
* @param tradeInfo Trade info (contracts version)
|
|
63
64
|
* @param tradeFeesData Trade fees data containing initial acc funding fee
|
|
64
65
|
* @param currentPairPrice Current pair price
|
|
65
|
-
* @param context
|
|
66
|
+
* @param context Pair-specific funding fee context
|
|
66
67
|
* @returns Funding fee in collateral tokens
|
|
67
68
|
*/
|
|
68
69
|
export declare const getTradeFundingFeesCollateral: (trade: {
|
|
@@ -70,51 +71,35 @@ export declare const getTradeFundingFeesCollateral: (trade: {
|
|
|
70
71
|
leverage: number;
|
|
71
72
|
openPrice: number;
|
|
72
73
|
long: boolean;
|
|
73
|
-
collateralIndex?: number;
|
|
74
|
-
pairIndex?: number;
|
|
75
74
|
}, tradeInfo: {
|
|
76
75
|
contractsVersion: number;
|
|
77
76
|
}, tradeFeesData: {
|
|
78
77
|
initialAccFundingFeeP: number;
|
|
79
|
-
}, currentPairPrice: number, context
|
|
80
|
-
pairOiAfterV10?: {
|
|
81
|
-
[collateralIndex: number]: {
|
|
82
|
-
[pairIndex: number]: PairOiAfterV10;
|
|
83
|
-
};
|
|
84
|
-
} | undefined;
|
|
85
|
-
netExposureToken?: {
|
|
86
|
-
[collateralIndex: number]: {
|
|
87
|
-
[pairIndex: number]: number;
|
|
88
|
-
};
|
|
89
|
-
} | undefined;
|
|
90
|
-
netExposureUsd?: {
|
|
91
|
-
[collateralIndex: number]: {
|
|
92
|
-
[pairIndex: number]: number;
|
|
93
|
-
};
|
|
94
|
-
} | undefined;
|
|
95
|
-
}) | undefined) => number;
|
|
78
|
+
}, currentPairPrice: number, context: GetPairFundingFeeContext) => number;
|
|
96
79
|
/**
|
|
97
80
|
* @dev Main function to calculate funding fees for a trade within context
|
|
81
|
+
* @param input Trade funding fee input parameters
|
|
98
82
|
* @param context Funding fee context with params and data
|
|
99
|
-
* @param collateralIndex Collateral index
|
|
100
|
-
* @param pairIndex Pair index
|
|
101
|
-
* @param trade Trade details
|
|
102
|
-
* @param tradeInfo Trade info (contracts version)
|
|
103
|
-
* @param initialAccFundingFeeP Initial accumulated funding fee
|
|
104
|
-
* @param currentPairPrice Current pair price
|
|
105
|
-
* @param pairOiToken Pair OI after v10
|
|
106
|
-
* @param netExposureToken Net exposure in tokens
|
|
107
|
-
* @param netExposureUsd Net exposure in USD
|
|
108
83
|
* @returns Complete funding fee calculation result
|
|
109
84
|
*/
|
|
110
|
-
export declare const getTradeFundingFees: (
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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;
|
|
118
103
|
/**
|
|
119
104
|
* @dev Simple version of getTradeFundingFeesCollateral for backward compatibility
|
|
120
105
|
* @param trade Trade parameters
|
|
@@ -133,3 +118,7 @@ export declare const getTradeFundingFeesCollateralSimple: (trade: {
|
|
|
133
118
|
}, initialAccFundingFeeP: number, currentAccFundingFeeP: number) => number;
|
|
134
119
|
export * as FundingFees from "./types";
|
|
135
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";
|
|
@@ -26,8 +26,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
26
26
|
__setModuleDefault(result, mod);
|
|
27
27
|
return result;
|
|
28
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
|
+
};
|
|
29
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
33
|
exports.FundingFees = exports.getTradeFundingFeesCollateralSimple = exports.getTradeFundingFees = exports.getTradeFundingFeesCollateral = exports.getPairPendingAccFundingFees = exports.getLongShortAprMultiplier = exports.getAvgFundingRatePerSecondP = exports.getSecondsToReachZeroRate = exports.getCurrentFundingVelocityPerYear = void 0;
|
|
34
|
+
const types_1 = require("../../../contracts/types");
|
|
31
35
|
// Constants from contract
|
|
32
36
|
const FUNDING_APR_MULTIPLIER_CAP = 100; // Smaller side can earn up to 100x more APR
|
|
33
37
|
const ONE_YEAR = 365 * 24 * 60 * 60; // 1 year in seconds
|
|
@@ -222,81 +226,61 @@ const getPairPendingAccFundingFees = (params, data, currentPairPrice, pairOiToke
|
|
|
222
226
|
};
|
|
223
227
|
exports.getPairPendingAccFundingFees = getPairPendingAccFundingFees;
|
|
224
228
|
/**
|
|
225
|
-
* @dev Calculates funding fees for a specific trade
|
|
226
|
-
* @param trade Trade parameters (collateral amount, leverage, open price, long/short
|
|
229
|
+
* @dev Calculates funding fees for a specific trade
|
|
230
|
+
* @param trade Trade parameters (collateral amount, leverage, open price, long/short)
|
|
227
231
|
* @param tradeInfo Trade info (contracts version)
|
|
228
232
|
* @param tradeFeesData Trade fees data containing initial acc funding fee
|
|
229
233
|
* @param currentPairPrice Current pair price
|
|
230
|
-
* @param context
|
|
234
|
+
* @param context Pair-specific funding fee context
|
|
231
235
|
* @returns Funding fee in collateral tokens
|
|
232
236
|
*/
|
|
233
237
|
const getTradeFundingFeesCollateral = (trade, tradeInfo, tradeFeesData, currentPairPrice, context) => {
|
|
234
|
-
|
|
235
|
-
// Funding fees are only charged on post-v10 trades
|
|
236
|
-
if (tradeInfo.contractsVersion < 10) {
|
|
238
|
+
if (tradeInfo.contractsVersion < types_1.ContractsVersion.V10) {
|
|
237
239
|
return 0;
|
|
238
240
|
}
|
|
239
241
|
const positionSizeCollateral = trade.collateralAmount * trade.leverage;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
trade.collateralIndex !== undefined &&
|
|
243
|
-
trade.pairIndex !== undefined) {
|
|
244
|
-
const params = (_a = context.fundingParams[trade.collateralIndex]) === null || _a === void 0 ? void 0 : _a[trade.pairIndex];
|
|
245
|
-
const data = (_b = context.fundingData[trade.collateralIndex]) === null || _b === void 0 ? void 0 : _b[trade.pairIndex];
|
|
246
|
-
const pairOi = (_d = (_c = context.pairOiAfterV10) === null || _c === void 0 ? void 0 : _c[trade.collateralIndex]) === null || _d === void 0 ? void 0 : _d[trade.pairIndex];
|
|
247
|
-
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;
|
|
248
|
-
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;
|
|
249
|
-
if (params && data && pairOi) {
|
|
250
|
-
// Calculate pending accumulated fees
|
|
251
|
-
const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(params, data, currentPairPrice, pairOi, netExposureToken, netExposureUsd, context.currentTimestamp);
|
|
252
|
-
const currentAccFundingFeeP = trade.long
|
|
253
|
-
? accFundingFeeLongP
|
|
254
|
-
: accFundingFeeShortP;
|
|
255
|
-
const fundingFeeDelta = currentAccFundingFeeP - tradeFeesData.initialAccFundingFeeP;
|
|
256
|
-
return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice;
|
|
257
|
-
}
|
|
242
|
+
if (!context.params.fundingFeesEnabled) {
|
|
243
|
+
return 0;
|
|
258
244
|
}
|
|
259
|
-
|
|
245
|
+
// Calculate pending accumulated fees
|
|
246
|
+
const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(context.params, context.data, currentPairPrice, context.pairOi || { oiLongToken: 0, oiShortToken: 0 }, context.netExposureToken || 0, context.netExposureUsd || 0, context.currentTimestamp);
|
|
247
|
+
const currentAccFundingFeeP = trade.long
|
|
248
|
+
? accFundingFeeLongP
|
|
249
|
+
: accFundingFeeShortP;
|
|
250
|
+
const fundingFeeDelta = currentAccFundingFeeP - tradeFeesData.initialAccFundingFeeP;
|
|
251
|
+
return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice / 100;
|
|
260
252
|
};
|
|
261
253
|
exports.getTradeFundingFeesCollateral = getTradeFundingFeesCollateral;
|
|
262
254
|
/**
|
|
263
255
|
* @dev Main function to calculate funding fees for a trade within context
|
|
256
|
+
* @param input Trade funding fee input parameters
|
|
264
257
|
* @param context Funding fee context with params and data
|
|
265
|
-
* @param collateralIndex Collateral index
|
|
266
|
-
* @param pairIndex Pair index
|
|
267
|
-
* @param trade Trade details
|
|
268
|
-
* @param tradeInfo Trade info (contracts version)
|
|
269
|
-
* @param initialAccFundingFeeP Initial accumulated funding fee
|
|
270
|
-
* @param currentPairPrice Current pair price
|
|
271
|
-
* @param pairOiToken Pair OI after v10
|
|
272
|
-
* @param netExposureToken Net exposure in tokens
|
|
273
|
-
* @param netExposureUsd Net exposure in USD
|
|
274
258
|
* @returns Complete funding fee calculation result
|
|
275
259
|
*/
|
|
276
|
-
const getTradeFundingFees = (
|
|
260
|
+
const getTradeFundingFees = (input, context) => {
|
|
277
261
|
var _a, _b;
|
|
278
262
|
// Get params and data from context
|
|
279
|
-
const params = (_a = context.fundingParams[collateralIndex]) === null || _a === void 0 ? void 0 : _a[pairIndex];
|
|
280
|
-
const data = (_b = context.fundingData[collateralIndex]) === null || _b === void 0 ? void 0 : _b[pairIndex];
|
|
263
|
+
const params = (_a = context.fundingParams[input.collateralIndex]) === null || _a === void 0 ? void 0 : _a[input.pairIndex];
|
|
264
|
+
const data = (_b = context.fundingData[input.collateralIndex]) === null || _b === void 0 ? void 0 : _b[input.pairIndex];
|
|
281
265
|
if (!params || !data) {
|
|
282
|
-
throw new Error(`Missing funding fee data for collateral ${collateralIndex} pair ${pairIndex}`);
|
|
266
|
+
throw new Error(`Missing funding fee data for collateral ${input.collateralIndex} pair ${input.pairIndex}`);
|
|
283
267
|
}
|
|
284
268
|
// Calculate pending accumulated fees
|
|
285
|
-
const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(params, data, currentPairPrice, pairOiToken, netExposureToken, netExposureUsd, context.currentTimestamp);
|
|
286
|
-
const currentAccFundingFeeP = trade.long
|
|
269
|
+
const { accFundingFeeLongP, accFundingFeeShortP } = (0, exports.getPairPendingAccFundingFees)(params, data, input.currentPairPrice, input.pairOiToken, input.netExposureToken, input.netExposureUsd, context.currentTimestamp);
|
|
270
|
+
const currentAccFundingFeeP = input.trade.long
|
|
287
271
|
? accFundingFeeLongP
|
|
288
272
|
: accFundingFeeShortP;
|
|
289
273
|
// Calculate funding fee in collateral
|
|
290
|
-
const fundingFeeCollateral = (0, exports.getTradeFundingFeesCollateralSimple)(trade, tradeInfo, initialAccFundingFeeP, currentAccFundingFeeP);
|
|
274
|
+
const fundingFeeCollateral = (0, exports.getTradeFundingFeesCollateralSimple)(input.trade, input.tradeInfo, input.initialAccFundingFeeP, currentAccFundingFeeP);
|
|
291
275
|
// Calculate funding fee as percentage
|
|
292
|
-
const fundingFeeP = trade.collateralAmount > 0
|
|
293
|
-
? (fundingFeeCollateral / trade.collateralAmount) * 100
|
|
276
|
+
const fundingFeeP = input.trade.collateralAmount > 0
|
|
277
|
+
? (fundingFeeCollateral / input.trade.collateralAmount) * 100
|
|
294
278
|
: 0;
|
|
295
279
|
return {
|
|
296
280
|
fundingFeeCollateral,
|
|
297
281
|
fundingFeeP,
|
|
298
282
|
currentAccFundingFeeP,
|
|
299
|
-
initialAccFundingFeeP,
|
|
283
|
+
initialAccFundingFeeP: input.initialAccFundingFeeP,
|
|
300
284
|
};
|
|
301
285
|
};
|
|
302
286
|
exports.getTradeFundingFees = getTradeFundingFees;
|
|
@@ -310,13 +294,16 @@ exports.getTradeFundingFees = getTradeFundingFees;
|
|
|
310
294
|
*/
|
|
311
295
|
const getTradeFundingFeesCollateralSimple = (trade, tradeInfo, initialAccFundingFeeP, currentAccFundingFeeP) => {
|
|
312
296
|
// Funding fees are only charged on post-v10 trades
|
|
313
|
-
if (tradeInfo.contractsVersion <
|
|
297
|
+
if (tradeInfo.contractsVersion < types_1.ContractsVersion.V10) {
|
|
314
298
|
return 0;
|
|
315
299
|
}
|
|
316
300
|
const positionSizeCollateral = trade.collateralAmount * trade.leverage;
|
|
317
301
|
const fundingFeeDelta = currentAccFundingFeeP - initialAccFundingFeeP;
|
|
318
|
-
return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice;
|
|
302
|
+
return (positionSizeCollateral * fundingFeeDelta) / trade.openPrice / 100;
|
|
319
303
|
};
|
|
320
304
|
exports.getTradeFundingFeesCollateralSimple = getTradeFundingFeesCollateralSimple;
|
|
321
305
|
// Export namespace for types
|
|
322
306
|
exports.FundingFees = __importStar(require("./types"));
|
|
307
|
+
__exportStar(require("./fetcher"), exports);
|
|
308
|
+
__exportStar(require("./pairContext"), exports);
|
|
309
|
+
__exportStar(require("./builder"), exports);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Pair-specific funding fee types and utilities
|
|
3
|
+
*/
|
|
4
|
+
import { FundingFeeParams, PairFundingFeeData, PairGlobalParams, PairOiAfterV10, PairPendingAccFundingFeesResult } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* @dev Context for pair-specific funding fee calculations
|
|
7
|
+
*/
|
|
8
|
+
export type GetPairFundingFeeContext = {
|
|
9
|
+
currentTimestamp: number;
|
|
10
|
+
params: FundingFeeParams;
|
|
11
|
+
data: PairFundingFeeData;
|
|
12
|
+
globalParams?: PairGlobalParams;
|
|
13
|
+
pairOi?: PairOiAfterV10;
|
|
14
|
+
netExposureToken?: number;
|
|
15
|
+
netExposureUsd?: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @dev Input for pair-specific trade funding fee calculation
|
|
19
|
+
*/
|
|
20
|
+
export type PairTradeFundingFeeInput = {
|
|
21
|
+
positionSizeCollateral: number;
|
|
22
|
+
openPrice: number;
|
|
23
|
+
long: boolean;
|
|
24
|
+
currentPairPrice: number;
|
|
25
|
+
initialAccFundingFeeP: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* @dev Calculate pending accumulated funding fees for a pair using pair-specific context
|
|
29
|
+
* @param currentPairPrice Current price of the pair
|
|
30
|
+
* @param context Pair-specific funding context
|
|
31
|
+
* @returns Pending accumulated funding fees
|
|
32
|
+
*/
|
|
33
|
+
export declare const getPairPendingAccFundingFees: (currentPairPrice: number, context: GetPairFundingFeeContext) => PairPendingAccFundingFeesResult;
|