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