@gainsnetwork/sdk 0.2.73-rc2 → 1.0.0-rc10
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/README.md +2 -2
- package/lib/backend/globalTrades/index.d.ts +11 -0
- package/lib/backend/globalTrades/index.js +69 -0
- package/lib/backend/index.d.ts +3 -0
- package/lib/backend/index.js +28 -0
- package/lib/backend/tradingVariables/backend.types.d.ts +318 -0
- package/lib/backend/tradingVariables/backend.types.js +2 -0
- package/lib/backend/tradingVariables/converter.d.ts +34 -0
- package/lib/backend/tradingVariables/converter.js +338 -0
- package/lib/backend/tradingVariables/index.d.ts +5 -0
- package/lib/backend/tradingVariables/index.js +96 -0
- package/lib/backend/tradingVariables/types.d.ts +113 -0
- package/lib/backend/tradingVariables/types.js +14 -0
- package/lib/constants.d.ts +0 -5
- package/lib/constants.js +0 -5
- package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
- package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
- package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +2134 -293
- 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/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/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
- package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.d.ts +90 -53
- package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +4496 -430
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
- package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
- package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
- package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
- package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
- package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
- package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -0
- package/lib/contracts/types/generated/factories/GToken__factory.d.ts +7 -0
- package/lib/contracts/types/generated/factories/GToken__factory.js +69 -142
- 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 +0 -5
- package/lib/index.d.ts +2 -0
- package/lib/index.js +5 -0
- package/lib/markets/collateral/converter.d.ts +5 -0
- package/lib/markets/collateral/converter.js +11 -0
- package/lib/markets/collateral/index.d.ts +1 -0
- package/lib/markets/collateral/index.js +17 -0
- package/lib/markets/collateral/types.d.ts +7 -0
- package/lib/markets/collateral/types.js +2 -0
- package/lib/markets/holdingFees/index.d.ts +46 -0
- package/lib/markets/holdingFees/index.js +105 -0
- package/lib/markets/holdingFees/types.d.ts +23 -0
- package/lib/markets/holdingFees/types.js +5 -0
- package/lib/markets/index.d.ts +5 -0
- package/lib/markets/index.js +5 -0
- package/lib/markets/leverage/builder.d.ts +12 -0
- package/lib/markets/leverage/builder.js +25 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
- package/lib/markets/leverage/index.d.ts +3 -0
- package/lib/markets/leverage/index.js +19 -0
- package/lib/markets/leverage/types.d.ts +15 -0
- package/lib/markets/leverage/types.js +2 -0
- package/lib/markets/oi/converter.d.ts +62 -0
- package/lib/markets/oi/converter.js +102 -0
- package/lib/markets/oi/fetcher.d.ts +58 -0
- package/lib/markets/oi/fetcher.js +181 -0
- package/lib/markets/oi/index.d.ts +49 -0
- package/lib/markets/oi/index.js +77 -0
- package/lib/markets/oi/types.d.ts +73 -0
- package/lib/markets/oi/types.js +6 -0
- package/lib/markets/oi/validation.d.ts +80 -0
- package/lib/markets/oi/validation.js +172 -0
- package/lib/markets/price/builder.d.ts +25 -0
- package/lib/markets/price/builder.js +69 -0
- package/lib/markets/price/index.d.ts +6 -0
- package/lib/markets/price/index.js +22 -0
- package/lib/markets/price/marketPrice.d.ts +13 -0
- package/lib/markets/price/marketPrice.js +35 -0
- package/lib/markets/price/types.d.ts +23 -0
- package/lib/markets/price/types.js +5 -0
- package/lib/trade/counterTrade/index.d.ts +2 -0
- package/lib/trade/counterTrade/index.js +18 -0
- package/lib/trade/counterTrade/types.d.ts +7 -0
- package/lib/trade/counterTrade/types.js +2 -0
- package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
- package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
- package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
- package/lib/trade/effectiveLeverage/builder.js +30 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +23 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +64 -0
- package/lib/trade/effectiveLeverage/index.d.ts +3 -0
- package/lib/trade/effectiveLeverage/index.js +22 -0
- package/lib/trade/effectiveLeverage/types.d.ts +33 -0
- package/lib/trade/effectiveLeverage/types.js +2 -0
- package/lib/trade/fees/borrowing/builder.d.ts +14 -0
- package/lib/trade/fees/borrowing/builder.js +34 -0
- package/lib/trade/fees/borrowing/index.d.ts +26 -3
- package/lib/trade/fees/borrowing/index.js +72 -22
- 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 +114 -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 +124 -0
- package/lib/trade/fees/fundingFees/index.js +309 -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/holdingFees/index.d.ts +46 -0
- package/lib/trade/fees/holdingFees/index.js +105 -0
- package/lib/trade/fees/holdingFees/types.d.ts +23 -0
- package/lib/trade/fees/holdingFees/types.js +5 -0
- package/lib/trade/fees/index.d.ts +9 -2
- package/lib/trade/fees/index.js +69 -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/builder.d.ts +18 -0
- package/lib/trade/fees/trading/builder.js +20 -0
- package/lib/trade/fees/trading/converter.d.ts +32 -0
- package/lib/trade/fees/trading/converter.js +47 -0
- package/lib/trade/fees/trading/holdingFees.d.ts +28 -0
- package/lib/trade/fees/trading/holdingFees.js +66 -0
- package/lib/trade/fees/trading/holdingFeesStructured.d.ts +28 -0
- package/lib/trade/fees/trading/holdingFeesStructured.js +66 -0
- package/lib/trade/fees/trading/index.d.ts +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/index.d.ts +5 -2
- package/lib/trade/index.js +5 -2
- 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 +29 -0
- package/lib/trade/liquidation/index.js +218 -0
- package/lib/trade/liquidation/types.d.ts +43 -0
- package/lib/trade/liquidation/types.js +2 -0
- package/lib/trade/pnl/builder.d.ts +16 -0
- package/lib/trade/pnl/builder.js +44 -0
- package/lib/trade/pnl/converter.d.ts +47 -0
- package/lib/trade/pnl/converter.js +72 -0
- package/lib/trade/pnl/index.d.ts +91 -0
- package/lib/trade/pnl/index.js +303 -0
- package/lib/trade/pnl/types.d.ts +79 -0
- package/lib/trade/pnl/types.js +5 -0
- package/lib/trade/priceImpact/close/builder.d.ts +23 -0
- package/lib/trade/priceImpact/close/builder.js +45 -0
- package/lib/trade/priceImpact/close/index.d.ts +22 -0
- package/lib/trade/priceImpact/close/index.js +134 -0
- package/lib/trade/priceImpact/close/types.d.ts +47 -0
- package/lib/trade/priceImpact/close/types.js +5 -0
- package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
- package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
- package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
- package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
- package/lib/trade/priceImpact/cumulVol/index.d.ts +108 -0
- package/lib/trade/priceImpact/cumulVol/index.js +235 -0
- package/lib/trade/priceImpact/index.d.ts +21 -0
- package/lib/trade/priceImpact/index.js +79 -0
- package/lib/trade/priceImpact/open/builder.d.ts +21 -0
- package/lib/trade/priceImpact/open/builder.js +43 -0
- package/lib/trade/priceImpact/open/index.d.ts +23 -0
- package/lib/trade/priceImpact/open/index.js +79 -0
- package/lib/trade/priceImpact/open/types.d.ts +45 -0
- package/lib/trade/priceImpact/open/types.js +5 -0
- package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
- package/lib/trade/priceImpact/skew/builder.js +28 -0
- package/lib/trade/priceImpact/skew/converter.d.ts +46 -0
- package/lib/trade/priceImpact/skew/converter.js +81 -0
- package/lib/trade/priceImpact/skew/fetcher.d.ts +60 -0
- package/lib/trade/priceImpact/skew/fetcher.js +169 -0
- package/lib/trade/priceImpact/skew/index.d.ts +53 -0
- package/lib/trade/priceImpact/skew/index.js +148 -0
- package/lib/trade/priceImpact/skew/types.d.ts +44 -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 +109 -14
- package/lib/trade/types.js +0 -5
- package/lib/trade/utils.d.ts +18 -0
- package/lib/trade/utils.js +30 -0
- package/lib/vault/index.d.ts +3 -1
- package/lib/vault/index.js +2 -2
- package/package.json +2 -1
- package/lib/trade/liquidation.d.ts +0 -12
- package/lib/trade/liquidation.js +0 -55
- package/lib/trade/pnl.d.ts +0 -10
- package/lib/trade/pnl.js +0 -33
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Converters for funding fees data between contract and SDK formats
|
|
3
|
+
* @dev All BigNumber values are normalized to floats with appropriate precision
|
|
4
|
+
*/
|
|
5
|
+
import { IFundingFees } from "../../../contracts/types/generated/GNSMultiCollatDiamond";
|
|
6
|
+
import { FundingFeeParams, PairFundingFeeData, PairGlobalParams, TradeInitialAccFundingFees, GetFundingFeeContext } from "./types";
|
|
7
|
+
export declare const FUNDING_FEES_PRECISION: {
|
|
8
|
+
SKEW_COEFFICIENT_PER_YEAR: number;
|
|
9
|
+
ABSOLUTE_VELOCITY_PER_YEAR_CAP: number;
|
|
10
|
+
ABSOLUTE_RATE_PER_SECOND_CAP: number;
|
|
11
|
+
ACC_FUNDING_FEE_P: number;
|
|
12
|
+
FUNDING_RATE_PER_SECOND_P: number;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @dev Converts contract funding fee params to SDK format
|
|
16
|
+
* @param contractParams Contract funding fee params struct
|
|
17
|
+
* @returns Normalized funding fee params
|
|
18
|
+
*/
|
|
19
|
+
export declare const convertFundingFeeParams: (contractParams: IFundingFees.FundingFeeParamsStruct) => FundingFeeParams;
|
|
20
|
+
/**
|
|
21
|
+
* @dev Converts array of contract funding fee params to SDK format
|
|
22
|
+
* @param contractParamsArray Array of contract funding fee params
|
|
23
|
+
* @returns Array of normalized funding fee params
|
|
24
|
+
*/
|
|
25
|
+
export declare const convertFundingFeeParamsArray: (contractParamsArray: IFundingFees.FundingFeeParamsStruct[]) => FundingFeeParams[];
|
|
26
|
+
/**
|
|
27
|
+
* @dev Converts contract pair funding fee data to SDK format
|
|
28
|
+
* @param contractData Contract pair funding fee data struct
|
|
29
|
+
* @returns Normalized pair funding fee data
|
|
30
|
+
*/
|
|
31
|
+
export declare const convertPairFundingFeeData: (contractData: IFundingFees.PairFundingFeeDataStruct) => PairFundingFeeData;
|
|
32
|
+
/**
|
|
33
|
+
* @dev Converts array of contract pair funding fee data to SDK format
|
|
34
|
+
* @param contractDataArray Array of contract pair funding fee data
|
|
35
|
+
* @returns Array of normalized pair funding fee data
|
|
36
|
+
*/
|
|
37
|
+
export declare const convertPairFundingFeeDataArray: (contractDataArray: IFundingFees.PairFundingFeeDataStruct[]) => PairFundingFeeData[];
|
|
38
|
+
/**
|
|
39
|
+
* @dev Converts contract pair global params to SDK format
|
|
40
|
+
* @param contractParams Contract pair global params struct
|
|
41
|
+
* @returns Normalized pair global params
|
|
42
|
+
*/
|
|
43
|
+
export declare const convertPairGlobalParams: (contractParams: IFundingFees.PairGlobalParamsStruct) => PairGlobalParams;
|
|
44
|
+
/**
|
|
45
|
+
* @dev Converts array of contract pair global params to SDK format
|
|
46
|
+
* @param contractParamsArray Array of contract pair global params
|
|
47
|
+
* @returns Array of normalized pair global params
|
|
48
|
+
*/
|
|
49
|
+
export declare const convertPairGlobalParamsArray: (contractParamsArray: IFundingFees.PairGlobalParamsStruct[]) => PairGlobalParams[];
|
|
50
|
+
/**
|
|
51
|
+
* @dev Converts contract trade initial acc funding fees to SDK format
|
|
52
|
+
* @param contractFees Contract trade fees data (only funding fee part)
|
|
53
|
+
* @returns Normalized trade initial acc funding fees
|
|
54
|
+
*/
|
|
55
|
+
export declare const convertTradeInitialAccFundingFees: (contractFees: {
|
|
56
|
+
initialAccFundingFeeP: bigint | number | string;
|
|
57
|
+
}) => TradeInitialAccFundingFees;
|
|
58
|
+
/**
|
|
59
|
+
* @dev Creates a funding fee context from arrays of data
|
|
60
|
+
* @param collateralIndices Array of collateral indices
|
|
61
|
+
* @param pairIndices Array of pair indices
|
|
62
|
+
* @param params Array of funding fee parameters
|
|
63
|
+
* @param data Array of pair funding fee data
|
|
64
|
+
* @param globalParams Optional array of global parameters
|
|
65
|
+
* @param currentTimestamp Optional current timestamp
|
|
66
|
+
* @returns Complete funding fee context
|
|
67
|
+
*/
|
|
68
|
+
export declare const createFundingFeeContext: (collateralIndices: number[], pairIndices: number[], params: FundingFeeParams[], data: PairFundingFeeData[], globalParams?: PairGlobalParams[], currentTimestamp?: number) => GetFundingFeeContext;
|
|
69
|
+
/**
|
|
70
|
+
* @dev Validates funding rate is within allowed bounds
|
|
71
|
+
* @param absoluteRatePerSecondCap Rate cap (normalized)
|
|
72
|
+
* @returns Whether the rate is valid
|
|
73
|
+
*/
|
|
74
|
+
export declare const isValidFundingRate: (absoluteRatePerSecondCap: number) => boolean;
|
|
75
|
+
/**
|
|
76
|
+
* @dev Converts funding rate per second to APR
|
|
77
|
+
* @param ratePerSecondP Funding rate per second (normalized)
|
|
78
|
+
* @returns APR as percentage
|
|
79
|
+
*/
|
|
80
|
+
export declare const fundingRateToAPR: (ratePerSecondP: number) => number;
|
|
81
|
+
/**
|
|
82
|
+
* @dev Converts APR to funding rate per second
|
|
83
|
+
* @param apr APR as percentage
|
|
84
|
+
* @returns Funding rate per second (normalized)
|
|
85
|
+
*/
|
|
86
|
+
export declare const aprToFundingRate: (apr: number) => number;
|
|
87
|
+
/**
|
|
88
|
+
* @dev Calculates velocity per year from skew coefficient
|
|
89
|
+
* @param skewRatio Current skew ratio (net exposure / total OI)
|
|
90
|
+
* @param skewCoefficientPerYear Skew coefficient per year (normalized)
|
|
91
|
+
* @returns Velocity per year
|
|
92
|
+
*/
|
|
93
|
+
export declare const calculateVelocityFromSkew: (skewRatio: number, skewCoefficientPerYear: number) => number;
|
|
94
|
+
/**
|
|
95
|
+
* @dev Creates a GetFundingFeeContext from arrays (alias for consistency)
|
|
96
|
+
* @param collateralIndices Array of collateral indices
|
|
97
|
+
* @param pairIndices Array of pair indices
|
|
98
|
+
* @param params Array of funding fee parameters
|
|
99
|
+
* @param data Array of pair funding fee data
|
|
100
|
+
* @returns Complete funding fee context
|
|
101
|
+
*/
|
|
102
|
+
export declare const createGetFundingFeeContext: (collateralIndices: number[], pairIndices: number[], params: FundingFeeParams[], data: PairFundingFeeData[]) => GetFundingFeeContext;
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Converters for funding fees data between contract and SDK formats
|
|
4
|
+
* @dev All BigNumber values are normalized to floats with appropriate precision
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createGetFundingFeeContext = exports.calculateVelocityFromSkew = exports.aprToFundingRate = exports.fundingRateToAPR = exports.isValidFundingRate = exports.createFundingFeeContext = exports.convertTradeInitialAccFundingFees = exports.convertPairGlobalParamsArray = exports.convertPairGlobalParams = exports.convertPairFundingFeeDataArray = exports.convertPairFundingFeeData = exports.convertFundingFeeParamsArray = exports.convertFundingFeeParams = exports.FUNDING_FEES_PRECISION = void 0;
|
|
8
|
+
// Precision constants from contract
|
|
9
|
+
exports.FUNDING_FEES_PRECISION = {
|
|
10
|
+
SKEW_COEFFICIENT_PER_YEAR: 1e26,
|
|
11
|
+
ABSOLUTE_VELOCITY_PER_YEAR_CAP: 1e7,
|
|
12
|
+
ABSOLUTE_RATE_PER_SECOND_CAP: 1e10,
|
|
13
|
+
ACC_FUNDING_FEE_P: 1e20,
|
|
14
|
+
FUNDING_RATE_PER_SECOND_P: 1e18, // Funding rate per second precision
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* @dev Converts contract funding fee params to SDK format
|
|
18
|
+
* @param contractParams Contract funding fee params struct
|
|
19
|
+
* @returns Normalized funding fee params
|
|
20
|
+
*/
|
|
21
|
+
const convertFundingFeeParams = (contractParams) => {
|
|
22
|
+
return {
|
|
23
|
+
skewCoefficientPerYear: Number(contractParams.skewCoefficientPerYear) /
|
|
24
|
+
exports.FUNDING_FEES_PRECISION.SKEW_COEFFICIENT_PER_YEAR,
|
|
25
|
+
absoluteVelocityPerYearCap: Number(contractParams.absoluteVelocityPerYearCap) /
|
|
26
|
+
exports.FUNDING_FEES_PRECISION.ABSOLUTE_VELOCITY_PER_YEAR_CAP,
|
|
27
|
+
absoluteRatePerSecondCap: Number(contractParams.absoluteRatePerSecondCap) /
|
|
28
|
+
exports.FUNDING_FEES_PRECISION.ABSOLUTE_RATE_PER_SECOND_CAP,
|
|
29
|
+
thetaThresholdUsd: Number(contractParams.thetaThresholdUsd),
|
|
30
|
+
fundingFeesEnabled: Boolean(contractParams.fundingFeesEnabled),
|
|
31
|
+
aprMultiplierEnabled: Boolean(contractParams.aprMultiplierEnabled),
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.convertFundingFeeParams = convertFundingFeeParams;
|
|
35
|
+
/**
|
|
36
|
+
* @dev Converts array of contract funding fee params to SDK format
|
|
37
|
+
* @param contractParamsArray Array of contract funding fee params
|
|
38
|
+
* @returns Array of normalized funding fee params
|
|
39
|
+
*/
|
|
40
|
+
const convertFundingFeeParamsArray = (contractParamsArray) => {
|
|
41
|
+
return contractParamsArray.map(exports.convertFundingFeeParams);
|
|
42
|
+
};
|
|
43
|
+
exports.convertFundingFeeParamsArray = convertFundingFeeParamsArray;
|
|
44
|
+
/**
|
|
45
|
+
* @dev Converts contract pair funding fee data to SDK format
|
|
46
|
+
* @param contractData Contract pair funding fee data struct
|
|
47
|
+
* @returns Normalized pair funding fee data
|
|
48
|
+
*/
|
|
49
|
+
const convertPairFundingFeeData = (contractData) => {
|
|
50
|
+
return {
|
|
51
|
+
accFundingFeeLongP: Number(contractData.accFundingFeeLongP) /
|
|
52
|
+
exports.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
|
|
53
|
+
accFundingFeeShortP: Number(contractData.accFundingFeeShortP) /
|
|
54
|
+
exports.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
|
|
55
|
+
lastFundingRatePerSecondP: Number(contractData.lastFundingRatePerSecondP) /
|
|
56
|
+
exports.FUNDING_FEES_PRECISION.FUNDING_RATE_PER_SECOND_P,
|
|
57
|
+
lastFundingUpdateTs: Number(contractData.lastFundingUpdateTs),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
exports.convertPairFundingFeeData = convertPairFundingFeeData;
|
|
61
|
+
/**
|
|
62
|
+
* @dev Converts array of contract pair funding fee data to SDK format
|
|
63
|
+
* @param contractDataArray Array of contract pair funding fee data
|
|
64
|
+
* @returns Array of normalized pair funding fee data
|
|
65
|
+
*/
|
|
66
|
+
const convertPairFundingFeeDataArray = (contractDataArray) => {
|
|
67
|
+
return contractDataArray.map(exports.convertPairFundingFeeData);
|
|
68
|
+
};
|
|
69
|
+
exports.convertPairFundingFeeDataArray = convertPairFundingFeeDataArray;
|
|
70
|
+
/**
|
|
71
|
+
* @dev Converts contract pair global params to SDK format
|
|
72
|
+
* @param contractParams Contract pair global params struct
|
|
73
|
+
* @returns Normalized pair global params
|
|
74
|
+
*/
|
|
75
|
+
const convertPairGlobalParams = (contractParams) => {
|
|
76
|
+
return {
|
|
77
|
+
maxSkewCollateral: Number(contractParams.maxSkewCollateral) / 1e10,
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
exports.convertPairGlobalParams = convertPairGlobalParams;
|
|
81
|
+
/**
|
|
82
|
+
* @dev Converts array of contract pair global params to SDK format
|
|
83
|
+
* @param contractParamsArray Array of contract pair global params
|
|
84
|
+
* @returns Array of normalized pair global params
|
|
85
|
+
*/
|
|
86
|
+
const convertPairGlobalParamsArray = (contractParamsArray) => {
|
|
87
|
+
return contractParamsArray.map(exports.convertPairGlobalParams);
|
|
88
|
+
};
|
|
89
|
+
exports.convertPairGlobalParamsArray = convertPairGlobalParamsArray;
|
|
90
|
+
/**
|
|
91
|
+
* @dev Converts contract trade initial acc funding fees to SDK format
|
|
92
|
+
* @param contractFees Contract trade fees data (only funding fee part)
|
|
93
|
+
* @returns Normalized trade initial acc funding fees
|
|
94
|
+
*/
|
|
95
|
+
const convertTradeInitialAccFundingFees = (contractFees) => {
|
|
96
|
+
return {
|
|
97
|
+
initialAccFundingFeeP: Number(contractFees.initialAccFundingFeeP) /
|
|
98
|
+
exports.FUNDING_FEES_PRECISION.ACC_FUNDING_FEE_P,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
exports.convertTradeInitialAccFundingFees = convertTradeInitialAccFundingFees;
|
|
102
|
+
/**
|
|
103
|
+
* @dev Creates a funding fee context from arrays of data
|
|
104
|
+
* @param collateralIndices Array of collateral indices
|
|
105
|
+
* @param pairIndices Array of pair indices
|
|
106
|
+
* @param params Array of funding fee parameters
|
|
107
|
+
* @param data Array of pair funding fee data
|
|
108
|
+
* @param globalParams Optional array of global parameters
|
|
109
|
+
* @param currentTimestamp Optional current timestamp
|
|
110
|
+
* @returns Complete funding fee context
|
|
111
|
+
*/
|
|
112
|
+
const createFundingFeeContext = (collateralIndices, pairIndices, params, data, globalParams, currentTimestamp) => {
|
|
113
|
+
const context = {
|
|
114
|
+
currentTimestamp: currentTimestamp !== null && currentTimestamp !== void 0 ? currentTimestamp : Math.floor(Date.now() / 1000),
|
|
115
|
+
fundingParams: {},
|
|
116
|
+
fundingData: {},
|
|
117
|
+
globalParams: globalParams ? {} : undefined,
|
|
118
|
+
};
|
|
119
|
+
// Build nested objects indexed by collateralIndex and pairIndex
|
|
120
|
+
for (let i = 0; i < collateralIndices.length; i++) {
|
|
121
|
+
const collateralIndex = collateralIndices[i];
|
|
122
|
+
const pairIndex = pairIndices[i];
|
|
123
|
+
// Initialize collateral index objects if they don't exist
|
|
124
|
+
if (!context.fundingParams[collateralIndex]) {
|
|
125
|
+
context.fundingParams[collateralIndex] = {};
|
|
126
|
+
}
|
|
127
|
+
if (!context.fundingData[collateralIndex]) {
|
|
128
|
+
context.fundingData[collateralIndex] = {};
|
|
129
|
+
}
|
|
130
|
+
if (globalParams && context.globalParams) {
|
|
131
|
+
if (!context.globalParams[collateralIndex]) {
|
|
132
|
+
context.globalParams[collateralIndex] = {};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Store data
|
|
136
|
+
context.fundingParams[collateralIndex][pairIndex] = params[i];
|
|
137
|
+
context.fundingData[collateralIndex][pairIndex] = data[i];
|
|
138
|
+
if (globalParams && context.globalParams) {
|
|
139
|
+
context.globalParams[collateralIndex][pairIndex] = globalParams[i];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return context;
|
|
143
|
+
};
|
|
144
|
+
exports.createFundingFeeContext = createFundingFeeContext;
|
|
145
|
+
/**
|
|
146
|
+
* @dev Validates funding rate is within allowed bounds
|
|
147
|
+
* @param absoluteRatePerSecondCap Rate cap (normalized)
|
|
148
|
+
* @returns Whether the rate is valid
|
|
149
|
+
*/
|
|
150
|
+
const isValidFundingRate = (absoluteRatePerSecondCap) => {
|
|
151
|
+
// Convert back to contract precision for validation
|
|
152
|
+
const contractValue = absoluteRatePerSecondCap *
|
|
153
|
+
exports.FUNDING_FEES_PRECISION.ABSOLUTE_RATE_PER_SECOND_CAP;
|
|
154
|
+
return contractValue <= 3170979; // MAX_FUNDING_RATE_PER_SECOND from contract
|
|
155
|
+
};
|
|
156
|
+
exports.isValidFundingRate = isValidFundingRate;
|
|
157
|
+
/**
|
|
158
|
+
* @dev Converts funding rate per second to APR
|
|
159
|
+
* @param ratePerSecondP Funding rate per second (normalized)
|
|
160
|
+
* @returns APR as percentage
|
|
161
|
+
*/
|
|
162
|
+
const fundingRateToAPR = (ratePerSecondP) => {
|
|
163
|
+
return ratePerSecondP * 365 * 24 * 60 * 60 * 100;
|
|
164
|
+
};
|
|
165
|
+
exports.fundingRateToAPR = fundingRateToAPR;
|
|
166
|
+
/**
|
|
167
|
+
* @dev Converts APR to funding rate per second
|
|
168
|
+
* @param apr APR as percentage
|
|
169
|
+
* @returns Funding rate per second (normalized)
|
|
170
|
+
*/
|
|
171
|
+
const aprToFundingRate = (apr) => {
|
|
172
|
+
return apr / (365 * 24 * 60 * 60 * 100);
|
|
173
|
+
};
|
|
174
|
+
exports.aprToFundingRate = aprToFundingRate;
|
|
175
|
+
/**
|
|
176
|
+
* @dev Calculates velocity per year from skew coefficient
|
|
177
|
+
* @param skewRatio Current skew ratio (net exposure / total OI)
|
|
178
|
+
* @param skewCoefficientPerYear Skew coefficient per year (normalized)
|
|
179
|
+
* @returns Velocity per year
|
|
180
|
+
*/
|
|
181
|
+
const calculateVelocityFromSkew = (skewRatio, skewCoefficientPerYear) => {
|
|
182
|
+
return Math.abs(skewRatio) * skewCoefficientPerYear;
|
|
183
|
+
};
|
|
184
|
+
exports.calculateVelocityFromSkew = calculateVelocityFromSkew;
|
|
185
|
+
/**
|
|
186
|
+
* @dev Creates a GetFundingFeeContext from arrays (alias for consistency)
|
|
187
|
+
* @param collateralIndices Array of collateral indices
|
|
188
|
+
* @param pairIndices Array of pair indices
|
|
189
|
+
* @param params Array of funding fee parameters
|
|
190
|
+
* @param data Array of pair funding fee data
|
|
191
|
+
* @returns Complete funding fee context
|
|
192
|
+
*/
|
|
193
|
+
const createGetFundingFeeContext = (collateralIndices, pairIndices, params, data) => {
|
|
194
|
+
return (0, exports.createFundingFeeContext)(collateralIndices, pairIndices, params, data);
|
|
195
|
+
};
|
|
196
|
+
exports.createGetFundingFeeContext = createGetFundingFeeContext;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
|
|
2
|
+
import type { TradeInitialAccFees } from ".";
|
|
3
|
+
/**
|
|
4
|
+
* @dev Fetches pending accumulated funding fees for a specific pair
|
|
5
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
6
|
+
* @param collateralIndex Collateral index
|
|
7
|
+
* @param pairIndex Pair index
|
|
8
|
+
* @param currentPairPrice Current pair price (1e10)
|
|
9
|
+
* @returns Promise resolving to accumulated funding fees and current rate
|
|
10
|
+
*/
|
|
11
|
+
export declare const fetchPairPendingAccFundingFees: (contract: GNSMultiCollatDiamond, collateralIndex: number, pairIndex: number, currentPairPrice: bigint) => Promise<{
|
|
12
|
+
accFundingFeeLongP: number;
|
|
13
|
+
accFundingFeeShortP: number;
|
|
14
|
+
currentFundingRatePerSecondP: number;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* @dev Fetches funding fees for a specific trade in collateral tokens
|
|
18
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
19
|
+
* @param trader Trader address
|
|
20
|
+
* @param index Trade index
|
|
21
|
+
* @param currentPairPrice Current pair price (1e10)
|
|
22
|
+
* @returns Promise resolving to funding fee in collateral tokens
|
|
23
|
+
*/
|
|
24
|
+
export declare const fetchTradeFundingFeesCollateral: (contract: GNSMultiCollatDiamond, trader: string, index: number, currentPairPrice: bigint) => Promise<number>;
|
|
25
|
+
/**
|
|
26
|
+
* @dev Fetches trade fees data for a specific trade
|
|
27
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
28
|
+
* @param trader Trader address
|
|
29
|
+
* @param index Trade index
|
|
30
|
+
* @returns Promise resolving to trade fees data
|
|
31
|
+
*/
|
|
32
|
+
export declare const fetchTradeFeesData: (contract: GNSMultiCollatDiamond, trader: string, index: number) => Promise<TradeInitialAccFees>;
|
|
33
|
+
/**
|
|
34
|
+
* @dev Fetches trade fees data for multiple trades
|
|
35
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
36
|
+
* @param traders Array of trader addresses
|
|
37
|
+
* @param indices Array of trade indices
|
|
38
|
+
* @returns Promise resolving to array of trade fees data
|
|
39
|
+
*/
|
|
40
|
+
export declare const fetchTradeFeesDataBatch: (contract: GNSMultiCollatDiamond, traders: string[], indices: number[]) => Promise<TradeInitialAccFees[]>;
|
|
41
|
+
/**
|
|
42
|
+
* @dev Fetches pending accumulated funding fees for multiple pairs
|
|
43
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
44
|
+
* @param collateralIndices Array of collateral indices
|
|
45
|
+
* @param pairIndices Array of pair indices
|
|
46
|
+
* @param currentPairPrices Array of current pair prices (1e10)
|
|
47
|
+
* @returns Promise resolving to array of accumulated funding fees
|
|
48
|
+
*/
|
|
49
|
+
export declare const fetchPairPendingAccFundingFeesBatch: (contract: GNSMultiCollatDiamond, collateralIndices: number[], pairIndices: number[], currentPairPrices: bigint[]) => Promise<Array<{
|
|
50
|
+
accFundingFeeLongP: number;
|
|
51
|
+
accFundingFeeShortP: number;
|
|
52
|
+
currentFundingRatePerSecondP: number;
|
|
53
|
+
}>>;
|
|
54
|
+
/**
|
|
55
|
+
* @dev Helper to convert price from number to contract format
|
|
56
|
+
* @param price Price as number
|
|
57
|
+
* @returns Price in contract format (1e10)
|
|
58
|
+
*/
|
|
59
|
+
export declare const priceToContractFormat: (price: number) => bigint;
|
|
60
|
+
/**
|
|
61
|
+
* @dev Helper to convert collateral amount to contract format
|
|
62
|
+
* @param amount Amount as number
|
|
63
|
+
* @param decimals Collateral decimals (6 for USDC, 18 for others)
|
|
64
|
+
* @returns Amount in contract format
|
|
65
|
+
*/
|
|
66
|
+
export declare const collateralToContractFormat: (amount: number, decimals: number) => bigint;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.collateralToContractFormat = exports.priceToContractFormat = exports.fetchPairPendingAccFundingFeesBatch = exports.fetchTradeFeesDataBatch = exports.fetchTradeFeesData = exports.fetchTradeFundingFeesCollateral = exports.fetchPairPendingAccFundingFees = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* @dev Fetches pending accumulated funding fees for a specific pair
|
|
15
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
16
|
+
* @param collateralIndex Collateral index
|
|
17
|
+
* @param pairIndex Pair index
|
|
18
|
+
* @param currentPairPrice Current pair price (1e10)
|
|
19
|
+
* @returns Promise resolving to accumulated funding fees and current rate
|
|
20
|
+
*/
|
|
21
|
+
const fetchPairPendingAccFundingFees = (contract, collateralIndex, pairIndex, currentPairPrice) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
try {
|
|
23
|
+
const result = yield contract.getPairPendingAccFundingFees(collateralIndex, pairIndex, currentPairPrice);
|
|
24
|
+
return {
|
|
25
|
+
accFundingFeeLongP: Number(result.accFundingFeeLongP) / 1e20,
|
|
26
|
+
accFundingFeeShortP: Number(result.accFundingFeeShortP) / 1e20,
|
|
27
|
+
currentFundingRatePerSecondP: Number(result.currentFundingRatePerSecondP) / 1e18, // FUNDING_RATE_PER_SECOND_P precision
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("Error fetching pair pending acc funding fees:", error);
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
exports.fetchPairPendingAccFundingFees = fetchPairPendingAccFundingFees;
|
|
36
|
+
/**
|
|
37
|
+
* @dev Fetches funding fees for a specific trade in collateral tokens
|
|
38
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
39
|
+
* @param trader Trader address
|
|
40
|
+
* @param index Trade index
|
|
41
|
+
* @param currentPairPrice Current pair price (1e10)
|
|
42
|
+
* @returns Promise resolving to funding fee in collateral tokens
|
|
43
|
+
*/
|
|
44
|
+
const fetchTradeFundingFeesCollateral = (contract, trader, index, currentPairPrice) => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
try {
|
|
46
|
+
const fundingFeeCollateral = yield contract.getTradeFundingFeesCollateral(trader, index, currentPairPrice);
|
|
47
|
+
// Convert from BigNumber to number (collateral precision already applied)
|
|
48
|
+
return Number(fundingFeeCollateral);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("Error fetching trade funding fees:", error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
exports.fetchTradeFundingFeesCollateral = fetchTradeFundingFeesCollateral;
|
|
56
|
+
/**
|
|
57
|
+
* @dev Fetches trade fees data for a specific trade
|
|
58
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
59
|
+
* @param trader Trader address
|
|
60
|
+
* @param index Trade index
|
|
61
|
+
* @returns Promise resolving to trade fees data
|
|
62
|
+
*/
|
|
63
|
+
const fetchTradeFeesData = (contract, trader, index) => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
try {
|
|
65
|
+
const feesData = yield contract.getTradeFeesData(trader, index);
|
|
66
|
+
return {
|
|
67
|
+
accPerOiLong: Number(feesData.initialAccFundingFeeP) / 1e20,
|
|
68
|
+
accPerOiShort: Number(feesData.initialAccFundingFeeP) / 1e20,
|
|
69
|
+
openBlock: 0, // Not available in this struct
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error("Error fetching trade fees data:", error);
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
exports.fetchTradeFeesData = fetchTradeFeesData;
|
|
78
|
+
/**
|
|
79
|
+
* @dev Fetches trade fees data for multiple trades
|
|
80
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
81
|
+
* @param traders Array of trader addresses
|
|
82
|
+
* @param indices Array of trade indices
|
|
83
|
+
* @returns Promise resolving to array of trade fees data
|
|
84
|
+
*/
|
|
85
|
+
const fetchTradeFeesDataBatch = (contract, traders, indices) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
if (traders.length !== indices.length) {
|
|
87
|
+
throw new Error("Traders and indices arrays must have the same length");
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const feesDatas = yield contract.getTradeFeesDataArray(traders, indices);
|
|
91
|
+
return feesDatas.map(feesData => ({
|
|
92
|
+
accPerOiLong: Number(feesData.initialAccFundingFeeP) / 1e20,
|
|
93
|
+
accPerOiShort: Number(feesData.initialAccFundingFeeP) / 1e20,
|
|
94
|
+
openBlock: 0,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error("Error fetching trade fees data batch:", error);
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
exports.fetchTradeFeesDataBatch = fetchTradeFeesDataBatch;
|
|
103
|
+
/**
|
|
104
|
+
* @dev Fetches pending accumulated funding fees for multiple pairs
|
|
105
|
+
* @param contract GNSMultiCollatDiamond contract instance
|
|
106
|
+
* @param collateralIndices Array of collateral indices
|
|
107
|
+
* @param pairIndices Array of pair indices
|
|
108
|
+
* @param currentPairPrices Array of current pair prices (1e10)
|
|
109
|
+
* @returns Promise resolving to array of accumulated funding fees
|
|
110
|
+
*/
|
|
111
|
+
const fetchPairPendingAccFundingFeesBatch = (contract, collateralIndices, pairIndices, currentPairPrices) => __awaiter(void 0, void 0, void 0, function* () {
|
|
112
|
+
if (collateralIndices.length !== pairIndices.length ||
|
|
113
|
+
pairIndices.length !== currentPairPrices.length) {
|
|
114
|
+
throw new Error("All input arrays must have the same length");
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
// Fetch all in parallel
|
|
118
|
+
const promises = collateralIndices.map((collateralIndex, i) => contract.getPairPendingAccFundingFees(collateralIndex, pairIndices[i], currentPairPrices[i]));
|
|
119
|
+
const results = yield Promise.all(promises);
|
|
120
|
+
return results.map(result => ({
|
|
121
|
+
accFundingFeeLongP: Number(result.accFundingFeeLongP) / 1e20,
|
|
122
|
+
accFundingFeeShortP: Number(result.accFundingFeeShortP) / 1e20,
|
|
123
|
+
currentFundingRatePerSecondP: Number(result.currentFundingRatePerSecondP) / 1e18,
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error("Error fetching pair pending acc funding fees batch:", error);
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
exports.fetchPairPendingAccFundingFeesBatch = fetchPairPendingAccFundingFeesBatch;
|
|
132
|
+
/**
|
|
133
|
+
* @dev Helper to convert price from number to contract format
|
|
134
|
+
* @param price Price as number
|
|
135
|
+
* @returns Price in contract format (1e10)
|
|
136
|
+
*/
|
|
137
|
+
const priceToContractFormat = (price) => {
|
|
138
|
+
return BigInt(Math.round(price * 1e10));
|
|
139
|
+
};
|
|
140
|
+
exports.priceToContractFormat = priceToContractFormat;
|
|
141
|
+
/**
|
|
142
|
+
* @dev Helper to convert collateral amount to contract format
|
|
143
|
+
* @param amount Amount as number
|
|
144
|
+
* @param decimals Collateral decimals (6 for USDC, 18 for others)
|
|
145
|
+
* @returns Amount in contract format
|
|
146
|
+
*/
|
|
147
|
+
const collateralToContractFormat = (amount, decimals) => {
|
|
148
|
+
return BigInt(Math.round(amount * Math.pow(10, decimals)));
|
|
149
|
+
};
|
|
150
|
+
exports.collateralToContractFormat = collateralToContractFormat;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Funding fees calculations for v10+ trades
|
|
3
|
+
* @dev Based on skew-based funding rate model with velocity and APR multipliers
|
|
4
|
+
*/
|
|
5
|
+
import { FundingFeeParams, PairFundingFeeData, GetFundingFeeContext, TradeFundingFeeResult, PairPendingAccFundingFeesResult, PairOiAfterV10 } from "./types";
|
|
6
|
+
import { GetPairFundingFeeContext } from "./pairContext";
|
|
7
|
+
/**
|
|
8
|
+
* @dev Calculates current funding velocity per year based on skew
|
|
9
|
+
* @param netExposureToken Net exposure (long - short) in tokens
|
|
10
|
+
* @param netExposureUsd Net exposure in USD
|
|
11
|
+
* @param skewCoefficientPerYear Skew coefficient per year from params
|
|
12
|
+
* @param absoluteVelocityPerYearCap Cap on velocity per year
|
|
13
|
+
* @param thetaThresholdUsd Minimum exposure USD to start charging funding fees
|
|
14
|
+
* @returns Current yearly funding velocity
|
|
15
|
+
*/
|
|
16
|
+
export declare const getCurrentFundingVelocityPerYear: (netExposureToken: number, netExposureUsd: number, skewCoefficientPerYear: number, absoluteVelocityPerYearCap: number, thetaThresholdUsd: number) => number;
|
|
17
|
+
/**
|
|
18
|
+
* @dev Calculates seconds until funding rate reaches zero
|
|
19
|
+
* @param lastFundingRatePerSecondP Last funding rate per second
|
|
20
|
+
* @param currentVelocityPerYear Current velocity per year
|
|
21
|
+
* @returns Seconds until rate reaches zero
|
|
22
|
+
*/
|
|
23
|
+
export declare const getSecondsToReachZeroRate: (lastFundingRatePerSecondP: number, currentVelocityPerYear: number) => number;
|
|
24
|
+
/**
|
|
25
|
+
* @dev Calculates average and current funding rate per second
|
|
26
|
+
* @param lastFundingRatePerSecondP Last funding rate per second
|
|
27
|
+
* @param absoluteRatePerSecondCap Absolute cap on funding rate per second
|
|
28
|
+
* @param currentVelocityPerYear Current velocity per year
|
|
29
|
+
* @param secondsSinceLastUpdate Seconds elapsed since last update
|
|
30
|
+
* @returns Average and current funding rate per second
|
|
31
|
+
*/
|
|
32
|
+
export declare const getAvgFundingRatePerSecondP: (lastFundingRatePerSecondP: number, absoluteRatePerSecondCap: number, currentVelocityPerYear: number, secondsSinceLastUpdate: number) => {
|
|
33
|
+
avgFundingRatePerSecondP: number;
|
|
34
|
+
currentFundingRatePerSecondP: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* @dev Calculates APR multipliers for long and short sides based on OI ratio
|
|
38
|
+
* @param avgFundingRatePerSecondP Average funding rate per second
|
|
39
|
+
* @param pairOiLongToken Long OI in tokens
|
|
40
|
+
* @param pairOiShortToken Short OI in tokens
|
|
41
|
+
* @param aprMultiplierEnabled Whether APR multiplier is enabled
|
|
42
|
+
* @returns Long and short APR multipliers
|
|
43
|
+
*/
|
|
44
|
+
export declare const getLongShortAprMultiplier: (avgFundingRatePerSecondP: number, pairOiLongToken: number, pairOiShortToken: number, aprMultiplierEnabled: boolean) => {
|
|
45
|
+
longAprMultiplier: number;
|
|
46
|
+
shortAprMultiplier: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* @dev Calculates pending accumulated funding fees for a pair
|
|
50
|
+
* @param params Funding fee parameters
|
|
51
|
+
* @param data Current funding fee data
|
|
52
|
+
* @param currentPairPrice Current pair price
|
|
53
|
+
* @param pairOiToken Pair OI after v10
|
|
54
|
+
* @param netExposureToken Net exposure in tokens
|
|
55
|
+
* @param netExposureUsd Net exposure in USD
|
|
56
|
+
* @param currentTimestamp Current timestamp
|
|
57
|
+
* @returns Pending accumulated funding fees and current rate
|
|
58
|
+
*/
|
|
59
|
+
export declare const getPairPendingAccFundingFees: (params: FundingFeeParams, data: PairFundingFeeData, currentPairPrice: number, pairOiToken: PairOiAfterV10, netExposureToken: number, netExposureUsd: number, currentTimestamp: number) => PairPendingAccFundingFeesResult;
|
|
60
|
+
/**
|
|
61
|
+
* @dev Calculates funding fees for a specific trade
|
|
62
|
+
* @param trade Trade parameters (collateral amount, leverage, open price, long/short)
|
|
63
|
+
* @param tradeInfo Trade info (contracts version)
|
|
64
|
+
* @param tradeFeesData Trade fees data containing initial acc funding fee
|
|
65
|
+
* @param currentPairPrice Current pair price
|
|
66
|
+
* @param context Pair-specific funding fee context
|
|
67
|
+
* @returns Funding fee in collateral tokens
|
|
68
|
+
*/
|
|
69
|
+
export declare const getTradeFundingFeesCollateral: (trade: {
|
|
70
|
+
collateralAmount: number;
|
|
71
|
+
leverage: number;
|
|
72
|
+
openPrice: number;
|
|
73
|
+
long: boolean;
|
|
74
|
+
}, tradeInfo: {
|
|
75
|
+
contractsVersion: number;
|
|
76
|
+
}, tradeFeesData: {
|
|
77
|
+
initialAccFundingFeeP: number;
|
|
78
|
+
}, currentPairPrice: number, context: GetPairFundingFeeContext) => number;
|
|
79
|
+
/**
|
|
80
|
+
* @dev Main function to calculate funding fees for a trade within context
|
|
81
|
+
* @param input Trade funding fee input parameters
|
|
82
|
+
* @param context Funding fee context with params and data
|
|
83
|
+
* @returns Complete funding fee calculation result
|
|
84
|
+
*/
|
|
85
|
+
export declare const getTradeFundingFees: (input: {
|
|
86
|
+
collateralIndex: number;
|
|
87
|
+
pairIndex: number;
|
|
88
|
+
trade: {
|
|
89
|
+
collateralAmount: number;
|
|
90
|
+
leverage: number;
|
|
91
|
+
openPrice: number;
|
|
92
|
+
long: boolean;
|
|
93
|
+
};
|
|
94
|
+
tradeInfo: {
|
|
95
|
+
contractsVersion: number;
|
|
96
|
+
};
|
|
97
|
+
initialAccFundingFeeP: number;
|
|
98
|
+
currentPairPrice: number;
|
|
99
|
+
pairOiToken: PairOiAfterV10;
|
|
100
|
+
netExposureToken: number;
|
|
101
|
+
netExposureUsd: number;
|
|
102
|
+
}, context: GetFundingFeeContext) => TradeFundingFeeResult;
|
|
103
|
+
/**
|
|
104
|
+
* @dev Simple version of getTradeFundingFeesCollateral for backward compatibility
|
|
105
|
+
* @param trade Trade parameters
|
|
106
|
+
* @param tradeInfo Trade info with contracts version
|
|
107
|
+
* @param initialAccFundingFeeP Initial accumulated funding fee
|
|
108
|
+
* @param currentAccFundingFeeP Current accumulated funding fee
|
|
109
|
+
* @returns Funding fee in collateral tokens
|
|
110
|
+
*/
|
|
111
|
+
export declare const getTradeFundingFeesCollateralSimple: (trade: {
|
|
112
|
+
collateralAmount: number;
|
|
113
|
+
leverage: number;
|
|
114
|
+
openPrice: number;
|
|
115
|
+
long: boolean;
|
|
116
|
+
}, tradeInfo: {
|
|
117
|
+
contractsVersion: number;
|
|
118
|
+
}, initialAccFundingFeeP: number, currentAccFundingFeeP: number) => number;
|
|
119
|
+
export * as FundingFees from "./types";
|
|
120
|
+
export type { FundingFeeParams, PairFundingFeeData, PairGlobalParams, TradeInitialAccFundingFees, PairOiAfterV10, FundingRateCalculation, GetFundingFeeContext, TradeFundingFeeResult, PairPendingAccFundingFeesResult, PairAccumulatedFees, TradeInitialAccFees, } from "./types";
|
|
121
|
+
export type { GetPairFundingFeeContext } from "./pairContext";
|
|
122
|
+
export * from "./fetcher";
|
|
123
|
+
export * from "./pairContext";
|
|
124
|
+
export * from "./builder";
|