@gainsnetwork/sdk 0.2.67-rc6 → 0.2.67-rc8
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 +312 -0
- package/lib/backend/tradingVariables/backend.types.js +2 -0
- package/lib/backend/tradingVariables/converter.d.ts +31 -0
- package/lib/backend/tradingVariables/converter.js +330 -0
- package/lib/backend/tradingVariables/index.d.ts +5 -0
- package/lib/backend/tradingVariables/index.js +95 -0
- package/lib/backend/tradingVariables/types.d.ts +109 -0
- package/lib/backend/tradingVariables/types.js +14 -0
- package/lib/constants.js +2 -3
- 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/GNSMultiCollatDiamond.d.ts +2140 -286
- 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/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/GNSTradingStorage.d.ts +1387 -0
- package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
- package/lib/contracts/types/generated/GToken.d.ts +78 -107
- 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/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.d.ts +90 -53
- package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +4502 -427
- 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/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.js +65 -142
- package/lib/contracts/utils/openLimitOrders.d.ts +8 -0
- package/lib/contracts/utils/openLimitOrders.js +88 -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/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/builder.d.ts +14 -0
- package/lib/trade/fees/borrowing/builder.js +33 -0
- 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 +75 -0
- package/lib/trade/fees/borrowingV2/converter.js +132 -0
- package/lib/trade/fees/borrowingV2/fetcher.d.ts +75 -0
- package/lib/trade/fees/borrowingV2/fetcher.js +185 -0
- package/lib/trade/fees/borrowingV2/index.d.ts +48 -0
- package/lib/trade/fees/borrowingV2/index.js +112 -0
- package/lib/trade/fees/borrowingV2/types.d.ts +95 -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/builder.d.ts +9 -0
- package/lib/trade/fees/fundingFees/builder.js +35 -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 +146 -0
- package/lib/trade/fees/fundingFees/index.js +346 -0
- package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
- package/lib/trade/fees/fundingFees/pairContext.js +17 -0
- package/lib/trade/fees/fundingFees/types.d.ts +77 -0
- package/lib/trade/fees/fundingFees/types.js +5 -0
- package/lib/trade/fees/tiers/converter.d.ts +54 -0
- package/lib/trade/fees/tiers/converter.js +81 -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 +30 -0
- package/lib/trade/fees/trading/converter.js +43 -0
- package/lib/trade/fees/trading/index.d.ts +62 -0
- package/lib/trade/fees/trading/index.js +155 -0
- package/lib/trade/fees/trading/types.d.ts +48 -0
- package/lib/trade/fees/trading/types.js +5 -0
- 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 +26 -0
- package/lib/trade/liquidation/index.js +142 -0
- package/lib/trade/liquidation/types.d.ts +59 -0
- package/lib/trade/liquidation/types.js +2 -0
- package/lib/trade/openLimitOrder.d.ts +2 -0
- package/lib/trade/openLimitOrder.js +23 -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 +77 -0
- package/lib/trade/pnl/index.js +270 -0
- package/lib/trade/pnl/types.d.ts +114 -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/utils.d.ts +18 -0
- package/lib/trade/utils.js +30 -0
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { IFundingFees } from "../../../contracts/types/generated/GNSMultiCollatDiamond";
|
|
2
|
+
import { BorrowingFeeV2 } from ".";
|
|
3
|
+
/**
|
|
4
|
+
* @dev Converts contract BorrowingFeeParams to SDK type
|
|
5
|
+
* @param contractParams Contract borrowing fee params from IFundingFees.BorrowingFeeParams
|
|
6
|
+
* @returns SDK BorrowingFeeParams
|
|
7
|
+
*/
|
|
8
|
+
export declare const convertBorrowingFeeParams: (contractParams: IFundingFees.BorrowingFeeParamsStructOutput) => BorrowingFeeV2.BorrowingFeeParams;
|
|
9
|
+
/**
|
|
10
|
+
* @dev Converts array of contract BorrowingFeeParams to SDK types
|
|
11
|
+
* @param contractParamsArray Array of contract borrowing fee params
|
|
12
|
+
* @returns Array of SDK BorrowingFeeParams
|
|
13
|
+
*/
|
|
14
|
+
export declare const convertBorrowingFeeParamsArray: (contractParamsArray: IFundingFees.BorrowingFeeParamsStructOutput[]) => BorrowingFeeV2.BorrowingFeeParams[];
|
|
15
|
+
/**
|
|
16
|
+
* @dev Converts contract PairBorrowingFeeData to SDK type
|
|
17
|
+
* @param contractData Contract pair borrowing fee data from IFundingFees.PairBorrowingFeeData
|
|
18
|
+
* @returns SDK PairBorrowingFeeData
|
|
19
|
+
*/
|
|
20
|
+
export declare const convertPairBorrowingFeeData: (contractData: IFundingFees.PairBorrowingFeeDataStructOutput) => BorrowingFeeV2.PairBorrowingFeeData;
|
|
21
|
+
/**
|
|
22
|
+
* @dev Converts array of contract PairBorrowingFeeData to SDK types
|
|
23
|
+
* @param contractDataArray Array of contract pair borrowing fee data
|
|
24
|
+
* @returns Array of SDK PairBorrowingFeeData
|
|
25
|
+
*/
|
|
26
|
+
export declare const convertPairBorrowingFeeDataArray: (contractDataArray: IFundingFees.PairBorrowingFeeDataStructOutput[]) => BorrowingFeeV2.PairBorrowingFeeData[];
|
|
27
|
+
/**
|
|
28
|
+
* @dev Converts contract TradeFeesData to SDK TradeInitialAccFees
|
|
29
|
+
* @param contractTradeData Contract trade fees data from IFundingFees.TradeFeesData
|
|
30
|
+
* @returns SDK TradeInitialAccFees
|
|
31
|
+
*/
|
|
32
|
+
export declare const convertTradeInitialAccFees: (contractTradeData: IFundingFees.TradeFeesDataStructOutput) => BorrowingFeeV2.TradeInitialAccFees;
|
|
33
|
+
/**
|
|
34
|
+
* @dev Converts array of contract TradeFeesData to SDK TradeInitialAccFees
|
|
35
|
+
* @param contractTradeDataArray Array of contract trade fees data
|
|
36
|
+
* @returns Array of SDK TradeInitialAccFees
|
|
37
|
+
*/
|
|
38
|
+
export declare const convertTradeInitialAccFeesArray: (contractTradeDataArray: IFundingFees.TradeFeesDataStructOutput[]) => BorrowingFeeV2.TradeInitialAccFees[];
|
|
39
|
+
/**
|
|
40
|
+
* @dev Creates a context object from contract data arrays
|
|
41
|
+
* @param pairIndices Array of pair indices
|
|
42
|
+
* @param borrowingParams Array of borrowing fee params from contract
|
|
43
|
+
* @param borrowingData Array of pair borrowing fee data from contract
|
|
44
|
+
* @param currentTimestamp Optional current timestamp
|
|
45
|
+
* @returns Complete SDK context for borrowing v2 calculations (collateral-scoped)
|
|
46
|
+
*/
|
|
47
|
+
export declare const createBorrowingV2Context: (pairIndices: number[], borrowingParams: IFundingFees.BorrowingFeeParamsStructOutput[], borrowingData: IFundingFees.PairBorrowingFeeDataStructOutput[], currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
|
|
48
|
+
/**
|
|
49
|
+
* @dev Helper function to validate borrowing rate per second
|
|
50
|
+
* @param borrowingRatePerSecondP Borrowing rate per second (normalized float)
|
|
51
|
+
* @returns True if rate is within valid bounds
|
|
52
|
+
*/
|
|
53
|
+
export declare const isValidBorrowingRate: (borrowingRatePerSecondP: number) => boolean;
|
|
54
|
+
/**
|
|
55
|
+
* @dev Helper function to convert borrowing rate to APR percentage
|
|
56
|
+
* @param borrowingRatePerSecondP Borrowing rate per second (normalized float)
|
|
57
|
+
* @returns APR as percentage (e.g., 10.5 for 10.5% APR)
|
|
58
|
+
*/
|
|
59
|
+
export declare const borrowingRateToAPR: (borrowingRatePerSecondP: number) => number;
|
|
60
|
+
/**
|
|
61
|
+
* @dev Helper function to convert APR percentage to borrowing rate per second
|
|
62
|
+
* @param aprPercentage APR as percentage (e.g., 10.5 for 10.5% APR)
|
|
63
|
+
* @returns Borrowing rate per second (normalized float)
|
|
64
|
+
*/
|
|
65
|
+
export declare const aprToBorrowingRate: (aprPercentage: number) => number;
|
|
66
|
+
/**
|
|
67
|
+
* @dev Creates a collateral-scoped context from frontend data structure
|
|
68
|
+
* @param collateralBorrowingData Data structure from frontend (params and data arrays)
|
|
69
|
+
* @param currentTimestamp Optional current timestamp
|
|
70
|
+
* @returns Collateral-scoped borrowing fee v2 context
|
|
71
|
+
*/
|
|
72
|
+
export declare const createCollateralScopedBorrowingContext: (collateralBorrowingData: {
|
|
73
|
+
params: BorrowingFeeV2.BorrowingFeeParams[];
|
|
74
|
+
data: BorrowingFeeV2.PairBorrowingFeeData[];
|
|
75
|
+
}, currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCollateralScopedBorrowingContext = exports.aprToBorrowingRate = exports.borrowingRateToAPR = exports.isValidBorrowingRate = exports.createBorrowingV2Context = exports.convertTradeInitialAccFeesArray = exports.convertTradeInitialAccFees = exports.convertPairBorrowingFeeDataArray = exports.convertPairBorrowingFeeData = exports.convertBorrowingFeeParamsArray = exports.convertBorrowingFeeParams = void 0;
|
|
4
|
+
const index_1 = require("./index");
|
|
5
|
+
/**
|
|
6
|
+
* @dev Converts contract BorrowingFeeParams to SDK type
|
|
7
|
+
* @param contractParams Contract borrowing fee params from IFundingFees.BorrowingFeeParams
|
|
8
|
+
* @returns SDK BorrowingFeeParams
|
|
9
|
+
*/
|
|
10
|
+
const convertBorrowingFeeParams = (contractParams) => ({
|
|
11
|
+
borrowingRatePerSecondP: contractParams.borrowingRatePerSecondP /
|
|
12
|
+
index_1.BORROWING_V2_PRECISION.RATE_PER_SECOND,
|
|
13
|
+
});
|
|
14
|
+
exports.convertBorrowingFeeParams = convertBorrowingFeeParams;
|
|
15
|
+
/**
|
|
16
|
+
* @dev Converts array of contract BorrowingFeeParams to SDK types
|
|
17
|
+
* @param contractParamsArray Array of contract borrowing fee params
|
|
18
|
+
* @returns Array of SDK BorrowingFeeParams
|
|
19
|
+
*/
|
|
20
|
+
const convertBorrowingFeeParamsArray = (contractParamsArray) => contractParamsArray.map(params => (0, exports.convertBorrowingFeeParams)(params));
|
|
21
|
+
exports.convertBorrowingFeeParamsArray = convertBorrowingFeeParamsArray;
|
|
22
|
+
/**
|
|
23
|
+
* @dev Converts contract PairBorrowingFeeData to SDK type
|
|
24
|
+
* @param contractData Contract pair borrowing fee data from IFundingFees.PairBorrowingFeeData
|
|
25
|
+
* @returns SDK PairBorrowingFeeData
|
|
26
|
+
*/
|
|
27
|
+
const convertPairBorrowingFeeData = (contractData) => ({
|
|
28
|
+
accBorrowingFeeP: parseFloat(contractData.accBorrowingFeeP.toString()) /
|
|
29
|
+
index_1.BORROWING_V2_PRECISION.ACC_FEE,
|
|
30
|
+
lastBorrowingUpdateTs: contractData.lastBorrowingUpdateTs,
|
|
31
|
+
});
|
|
32
|
+
exports.convertPairBorrowingFeeData = convertPairBorrowingFeeData;
|
|
33
|
+
/**
|
|
34
|
+
* @dev Converts array of contract PairBorrowingFeeData to SDK types
|
|
35
|
+
* @param contractDataArray Array of contract pair borrowing fee data
|
|
36
|
+
* @returns Array of SDK PairBorrowingFeeData
|
|
37
|
+
*/
|
|
38
|
+
const convertPairBorrowingFeeDataArray = (contractDataArray) => contractDataArray.map(data => (0, exports.convertPairBorrowingFeeData)(data));
|
|
39
|
+
exports.convertPairBorrowingFeeDataArray = convertPairBorrowingFeeDataArray;
|
|
40
|
+
/**
|
|
41
|
+
* @dev Converts contract TradeFeesData to SDK TradeInitialAccFees
|
|
42
|
+
* @param contractTradeData Contract trade fees data from IFundingFees.TradeFeesData
|
|
43
|
+
* @returns SDK TradeInitialAccFees
|
|
44
|
+
*/
|
|
45
|
+
const convertTradeInitialAccFees = (contractTradeData) => ({
|
|
46
|
+
initialAccBorrowingFeeP: parseFloat(contractTradeData.initialAccBorrowingFeeP.toString()) /
|
|
47
|
+
index_1.BORROWING_V2_PRECISION.ACC_FEE,
|
|
48
|
+
});
|
|
49
|
+
exports.convertTradeInitialAccFees = convertTradeInitialAccFees;
|
|
50
|
+
/**
|
|
51
|
+
* @dev Converts array of contract TradeFeesData to SDK TradeInitialAccFees
|
|
52
|
+
* @param contractTradeDataArray Array of contract trade fees data
|
|
53
|
+
* @returns Array of SDK TradeInitialAccFees
|
|
54
|
+
*/
|
|
55
|
+
const convertTradeInitialAccFeesArray = (contractTradeDataArray) => contractTradeDataArray.map(data => (0, exports.convertTradeInitialAccFees)(data));
|
|
56
|
+
exports.convertTradeInitialAccFeesArray = convertTradeInitialAccFeesArray;
|
|
57
|
+
/**
|
|
58
|
+
* @dev Creates a context object from contract data arrays
|
|
59
|
+
* @param pairIndices Array of pair indices
|
|
60
|
+
* @param borrowingParams Array of borrowing fee params from contract
|
|
61
|
+
* @param borrowingData Array of pair borrowing fee data from contract
|
|
62
|
+
* @param currentTimestamp Optional current timestamp
|
|
63
|
+
* @returns Complete SDK context for borrowing v2 calculations (collateral-scoped)
|
|
64
|
+
*/
|
|
65
|
+
const createBorrowingV2Context = (pairIndices, borrowingParams, borrowingData, currentTimestamp) => {
|
|
66
|
+
const context = {
|
|
67
|
+
currentTimestamp,
|
|
68
|
+
borrowingParams: {},
|
|
69
|
+
borrowingData: {},
|
|
70
|
+
};
|
|
71
|
+
// Build objects indexed by pairIndex
|
|
72
|
+
for (let i = 0; i < pairIndices.length; i++) {
|
|
73
|
+
const pairIndex = pairIndices[i];
|
|
74
|
+
// Store converted data
|
|
75
|
+
context.borrowingParams[pairIndex] = (0, exports.convertBorrowingFeeParams)(borrowingParams[i]);
|
|
76
|
+
context.borrowingData[pairIndex] = (0, exports.convertPairBorrowingFeeData)(borrowingData[i]);
|
|
77
|
+
}
|
|
78
|
+
return context;
|
|
79
|
+
};
|
|
80
|
+
exports.createBorrowingV2Context = createBorrowingV2Context;
|
|
81
|
+
/**
|
|
82
|
+
* @dev Helper function to validate borrowing rate per second
|
|
83
|
+
* @param borrowingRatePerSecondP Borrowing rate per second (normalized float)
|
|
84
|
+
* @returns True if rate is within valid bounds
|
|
85
|
+
*/
|
|
86
|
+
const isValidBorrowingRate = (borrowingRatePerSecondP) => {
|
|
87
|
+
return (borrowingRatePerSecondP >= 0 &&
|
|
88
|
+
borrowingRatePerSecondP <= 317097 / index_1.BORROWING_V2_PRECISION.RATE_PER_SECOND); // Max 1,000% APR
|
|
89
|
+
};
|
|
90
|
+
exports.isValidBorrowingRate = isValidBorrowingRate;
|
|
91
|
+
/**
|
|
92
|
+
* @dev Helper function to convert borrowing rate to APR percentage
|
|
93
|
+
* @param borrowingRatePerSecondP Borrowing rate per second (normalized float)
|
|
94
|
+
* @returns APR as percentage (e.g., 10.5 for 10.5% APR)
|
|
95
|
+
*/
|
|
96
|
+
const borrowingRateToAPR = (borrowingRatePerSecondP) => {
|
|
97
|
+
const SECONDS_PER_YEAR = 365 * 24 * 60 * 60; // 31,536,000
|
|
98
|
+
return borrowingRatePerSecondP * SECONDS_PER_YEAR;
|
|
99
|
+
};
|
|
100
|
+
exports.borrowingRateToAPR = borrowingRateToAPR;
|
|
101
|
+
/**
|
|
102
|
+
* @dev Helper function to convert APR percentage to borrowing rate per second
|
|
103
|
+
* @param aprPercentage APR as percentage (e.g., 10.5 for 10.5% APR)
|
|
104
|
+
* @returns Borrowing rate per second (normalized float)
|
|
105
|
+
*/
|
|
106
|
+
const aprToBorrowingRate = (aprPercentage) => {
|
|
107
|
+
const SECONDS_PER_YEAR = 365 * 24 * 60 * 60; // 31,536,000
|
|
108
|
+
return aprPercentage / SECONDS_PER_YEAR;
|
|
109
|
+
};
|
|
110
|
+
exports.aprToBorrowingRate = aprToBorrowingRate;
|
|
111
|
+
/**
|
|
112
|
+
* @dev Creates a collateral-scoped context from frontend data structure
|
|
113
|
+
* @param collateralBorrowingData Data structure from frontend (params and data arrays)
|
|
114
|
+
* @param currentTimestamp Optional current timestamp
|
|
115
|
+
* @returns Collateral-scoped borrowing fee v2 context
|
|
116
|
+
*/
|
|
117
|
+
const createCollateralScopedBorrowingContext = (collateralBorrowingData, currentTimestamp) => {
|
|
118
|
+
const context = {
|
|
119
|
+
currentTimestamp: currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000),
|
|
120
|
+
borrowingParams: {},
|
|
121
|
+
borrowingData: {},
|
|
122
|
+
};
|
|
123
|
+
// Map arrays to objects indexed by array position (pairIndex)
|
|
124
|
+
collateralBorrowingData.params.forEach((param, index) => {
|
|
125
|
+
context.borrowingParams[index] = param;
|
|
126
|
+
});
|
|
127
|
+
collateralBorrowingData.data.forEach((data, index) => {
|
|
128
|
+
context.borrowingData[index] = data;
|
|
129
|
+
});
|
|
130
|
+
return context;
|
|
131
|
+
};
|
|
132
|
+
exports.createCollateralScopedBorrowingContext = createCollateralScopedBorrowingContext;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
|
|
2
|
+
import { BorrowingFeeV2 } from ".";
|
|
3
|
+
/**
|
|
4
|
+
* @dev Fetches borrowing fee parameters v2 for specific pairs
|
|
5
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
6
|
+
* @param collateralIndices Array of collateral indices
|
|
7
|
+
* @param pairIndices Array of pair indices
|
|
8
|
+
* @returns Promise resolving to array of borrowing fee parameters
|
|
9
|
+
*/
|
|
10
|
+
export declare const fetchBorrowingFeeParamsV2: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[]) => Promise<BorrowingFeeV2.BorrowingFeeParams[]>;
|
|
11
|
+
/**
|
|
12
|
+
* @dev Fetches pair borrowing fee data v2 for specific pairs
|
|
13
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
14
|
+
* @param collateralIndices Array of collateral indices
|
|
15
|
+
* @param pairIndices Array of pair indices
|
|
16
|
+
* @returns Promise resolving to array of pair borrowing fee data
|
|
17
|
+
*/
|
|
18
|
+
export declare const fetchPairBorrowingFeeDataV2: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[]) => Promise<BorrowingFeeV2.PairBorrowingFeeData[]>;
|
|
19
|
+
/**
|
|
20
|
+
* @dev Fetches borrowing fees in collateral tokens for a specific trade
|
|
21
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
22
|
+
* @param trader Address of the trader
|
|
23
|
+
* @param index Trade index
|
|
24
|
+
* @param currentPairPrice Current price of the trading pair (1e6 precision)
|
|
25
|
+
* @returns Promise resolving to borrowing fees in collateral tokens
|
|
26
|
+
*/
|
|
27
|
+
export declare const fetchTradeBorrowingFeesCollateralV2: (contract: GNSMultiCollatDiamond, trader: string, index: number, currentPairPrice: number) => Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* @dev Fetches pending accumulated borrowing fees for a specific pair
|
|
30
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
31
|
+
* @param collateralIndex Index of the collateral
|
|
32
|
+
* @param pairIndex Index of the trading pair
|
|
33
|
+
* @param currentPairPrice Current price of the trading pair (1e6 precision)
|
|
34
|
+
* @returns Promise resolving to pending accumulated borrowing fee
|
|
35
|
+
*/
|
|
36
|
+
export declare const fetchPairPendingAccBorrowingFeesV2: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number, currentPairPrice: number) => Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* @dev Convenience function to fetch all borrowing v2 data for specific pairs
|
|
39
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
40
|
+
* @param collateralIndex Index of the collateral
|
|
41
|
+
* @param pairIndices Array of pair indices
|
|
42
|
+
* @returns Promise resolving to complete borrowing v2 data set
|
|
43
|
+
*/
|
|
44
|
+
export declare const fetchAllBorrowingV2Data: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndices: number[]) => Promise<{
|
|
45
|
+
params: BorrowingFeeV2.BorrowingFeeParams[];
|
|
46
|
+
data: BorrowingFeeV2.PairBorrowingFeeData[];
|
|
47
|
+
context: BorrowingFeeV2.GetBorrowingFeeV2Context;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* @dev Creates a complete borrowing v2 context from contract data
|
|
51
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
52
|
+
* @param collateralIndex Index of the collateral
|
|
53
|
+
* @param pairIndices Array of pair indices
|
|
54
|
+
* @param currentTimestamp Optional current timestamp for calculations
|
|
55
|
+
* @returns Promise resolving to complete borrowing v2 context
|
|
56
|
+
*/
|
|
57
|
+
export declare const createBorrowingV2ContextFromContract: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndices: number[], currentTimestamp?: number) => Promise<BorrowingFeeV2.GetBorrowingFeeV2Context>;
|
|
58
|
+
/**
|
|
59
|
+
* @dev Helper function to create context from already fetched arrays
|
|
60
|
+
* @param collateralIndices Array of collateral indices
|
|
61
|
+
* @param pairIndices Array of pair indices
|
|
62
|
+
* @param params Array of borrowing fee parameters
|
|
63
|
+
* @param data Array of pair borrowing fee data
|
|
64
|
+
* @param currentTimestamp Optional current timestamp
|
|
65
|
+
* @returns Complete borrowing v2 context
|
|
66
|
+
*/
|
|
67
|
+
export declare const createBorrowingV2ContextFromArrays: (collateralIndices: number[], pairIndices: number[], params: BorrowingFeeV2.BorrowingFeeParams[], data: BorrowingFeeV2.PairBorrowingFeeData[], currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
|
|
68
|
+
/**
|
|
69
|
+
* @dev Fetches borrowing v2 data for multiple collateral/pair combinations
|
|
70
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
71
|
+
* @param collateralIndices Array of collateral indices
|
|
72
|
+
* @param pairIndices Array of pair indices (must match collateralIndices length)
|
|
73
|
+
* @returns Promise resolving to complete borrowing v2 context
|
|
74
|
+
*/
|
|
75
|
+
export declare const fetchBorrowingV2DataForPairs: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[]) => Promise<BorrowingFeeV2.GetBorrowingFeeV2Context>;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.fetchBorrowingV2DataForPairs = exports.createBorrowingV2ContextFromArrays = exports.createBorrowingV2ContextFromContract = exports.fetchAllBorrowingV2Data = exports.fetchPairPendingAccBorrowingFeesV2 = exports.fetchTradeBorrowingFeesCollateralV2 = exports.fetchPairBorrowingFeeDataV2 = exports.fetchBorrowingFeeParamsV2 = void 0;
|
|
13
|
+
const converter_1 = require("./converter");
|
|
14
|
+
/**
|
|
15
|
+
* @dev Fetches borrowing fee parameters v2 for specific pairs
|
|
16
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
17
|
+
* @param collateralIndices Array of collateral indices
|
|
18
|
+
* @param pairIndices Array of pair indices
|
|
19
|
+
* @returns Promise resolving to array of borrowing fee parameters
|
|
20
|
+
*/
|
|
21
|
+
const fetchBorrowingFeeParamsV2 = (contract, collateralIndices, pairIndices) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
if (collateralIndices.length !== pairIndices.length) {
|
|
23
|
+
throw new Error("Collateral indices and pair indices arrays must have the same length");
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const contractParams = yield contract.getPairBorrowingFeeParams(collateralIndices, pairIndices);
|
|
27
|
+
return (0, converter_1.convertBorrowingFeeParamsArray)(contractParams);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error("Error fetching borrowing fee params v2:", error);
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
exports.fetchBorrowingFeeParamsV2 = fetchBorrowingFeeParamsV2;
|
|
35
|
+
/**
|
|
36
|
+
* @dev Fetches pair borrowing fee data v2 for specific pairs
|
|
37
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
38
|
+
* @param collateralIndices Array of collateral indices
|
|
39
|
+
* @param pairIndices Array of pair indices
|
|
40
|
+
* @returns Promise resolving to array of pair borrowing fee data
|
|
41
|
+
*/
|
|
42
|
+
const fetchPairBorrowingFeeDataV2 = (contract, collateralIndices, pairIndices) => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
+
if (collateralIndices.length !== pairIndices.length) {
|
|
44
|
+
throw new Error("Collateral indices and pair indices arrays must have the same length");
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const contractData = yield contract.getPairBorrowingFeeData(collateralIndices, pairIndices);
|
|
48
|
+
return (0, converter_1.convertPairBorrowingFeeDataArray)(contractData);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("Error fetching pair borrowing fee data v2:", error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
exports.fetchPairBorrowingFeeDataV2 = fetchPairBorrowingFeeDataV2;
|
|
56
|
+
/**
|
|
57
|
+
* @dev Fetches borrowing fees in collateral tokens for a specific trade
|
|
58
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
59
|
+
* @param trader Address of the trader
|
|
60
|
+
* @param index Trade index
|
|
61
|
+
* @param currentPairPrice Current price of the trading pair (1e6 precision)
|
|
62
|
+
* @returns Promise resolving to borrowing fees in collateral tokens
|
|
63
|
+
*/
|
|
64
|
+
const fetchTradeBorrowingFeesCollateralV2 = (contract, trader, index, currentPairPrice) => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
try {
|
|
66
|
+
const feesCollateral = yield contract.getTradeBorrowingFeesCollateral(trader, index, currentPairPrice);
|
|
67
|
+
// Convert BigNumber to normalized float
|
|
68
|
+
// Note: Collateral precision varies by chain, but contract returns proper precision
|
|
69
|
+
return parseFloat(feesCollateral.toString());
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error("Error fetching trade borrowing fees collateral v2:", error);
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
exports.fetchTradeBorrowingFeesCollateralV2 = fetchTradeBorrowingFeesCollateralV2;
|
|
77
|
+
/**
|
|
78
|
+
* @dev Fetches pending accumulated borrowing fees for a specific pair
|
|
79
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
80
|
+
* @param collateralIndex Index of the collateral
|
|
81
|
+
* @param pairIndex Index of the trading pair
|
|
82
|
+
* @param currentPairPrice Current price of the trading pair (1e6 precision)
|
|
83
|
+
* @returns Promise resolving to pending accumulated borrowing fee
|
|
84
|
+
*/
|
|
85
|
+
const fetchPairPendingAccBorrowingFeesV2 = (contract, collateralIndex, pairIndex, currentPairPrice) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
try {
|
|
87
|
+
const accBorrowingFeeP = yield contract.getPairPendingAccBorrowingFees(collateralIndex, pairIndex, currentPairPrice);
|
|
88
|
+
// Convert BigNumber to normalized float
|
|
89
|
+
return parseFloat(accBorrowingFeeP.toString()) / 1e20;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error("Error fetching pair pending acc borrowing fees v2:", error);
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
exports.fetchPairPendingAccBorrowingFeesV2 = fetchPairPendingAccBorrowingFeesV2;
|
|
97
|
+
/**
|
|
98
|
+
* @dev Convenience function to fetch all borrowing v2 data for specific pairs
|
|
99
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
100
|
+
* @param collateralIndex Index of the collateral
|
|
101
|
+
* @param pairIndices Array of pair indices
|
|
102
|
+
* @returns Promise resolving to complete borrowing v2 data set
|
|
103
|
+
*/
|
|
104
|
+
const fetchAllBorrowingV2Data = (contract, collateralIndex, pairIndices) => __awaiter(void 0, void 0, void 0, function* () {
|
|
105
|
+
const collateralIndices = new Array(pairIndices.length).fill(collateralIndex);
|
|
106
|
+
try {
|
|
107
|
+
// Fetch both parameters and data in parallel
|
|
108
|
+
const [params, data] = yield Promise.all([
|
|
109
|
+
(0, exports.fetchBorrowingFeeParamsV2)(contract, collateralIndices, pairIndices),
|
|
110
|
+
(0, exports.fetchPairBorrowingFeeDataV2)(contract, collateralIndices, pairIndices),
|
|
111
|
+
]);
|
|
112
|
+
// Create context from fetched data
|
|
113
|
+
const context = (0, exports.createBorrowingV2ContextFromArrays)(collateralIndices, pairIndices, params, data);
|
|
114
|
+
return { params, data, context };
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error("Error fetching all borrowing v2 data:", error);
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
exports.fetchAllBorrowingV2Data = fetchAllBorrowingV2Data;
|
|
122
|
+
/**
|
|
123
|
+
* @dev Creates a complete borrowing v2 context from contract data
|
|
124
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
125
|
+
* @param collateralIndex Index of the collateral
|
|
126
|
+
* @param pairIndices Array of pair indices
|
|
127
|
+
* @param currentTimestamp Optional current timestamp for calculations
|
|
128
|
+
* @returns Promise resolving to complete borrowing v2 context
|
|
129
|
+
*/
|
|
130
|
+
const createBorrowingV2ContextFromContract = (contract, collateralIndex, pairIndices, currentTimestamp) => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
|
+
const { context } = yield (0, exports.fetchAllBorrowingV2Data)(contract, collateralIndex, pairIndices);
|
|
132
|
+
return Object.assign(Object.assign({}, context), { currentTimestamp: currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000) });
|
|
133
|
+
});
|
|
134
|
+
exports.createBorrowingV2ContextFromContract = createBorrowingV2ContextFromContract;
|
|
135
|
+
/**
|
|
136
|
+
* @dev Helper function to create context from already fetched arrays
|
|
137
|
+
* @param collateralIndices Array of collateral indices
|
|
138
|
+
* @param pairIndices Array of pair indices
|
|
139
|
+
* @param params Array of borrowing fee parameters
|
|
140
|
+
* @param data Array of pair borrowing fee data
|
|
141
|
+
* @param currentTimestamp Optional current timestamp
|
|
142
|
+
* @returns Complete borrowing v2 context
|
|
143
|
+
*/
|
|
144
|
+
const createBorrowingV2ContextFromArrays = (collateralIndices, pairIndices, params, data, currentTimestamp) => {
|
|
145
|
+
const context = {
|
|
146
|
+
currentTimestamp: currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000),
|
|
147
|
+
borrowingParams: {},
|
|
148
|
+
borrowingData: {},
|
|
149
|
+
};
|
|
150
|
+
// Build objects indexed by pairIndex (collateral-scoped)
|
|
151
|
+
for (let i = 0; i < pairIndices.length; i++) {
|
|
152
|
+
const pairIndex = pairIndices[i];
|
|
153
|
+
// Store data indexed by pairIndex
|
|
154
|
+
context.borrowingParams[pairIndex] = params[i];
|
|
155
|
+
context.borrowingData[pairIndex] = data[i];
|
|
156
|
+
}
|
|
157
|
+
return context;
|
|
158
|
+
};
|
|
159
|
+
exports.createBorrowingV2ContextFromArrays = createBorrowingV2ContextFromArrays;
|
|
160
|
+
/**
|
|
161
|
+
* @dev Fetches borrowing v2 data for multiple collateral/pair combinations
|
|
162
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
163
|
+
* @param collateralIndices Array of collateral indices
|
|
164
|
+
* @param pairIndices Array of pair indices (must match collateralIndices length)
|
|
165
|
+
* @returns Promise resolving to complete borrowing v2 context
|
|
166
|
+
*/
|
|
167
|
+
const fetchBorrowingV2DataForPairs = (contract, collateralIndices, pairIndices) => __awaiter(void 0, void 0, void 0, function* () {
|
|
168
|
+
if (collateralIndices.length !== pairIndices.length) {
|
|
169
|
+
throw new Error("Collateral indices and pair indices arrays must have the same length");
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
// Fetch both parameters and data in parallel
|
|
173
|
+
const [params, data] = yield Promise.all([
|
|
174
|
+
(0, exports.fetchBorrowingFeeParamsV2)(contract, collateralIndices, pairIndices),
|
|
175
|
+
(0, exports.fetchPairBorrowingFeeDataV2)(contract, collateralIndices, pairIndices),
|
|
176
|
+
]);
|
|
177
|
+
// Create and return context
|
|
178
|
+
return (0, exports.createBorrowingV2ContextFromArrays)(collateralIndices, pairIndices, params, data);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.error("Error fetching borrowing v2 data for pairs:", error);
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
exports.fetchBorrowingV2DataForPairs = fetchBorrowingV2DataForPairs;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as BorrowingFeeV2 from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Maximum borrowing rate per second (1,000% APR)
|
|
4
|
+
*/
|
|
5
|
+
export declare const MAX_BORROWING_RATE_PER_SECOND = 0.0317097;
|
|
6
|
+
/**
|
|
7
|
+
* @dev Precision constants for borrowing v2 calculations
|
|
8
|
+
*/
|
|
9
|
+
export declare const BORROWING_V2_PRECISION: {
|
|
10
|
+
readonly RATE_PER_SECOND: 10000000000;
|
|
11
|
+
readonly ACC_FEE: 100000000000000000000;
|
|
12
|
+
readonly PERCENTAGE: 100;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @dev Calculates pending accumulated borrowing fees for a pair
|
|
16
|
+
* @param params Borrowing fee parameters for the pair
|
|
17
|
+
* @param data Current borrowing fee data for the pair
|
|
18
|
+
* @param currentPairPrice Current price of the trading pair
|
|
19
|
+
* @param currentTimestamp Current timestamp (defaults to now)
|
|
20
|
+
* @returns Updated accumulated borrowing fee (1e20 precision)
|
|
21
|
+
*/
|
|
22
|
+
export declare const getPairPendingAccBorrowingFees: (params: BorrowingFeeV2.BorrowingFeeParams, data: BorrowingFeeV2.PairBorrowingFeeData, currentPairPrice: number, currentTimestamp?: number) => number;
|
|
23
|
+
/**
|
|
24
|
+
* @dev Calculates borrowing fees owed by a specific trade
|
|
25
|
+
* @param input Trade borrowing fee calculation input (without pairIndex)
|
|
26
|
+
* @param context Pair-specific borrowing context
|
|
27
|
+
* @returns Borrowing fees in collateral tokens
|
|
28
|
+
*/
|
|
29
|
+
export declare const getTradeBorrowingFeesCollateral: (input: Omit<BorrowingFeeV2.TradeBorrowingFeeInput, "pairIndex">, context: BorrowingFeeV2.GetPairBorrowingFeeV2Context) => number;
|
|
30
|
+
/**
|
|
31
|
+
* @dev Utility function to get pending accumulated borrowing fees for a pair using context
|
|
32
|
+
* @param input Pair borrowing fee calculation input
|
|
33
|
+
* @param context Context containing borrowing parameters and data
|
|
34
|
+
* @returns Updated accumulated borrowing fee (1e20 precision)
|
|
35
|
+
*/
|
|
36
|
+
export declare const getPairBorrowingFees: (input: BorrowingFeeV2.PairBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
|
|
37
|
+
/**
|
|
38
|
+
* @dev Utility functions for working with borrowing v2 fees
|
|
39
|
+
*/
|
|
40
|
+
export declare const borrowingFeeV2Utils: {
|
|
41
|
+
getPairPendingAccBorrowingFees: (params: BorrowingFeeV2.BorrowingFeeParams, data: BorrowingFeeV2.PairBorrowingFeeData, currentPairPrice: number, currentTimestamp?: number) => number;
|
|
42
|
+
getTradeBorrowingFeesCollateral: (input: Omit<BorrowingFeeV2.TradeBorrowingFeeInput, "pairIndex">, context: BorrowingFeeV2.GetPairBorrowingFeeV2Context) => number;
|
|
43
|
+
getPairBorrowingFees: (input: BorrowingFeeV2.PairBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
|
|
44
|
+
};
|
|
45
|
+
export * as BorrowingFeeV2 from "./types";
|
|
46
|
+
export { GetPairBorrowingFeeV2Context } from "./types";
|
|
47
|
+
export * from "./converter";
|
|
48
|
+
export * from "./fetcher";
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.BorrowingFeeV2 = exports.borrowingFeeV2Utils = exports.getPairBorrowingFees = exports.getTradeBorrowingFeesCollateral = exports.getPairPendingAccBorrowingFees = exports.BORROWING_V2_PRECISION = exports.MAX_BORROWING_RATE_PER_SECOND = void 0;
|
|
30
|
+
/**
|
|
31
|
+
* @dev Maximum borrowing rate per second (1,000% APR)
|
|
32
|
+
*/
|
|
33
|
+
exports.MAX_BORROWING_RATE_PER_SECOND = 0.0317097; // 317097 / 1e10
|
|
34
|
+
/**
|
|
35
|
+
* @dev Precision constants for borrowing v2 calculations
|
|
36
|
+
*/
|
|
37
|
+
exports.BORROWING_V2_PRECISION = {
|
|
38
|
+
RATE_PER_SECOND: 1e10,
|
|
39
|
+
ACC_FEE: 1e20,
|
|
40
|
+
PERCENTAGE: 100,
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* @dev Calculates pending accumulated borrowing fees for a pair
|
|
44
|
+
* @param params Borrowing fee parameters for the pair
|
|
45
|
+
* @param data Current borrowing fee data for the pair
|
|
46
|
+
* @param currentPairPrice Current price of the trading pair
|
|
47
|
+
* @param currentTimestamp Current timestamp (defaults to now)
|
|
48
|
+
* @returns Updated accumulated borrowing fee (1e20 precision)
|
|
49
|
+
*/
|
|
50
|
+
const getPairPendingAccBorrowingFees = (params, data, currentPairPrice, currentTimestamp) => {
|
|
51
|
+
const timestamp = currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000);
|
|
52
|
+
// Calculate time elapsed since last update
|
|
53
|
+
const timeElapsed = Math.max(0, timestamp - data.lastBorrowingUpdateTs);
|
|
54
|
+
// If no time elapsed, return current accumulated fee
|
|
55
|
+
if (timeElapsed === 0) {
|
|
56
|
+
return data.accBorrowingFeeP;
|
|
57
|
+
}
|
|
58
|
+
// Calculate accumulated borrowing fee delta
|
|
59
|
+
// Formula: borrowingRatePerSecondP * timeElapsed * currentPairPrice
|
|
60
|
+
const accBorrowingFeeDeltaP = params.borrowingRatePerSecondP * timeElapsed * currentPairPrice;
|
|
61
|
+
return data.accBorrowingFeeP + accBorrowingFeeDeltaP;
|
|
62
|
+
};
|
|
63
|
+
exports.getPairPendingAccBorrowingFees = getPairPendingAccBorrowingFees;
|
|
64
|
+
/**
|
|
65
|
+
* @dev Calculates borrowing fees owed by a specific trade
|
|
66
|
+
* @param input Trade borrowing fee calculation input (without pairIndex)
|
|
67
|
+
* @param context Pair-specific borrowing context
|
|
68
|
+
* @returns Borrowing fees in collateral tokens
|
|
69
|
+
*/
|
|
70
|
+
const getTradeBorrowingFeesCollateral = (input, context) => {
|
|
71
|
+
const { positionSizeCollateral, openPrice, currentPairPrice, initialAccBorrowingFeeP, currentTimestamp, } = input;
|
|
72
|
+
const { params, data } = context;
|
|
73
|
+
if (!params || !data) {
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
// Calculate current accumulated borrowing fees
|
|
77
|
+
const currentAccBorrowingFeeP = (0, exports.getPairPendingAccBorrowingFees)(params, data, currentPairPrice, currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : context.currentTimestamp);
|
|
78
|
+
// Calculate borrowing fees for this trade
|
|
79
|
+
// Formula: (positionSizeCollateral * (currentAccFee - initialAccFee)) / openPrice / 100
|
|
80
|
+
const feeDeltaP = currentAccBorrowingFeeP - initialAccBorrowingFeeP;
|
|
81
|
+
return ((positionSizeCollateral * feeDeltaP) /
|
|
82
|
+
openPrice /
|
|
83
|
+
exports.BORROWING_V2_PRECISION.PERCENTAGE);
|
|
84
|
+
};
|
|
85
|
+
exports.getTradeBorrowingFeesCollateral = getTradeBorrowingFeesCollateral;
|
|
86
|
+
/**
|
|
87
|
+
* @dev Utility function to get pending accumulated borrowing fees for a pair using context
|
|
88
|
+
* @param input Pair borrowing fee calculation input
|
|
89
|
+
* @param context Context containing borrowing parameters and data
|
|
90
|
+
* @returns Updated accumulated borrowing fee (1e20 precision)
|
|
91
|
+
*/
|
|
92
|
+
const getPairBorrowingFees = (input, context) => {
|
|
93
|
+
const { pairIndex, currentPairPrice, currentTimestamp } = input;
|
|
94
|
+
const params = context.borrowingParams[pairIndex];
|
|
95
|
+
const data = context.borrowingData[pairIndex];
|
|
96
|
+
if (!params || !data) {
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
return (0, exports.getPairPendingAccBorrowingFees)(params, data, currentPairPrice, currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : context.currentTimestamp);
|
|
100
|
+
};
|
|
101
|
+
exports.getPairBorrowingFees = getPairBorrowingFees;
|
|
102
|
+
/**
|
|
103
|
+
* @dev Utility functions for working with borrowing v2 fees
|
|
104
|
+
*/
|
|
105
|
+
exports.borrowingFeeV2Utils = {
|
|
106
|
+
getPairPendingAccBorrowingFees: exports.getPairPendingAccBorrowingFees,
|
|
107
|
+
getTradeBorrowingFeesCollateral: exports.getTradeBorrowingFeesCollateral,
|
|
108
|
+
getPairBorrowingFees: exports.getPairBorrowingFees,
|
|
109
|
+
};
|
|
110
|
+
exports.BorrowingFeeV2 = __importStar(require("./types"));
|
|
111
|
+
__exportStar(require("./converter"), exports);
|
|
112
|
+
__exportStar(require("./fetcher"), exports);
|