@gainsnetwork/sdk 0.0.0-v10.rc2 → 0.0.0-v10.rc21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/backend/globalTrades/index.d.ts +11 -0
- package/lib/backend/globalTrades/index.js +69 -0
- package/lib/backend/index.d.ts +3 -0
- package/lib/backend/index.js +28 -0
- package/lib/backend/tradingVariables/backend.types.d.ts +318 -0
- package/lib/backend/tradingVariables/backend.types.js +2 -0
- package/lib/backend/tradingVariables/converter.d.ts +34 -0
- package/lib/backend/tradingVariables/converter.js +338 -0
- package/lib/backend/tradingVariables/index.d.ts +5 -0
- package/lib/backend/tradingVariables/index.js +96 -0
- package/lib/backend/tradingVariables/types.d.ts +113 -0
- package/lib/backend/tradingVariables/types.js +14 -0
- package/lib/constants.d.ts +20 -0
- package/lib/constants.js +24 -3
- package/lib/contracts/addresses.json +20 -0
- package/lib/contracts/index.js +3 -1
- package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
- package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.d.ts +979 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_3_2.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.d.ts +1058 -0
- package/lib/contracts/types/generated/GNSBorrowingFeesV6_4.js +2 -0
- package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +7 -20
- package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.d.ts +613 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.js +2 -0
- package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
- package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
- package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
- package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -0
- package/lib/contracts/types/generated/GNSTrading.d.ts +758 -0
- package/lib/contracts/types/generated/GNSTrading.js +2 -0
- package/lib/contracts/types/generated/GNSTradingCallbacks.d.ts +875 -0
- package/lib/contracts/types/generated/GNSTradingCallbacks.js +2 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.d.ts +806 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_3_2.js +2 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.d.ts +821 -0
- package/lib/contracts/types/generated/GNSTradingCallbacksV6_4.js +2 -0
- package/lib/contracts/types/generated/GNSTradingStorage.d.ts +1387 -0
- package/lib/contracts/types/generated/GNSTradingStorage.js +2 -0
- package/lib/contracts/types/generated/GTokenV6_3_2.d.ts +1838 -0
- package/lib/contracts/types/generated/GTokenV6_3_2.js +2 -0
- package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
- package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.d.ts +88 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_3_2__factory.js +1654 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.d.ts +113 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFeesV6_4__factory.js +1742 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.d.ts +124 -0
- package/lib/contracts/types/generated/factories/GNSBorrowingFees__factory.js +1784 -0
- package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +7 -16
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.d.ts +100 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6_3_1__factory.js +1116 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -0
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -0
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.d.ts +82 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_3_2__factory.js +1273 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.d.ts +82 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacksV6_4__factory.js +1326 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.d.ts +113 -0
- package/lib/contracts/types/generated/factories/GNSTradingCallbacks__factory.js +1428 -0
- package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.d.ts +96 -0
- package/lib/contracts/types/generated/factories/GNSTradingStorage__factory.js +2241 -0
- package/lib/contracts/types/generated/factories/GNSTrading__factory.d.ts +95 -0
- package/lib/contracts/types/generated/factories/GNSTrading__factory.js +1071 -0
- package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.d.ts +110 -0
- package/lib/contracts/types/generated/factories/GTokenV6_3_2__factory.js +2682 -0
- package/lib/contracts/types/generated/factories/GToken__factory.d.ts +7 -0
- package/lib/contracts/types/generated/factories/GToken__factory.js +4 -0
- package/lib/contracts/types/index.d.ts +2 -1
- package/lib/contracts/types/index.js +1 -0
- package/lib/contracts/utils/index.d.ts +0 -3
- package/lib/contracts/utils/index.js +0 -3
- package/lib/contracts/utils/openTrades.js +14 -30
- package/lib/contracts/utils/pairs.js +20 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +5 -0
- package/lib/markets/collateral/converter.d.ts +5 -0
- package/lib/markets/collateral/converter.js +11 -0
- package/lib/markets/collateral/index.d.ts +1 -0
- package/lib/markets/collateral/index.js +17 -0
- package/lib/markets/collateral/types.d.ts +7 -0
- package/lib/markets/collateral/types.js +2 -0
- package/lib/markets/holdingFees/index.d.ts +46 -0
- package/lib/markets/holdingFees/index.js +105 -0
- package/lib/markets/holdingFees/types.d.ts +23 -0
- package/lib/markets/holdingFees/types.js +5 -0
- package/lib/markets/index.d.ts +5 -0
- package/lib/markets/index.js +5 -0
- package/lib/markets/leverage/builder.d.ts +12 -0
- package/lib/markets/leverage/builder.js +25 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
- package/lib/markets/leverage/index.d.ts +3 -0
- package/lib/markets/leverage/index.js +19 -0
- package/lib/markets/leverage/types.d.ts +15 -0
- package/lib/markets/leverage/types.js +2 -0
- package/lib/markets/oi/converter.d.ts +62 -0
- package/lib/markets/oi/converter.js +102 -0
- package/lib/markets/oi/fetcher.d.ts +58 -0
- package/lib/markets/oi/fetcher.js +181 -0
- package/lib/markets/oi/index.d.ts +49 -0
- package/lib/markets/oi/index.js +77 -0
- package/lib/markets/oi/types.d.ts +73 -0
- package/lib/markets/oi/types.js +6 -0
- package/lib/markets/oi/validation.d.ts +80 -0
- package/lib/markets/oi/validation.js +172 -0
- package/lib/markets/price/builder.d.ts +25 -0
- package/lib/markets/price/builder.js +69 -0
- package/lib/markets/price/index.d.ts +6 -0
- package/lib/markets/price/index.js +22 -0
- package/lib/markets/price/marketPrice.d.ts +12 -0
- package/lib/markets/price/marketPrice.js +34 -0
- package/lib/markets/price/types.d.ts +23 -0
- package/lib/markets/price/types.js +5 -0
- package/lib/trade/counterTrade/index.d.ts +2 -0
- package/lib/trade/counterTrade/index.js +18 -0
- package/lib/trade/counterTrade/types.d.ts +7 -0
- package/lib/trade/counterTrade/types.js +2 -0
- package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
- package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
- package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
- package/lib/trade/effectiveLeverage/builder.js +30 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +23 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +64 -0
- package/lib/trade/effectiveLeverage/index.d.ts +3 -0
- package/lib/trade/effectiveLeverage/index.js +22 -0
- package/lib/trade/effectiveLeverage/types.d.ts +33 -0
- package/lib/trade/effectiveLeverage/types.js +2 -0
- package/lib/trade/fees/borrowing/builder.d.ts +14 -0
- package/lib/trade/fees/borrowing/builder.js +33 -0
- package/lib/trade/fees/borrowing/index.d.ts +15 -4
- package/lib/trade/fees/borrowing/index.js +42 -18
- package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
- package/lib/trade/fees/borrowingV2/builder.js +24 -0
- package/lib/trade/fees/borrowingV2/converter.d.ts +12 -3
- package/lib/trade/fees/borrowingV2/converter.js +29 -18
- package/lib/{contracts/fetch/fees/borrowingFeesV2.d.ts → trade/fees/borrowingV2/fetcher.d.ts} +2 -3
- package/lib/{contracts/fetch/fees/borrowingFeesV2.js → trade/fees/borrowingV2/fetcher.js} +6 -14
- package/lib/trade/fees/borrowingV2/index.d.ts +6 -17
- package/lib/trade/fees/borrowingV2/index.js +10 -37
- package/lib/trade/fees/borrowingV2/types.d.ts +22 -6
- package/lib/trade/fees/converter.d.ts +48 -0
- package/lib/trade/fees/converter.js +114 -0
- package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
- package/lib/trade/fees/fundingFees/builder.js +35 -0
- package/lib/{contracts/fetch/fees/fundingFees.d.ts → trade/fees/fundingFees/fetcher.d.ts} +2 -2
- package/lib/trade/fees/fundingFees/index.d.ts +28 -39
- package/lib/trade/fees/fundingFees/index.js +33 -46
- package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
- package/lib/trade/fees/fundingFees/pairContext.js +17 -0
- package/lib/trade/fees/holdingFees/index.d.ts +46 -0
- package/lib/trade/fees/holdingFees/index.js +105 -0
- package/lib/trade/fees/holdingFees/types.d.ts +23 -0
- package/lib/trade/fees/holdingFees/types.js +5 -0
- package/lib/trade/fees/index.d.ts +4 -2
- package/lib/trade/fees/index.js +45 -36
- package/lib/trade/fees/tiers/converter.d.ts +54 -0
- package/lib/trade/fees/tiers/converter.js +81 -0
- package/lib/trade/fees/tiers/index.d.ts +1 -0
- package/lib/trade/fees/tiers/index.js +1 -0
- package/lib/trade/fees/trading/builder.d.ts +18 -0
- package/lib/trade/fees/trading/builder.js +20 -0
- package/lib/trade/fees/trading/converter.d.ts +2 -0
- package/lib/trade/fees/trading/converter.js +5 -1
- package/lib/trade/fees/trading/holdingFees.d.ts +28 -0
- package/lib/trade/fees/trading/holdingFees.js +66 -0
- package/lib/trade/fees/trading/holdingFeesStructured.d.ts +28 -0
- package/lib/trade/fees/trading/holdingFeesStructured.js +66 -0
- package/lib/trade/fees/trading/index.d.ts +30 -2
- package/lib/trade/fees/trading/index.js +52 -1
- package/lib/trade/fees/trading/types.d.ts +9 -0
- package/lib/trade/index.d.ts +3 -1
- package/lib/trade/index.js +3 -1
- package/lib/trade/liquidation/builder.d.ts +25 -0
- package/lib/trade/liquidation/builder.js +59 -0
- package/lib/trade/liquidation/converter.d.ts +23 -0
- package/lib/trade/liquidation/converter.js +46 -0
- package/lib/trade/liquidation/index.d.ts +16 -0
- package/lib/trade/liquidation/index.js +123 -0
- package/lib/trade/liquidation/types.d.ts +42 -0
- package/lib/trade/liquidation/types.js +2 -0
- package/lib/trade/pnl/builder.d.ts +16 -0
- package/lib/trade/pnl/builder.js +44 -0
- package/lib/trade/pnl/converter.d.ts +47 -0
- package/lib/trade/pnl/converter.js +72 -0
- package/lib/trade/pnl/index.d.ts +88 -0
- package/lib/trade/pnl/index.js +286 -0
- package/lib/trade/pnl/types.d.ts +75 -0
- package/lib/trade/pnl/types.js +5 -0
- package/lib/trade/priceImpact/close/builder.d.ts +23 -0
- package/lib/trade/priceImpact/close/builder.js +45 -0
- package/lib/trade/priceImpact/close/index.d.ts +22 -0
- package/lib/trade/priceImpact/close/index.js +119 -0
- package/lib/trade/priceImpact/close/types.d.ts +44 -0
- package/lib/trade/priceImpact/close/types.js +5 -0
- package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
- package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
- package/lib/trade/priceImpact/cumulVol/converter.d.ts +31 -0
- package/lib/trade/priceImpact/cumulVol/converter.js +59 -0
- package/lib/trade/priceImpact/cumulVol/index.d.ts +108 -0
- package/lib/trade/priceImpact/cumulVol/index.js +235 -0
- package/lib/trade/priceImpact/index.d.ts +18 -5
- package/lib/trade/priceImpact/index.js +57 -10
- package/lib/trade/priceImpact/open/builder.d.ts +21 -0
- package/lib/trade/priceImpact/open/builder.js +43 -0
- package/lib/trade/priceImpact/open/index.d.ts +23 -0
- package/lib/trade/priceImpact/open/index.js +74 -0
- package/lib/trade/priceImpact/open/types.d.ts +41 -0
- package/lib/trade/priceImpact/open/types.js +5 -0
- package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
- package/lib/trade/priceImpact/skew/builder.js +28 -0
- package/lib/trade/priceImpact/skew/converter.d.ts +11 -42
- package/lib/trade/priceImpact/skew/converter.js +19 -109
- package/lib/{contracts/fetch/priceImpact/skew.d.ts → trade/priceImpact/skew/fetcher.d.ts} +9 -12
- package/lib/{contracts/fetch/priceImpact/skew.js → trade/priceImpact/skew/fetcher.js} +23 -22
- package/lib/trade/priceImpact/skew/index.d.ts +11 -15
- package/lib/trade/priceImpact/skew/index.js +22 -54
- package/lib/trade/priceImpact/skew/types.d.ts +2 -15
- package/lib/trade/spread.d.ts +5 -18
- package/lib/trade/spread.js +17 -106
- package/lib/trade/types.d.ts +30 -8
- package/lib/trade/types.js +20 -0
- package/lib/vault/index.d.ts +3 -1
- package/lib/vault/index.js +2 -2
- package/package.json +2 -2
- package/lib/trade/liquidation.d.ts +0 -42
- package/lib/trade/liquidation.js +0 -140
- package/lib/trade/pnl.d.ts +0 -10
- package/lib/trade/pnl.js +0 -38
- /package/lib/{contracts/fetch/fees/fundingFees.js → trade/fees/fundingFees/fetcher.js} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Trade effective leverage calculations
|
|
3
|
+
* @dev Mirrors contract's TradingCommonUtils.getTradeNewEffectiveLeverage
|
|
4
|
+
*/
|
|
5
|
+
import { TradeEffectiveLeverageInput, TradeEffectiveLeverageContext, TradeEffectiveLeverageResult } from "./types";
|
|
6
|
+
export type { TradeEffectiveLeverageInput, TradeEffectiveLeverageContext, TradeEffectiveLeverageResult, };
|
|
7
|
+
export { buildTradeEffectiveLeverageContext } from "./builder";
|
|
8
|
+
/**
|
|
9
|
+
* @dev Calculates the effective leverage of a trade accounting for unrealized PnL
|
|
10
|
+
* @dev Effective leverage increases when PnL is negative and decreases when positive
|
|
11
|
+
* @dev Mirrors contract's getTradeNewEffectiveLeverage function
|
|
12
|
+
* @param input Trade parameters including new position values
|
|
13
|
+
* @param context Combined context for calculations
|
|
14
|
+
* @returns Effective leverage and related values
|
|
15
|
+
*/
|
|
16
|
+
export declare const getTradeNewEffectiveLeverage: (input: TradeEffectiveLeverageInput, context: TradeEffectiveLeverageContext) => TradeEffectiveLeverageResult;
|
|
17
|
+
/**
|
|
18
|
+
* @dev Simplified version for existing positions (no opening fees)
|
|
19
|
+
* @param input Trade parameters
|
|
20
|
+
* @param context Combined context
|
|
21
|
+
* @returns Effective leverage and related values
|
|
22
|
+
*/
|
|
23
|
+
export declare const getTradeEffectiveLeverage: (input: Omit<TradeEffectiveLeverageInput, "openingFeesCollateral">, context: TradeEffectiveLeverageContext) => TradeEffectiveLeverageResult;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = exports.buildTradeEffectiveLeverageContext = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
var builder_1 = require("./builder");
|
|
6
|
+
Object.defineProperty(exports, "buildTradeEffectiveLeverageContext", { enumerable: true, get: function () { return builder_1.buildTradeEffectiveLeverageContext; } });
|
|
7
|
+
/**
|
|
8
|
+
* @dev Calculates the effective leverage of a trade accounting for unrealized PnL
|
|
9
|
+
* @dev Effective leverage increases when PnL is negative and decreases when positive
|
|
10
|
+
* @dev Mirrors contract's getTradeNewEffectiveLeverage function
|
|
11
|
+
* @param input Trade parameters including new position values
|
|
12
|
+
* @param context Combined context for calculations
|
|
13
|
+
* @returns Effective leverage and related values
|
|
14
|
+
*/
|
|
15
|
+
const getTradeNewEffectiveLeverage = (input, context) => {
|
|
16
|
+
const { trade, newOpenPrice, newCollateralAmount, newLeverage, currentPairPrice, openingFeesCollateral, } = input;
|
|
17
|
+
const { closingPriceImpactContext } = context;
|
|
18
|
+
// Calculate new position size
|
|
19
|
+
const newPositionSize = newCollateralAmount * newLeverage;
|
|
20
|
+
// Calculate price impact for closing at current price
|
|
21
|
+
const closingPriceImpact = (0, __1.getTradeClosingPriceImpact)({
|
|
22
|
+
trade: Object.assign(Object.assign({}, trade), { openPrice: newOpenPrice, collateralAmount: newCollateralAmount, leverage: newLeverage }),
|
|
23
|
+
oraclePrice: currentPairPrice,
|
|
24
|
+
positionSizeCollateral: newPositionSize,
|
|
25
|
+
currentPairPrice: currentPairPrice,
|
|
26
|
+
useCumulativeVolPriceImpact: true,
|
|
27
|
+
collateralIndex: trade.collateralIndex,
|
|
28
|
+
pairIndex: trade.pairIndex,
|
|
29
|
+
pairSpreadP: context.baseSpreadP,
|
|
30
|
+
contractsVersion: closingPriceImpactContext.tradeInfo.contractsVersion,
|
|
31
|
+
}, closingPriceImpactContext);
|
|
32
|
+
// Calculate unrealized PnL
|
|
33
|
+
// For longs: (exitPrice - entryPrice) * positionSizeToken
|
|
34
|
+
// For shorts: (entryPrice - exitPrice) * positionSizeToken
|
|
35
|
+
const priceDiff = trade.long
|
|
36
|
+
? closingPriceImpact.priceAfterImpact - newOpenPrice
|
|
37
|
+
: newOpenPrice - closingPriceImpact.priceAfterImpact;
|
|
38
|
+
const unrealizedPnl = priceDiff * closingPriceImpact.positionSizeToken;
|
|
39
|
+
// Calculate effective collateral (collateral + PnL - fees)
|
|
40
|
+
// Note: fees are subtracted because they reduce the effective collateral
|
|
41
|
+
const effectiveCollateral = newCollateralAmount + unrealizedPnl - openingFeesCollateral;
|
|
42
|
+
// Calculate effective leverage
|
|
43
|
+
// If effective collateral is <= 0, leverage is effectively infinite
|
|
44
|
+
const effectiveLeverage = effectiveCollateral > 0
|
|
45
|
+
? newPositionSize / effectiveCollateral
|
|
46
|
+
: Number.MAX_SAFE_INTEGER;
|
|
47
|
+
return {
|
|
48
|
+
effectiveLeverage,
|
|
49
|
+
unrealizedPnl,
|
|
50
|
+
effectiveCollateral,
|
|
51
|
+
positionSize: newPositionSize,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
exports.getTradeNewEffectiveLeverage = getTradeNewEffectiveLeverage;
|
|
55
|
+
/**
|
|
56
|
+
* @dev Simplified version for existing positions (no opening fees)
|
|
57
|
+
* @param input Trade parameters
|
|
58
|
+
* @param context Combined context
|
|
59
|
+
* @returns Effective leverage and related values
|
|
60
|
+
*/
|
|
61
|
+
const getTradeEffectiveLeverage = (input, context) => {
|
|
62
|
+
return (0, exports.getTradeNewEffectiveLeverage)(Object.assign(Object.assign({}, input), { openingFeesCollateral: 0 }), context);
|
|
63
|
+
};
|
|
64
|
+
exports.getTradeEffectiveLeverage = getTradeEffectiveLeverage;
|
|
@@ -0,0 +1,22 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
__exportStar(require("./builder"), exports);
|
|
20
|
+
var getTradeNewEffectiveLeverage_1 = require("./getTradeNewEffectiveLeverage");
|
|
21
|
+
Object.defineProperty(exports, "getTradeNewEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeNewEffectiveLeverage; } });
|
|
22
|
+
Object.defineProperty(exports, "getTradeEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeEffectiveLeverage; } });
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Types for trade effective leverage calculations
|
|
3
|
+
*/
|
|
4
|
+
import { Trade, TradeClosingPriceImpactContext } from "..";
|
|
5
|
+
/**
|
|
6
|
+
* @dev Input parameters for effective leverage calculation
|
|
7
|
+
* @dev Mirrors contract's parameters for getTradeNewEffectiveLeverage
|
|
8
|
+
*/
|
|
9
|
+
export type TradeEffectiveLeverageInput = {
|
|
10
|
+
trade: Trade;
|
|
11
|
+
newOpenPrice: number;
|
|
12
|
+
newCollateralAmount: number;
|
|
13
|
+
newLeverage: number;
|
|
14
|
+
currentPairPrice: number;
|
|
15
|
+
openingFeesCollateral: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @dev Context for effective leverage calculation
|
|
19
|
+
* Includes closing price impact context for PnL calculations
|
|
20
|
+
*/
|
|
21
|
+
export type TradeEffectiveLeverageContext = {
|
|
22
|
+
closingPriceImpactContext: TradeClosingPriceImpactContext;
|
|
23
|
+
baseSpreadP: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* @dev Result of effective leverage calculation
|
|
27
|
+
*/
|
|
28
|
+
export type TradeEffectiveLeverageResult = {
|
|
29
|
+
effectiveLeverage: number;
|
|
30
|
+
unrealizedPnl: number;
|
|
31
|
+
effectiveCollateral: number;
|
|
32
|
+
positionSize: number;
|
|
33
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Context builder for borrowing v1 fees
|
|
3
|
+
*/
|
|
4
|
+
import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
|
|
5
|
+
import { GetBorrowingFeeContext } from "./index";
|
|
6
|
+
/**
|
|
7
|
+
* @dev Builds borrowing v1 context from global trading variables
|
|
8
|
+
* @dev Returns full array-based context required for v1 borrowing fee calculations
|
|
9
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
10
|
+
* @param collateralIndex Collateral index (1-based)
|
|
11
|
+
* @param currentBlock Current block number
|
|
12
|
+
* @returns Full borrowing context with all pairs and groups or undefined if data not available
|
|
13
|
+
*/
|
|
14
|
+
export declare const buildBorrowingV1Context: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, currentBlock: number) => GetBorrowingFeeContext | undefined;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Context builder for borrowing v1 fees
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildBorrowingV1Context = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* @dev Builds borrowing v1 context from global trading variables
|
|
9
|
+
* @dev Returns full array-based context required for v1 borrowing fee calculations
|
|
10
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
11
|
+
* @param collateralIndex Collateral index (1-based)
|
|
12
|
+
* @param currentBlock Current block number
|
|
13
|
+
* @returns Full borrowing context with all pairs and groups or undefined if data not available
|
|
14
|
+
*/
|
|
15
|
+
const buildBorrowingV1Context = (globalTradingVariables, collateralIndex, currentBlock) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
18
|
+
if (!(collateral === null || collateral === void 0 ? void 0 : collateral.pairBorrowingFees) || !(collateral === null || collateral === void 0 ? void 0 : collateral.groupBorrowingFees)) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const pairs = collateral.pairBorrowingFees;
|
|
22
|
+
const groups = collateral.groupBorrowingFees;
|
|
23
|
+
if (pairs.length === 0 || groups.length === 0) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
currentBlock,
|
|
28
|
+
pairs,
|
|
29
|
+
groups,
|
|
30
|
+
collateralPriceUsd: ((_a = collateral.prices) === null || _a === void 0 ? void 0 : _a.collateralPriceUsd) || 1,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
exports.buildBorrowingV1Context = buildBorrowingV1Context;
|
|
@@ -4,18 +4,24 @@ export type GetBorrowingFeeContext = {
|
|
|
4
4
|
currentBlock: number;
|
|
5
5
|
groups: BorrowingFee.Group[];
|
|
6
6
|
pairs: BorrowingFee.Pair[];
|
|
7
|
+
collateralPriceUsd: number;
|
|
7
8
|
};
|
|
8
9
|
/**
|
|
9
10
|
* @dev Calculates borrowing fees using v1 model (block-based with groups)
|
|
10
11
|
* @dev Still actively used by markets that haven't migrated to v2
|
|
12
|
+
* @dev Uses dynamic collateral OI - converts OI to USD for fee calculations
|
|
11
13
|
* @param posDai Position size in collateral
|
|
12
|
-
* @param pairIndex Trading pair index
|
|
14
|
+
* @param pairIndex Trading pair index (required)
|
|
13
15
|
* @param long Whether position is long
|
|
14
16
|
* @param initialAccFees Initial accumulated fees when trade was opened
|
|
15
|
-
* @param context Context with current block and
|
|
17
|
+
* @param context Context with current block, fee data, and collateral price
|
|
16
18
|
* @returns Borrowing fee in collateral tokens
|
|
17
19
|
*/
|
|
18
|
-
export declare const getBorrowingFee: (posDai: number, pairIndex: PairIndex, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, context: GetBorrowingFeeContext) => number;
|
|
20
|
+
export declare const getBorrowingFee: (posDai: number, pairIndex: PairIndex | undefined, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, context: GetBorrowingFeeContext) => number;
|
|
21
|
+
/**
|
|
22
|
+
* @dev This function uses static OI which doesn't reflect current market values
|
|
23
|
+
* @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice)
|
|
24
|
+
*/
|
|
19
25
|
export declare const withinMaxGroupOi: (pairIndex: PairIndex, long: boolean, positionSizeCollateral: number, context: {
|
|
20
26
|
groups: BorrowingFee.Group[];
|
|
21
27
|
pairs: BorrowingFee.Pair[];
|
|
@@ -29,6 +35,7 @@ export declare const borrowingFeeUtils: {
|
|
|
29
35
|
getPairPendingAccFees: (pairIndex: PairIndex, currentBlock: number, context: {
|
|
30
36
|
pairs: BorrowingFee.Pair[];
|
|
31
37
|
openInterest: OpenInterest;
|
|
38
|
+
collateralPriceUsd: number;
|
|
32
39
|
}) => {
|
|
33
40
|
accFeeLong: number;
|
|
34
41
|
accFeeShort: number;
|
|
@@ -38,9 +45,11 @@ export declare const borrowingFeeUtils: {
|
|
|
38
45
|
getPairPendingAccFee: (pairIndex: PairIndex, currentBlock: number, long: boolean, context: {
|
|
39
46
|
pairs: BorrowingFee.Pair[];
|
|
40
47
|
openInterest: OpenInterest;
|
|
48
|
+
collateralPriceUsd: number;
|
|
41
49
|
}) => number;
|
|
42
50
|
getGroupPendingAccFees: (groupIndex: number, currentBlock: number, context: {
|
|
43
51
|
groups: BorrowingFee.Group[];
|
|
52
|
+
collateralPriceUsd: number;
|
|
44
53
|
}) => {
|
|
45
54
|
accFeeLong: number;
|
|
46
55
|
accFeeShort: number;
|
|
@@ -49,8 +58,9 @@ export declare const borrowingFeeUtils: {
|
|
|
49
58
|
};
|
|
50
59
|
getGroupPendingAccFee: (groupIndex: number, currentBlock: number, long: boolean, context: {
|
|
51
60
|
groups: BorrowingFee.Group[];
|
|
61
|
+
collateralPriceUsd: number;
|
|
52
62
|
}) => number;
|
|
53
|
-
getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, maxOi: number, feeExponent: number, feeCaps?: BorrowingFee.BorrowingFeePerBlockCap) => {
|
|
63
|
+
getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, maxOi: number, feeExponent: number, feeCaps?: BorrowingFee.BorrowingFeePerBlockCap, collateralPriceUsd?: number) => {
|
|
54
64
|
accFeeLong: number;
|
|
55
65
|
accFeeShort: number;
|
|
56
66
|
deltaLong: number;
|
|
@@ -66,3 +76,4 @@ export declare const borrowingFeeUtils: {
|
|
|
66
76
|
};
|
|
67
77
|
export * as BorrowingFee from "./types";
|
|
68
78
|
export * from "./converter";
|
|
79
|
+
export * from "./builder";
|
|
@@ -30,18 +30,22 @@ exports.BorrowingFee = exports.borrowingFeeUtils = exports.withinMaxGroupOi = ex
|
|
|
30
30
|
/**
|
|
31
31
|
* @dev Calculates borrowing fees using v1 model (block-based with groups)
|
|
32
32
|
* @dev Still actively used by markets that haven't migrated to v2
|
|
33
|
+
* @dev Uses dynamic collateral OI - converts OI to USD for fee calculations
|
|
33
34
|
* @param posDai Position size in collateral
|
|
34
|
-
* @param pairIndex Trading pair index
|
|
35
|
+
* @param pairIndex Trading pair index (required)
|
|
35
36
|
* @param long Whether position is long
|
|
36
37
|
* @param initialAccFees Initial accumulated fees when trade was opened
|
|
37
|
-
* @param context Context with current block and
|
|
38
|
+
* @param context Context with current block, fee data, and collateral price
|
|
38
39
|
* @returns Borrowing fee in collateral tokens
|
|
39
40
|
*/
|
|
40
41
|
const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
|
|
41
|
-
if (
|
|
42
|
+
if (pairIndex === undefined) {
|
|
43
|
+
throw new Error("pairIndex is required for borrowing fee calculations");
|
|
44
|
+
}
|
|
45
|
+
const { pairs, groups } = context;
|
|
46
|
+
if (!groups || !pairs || !pairs[pairIndex]) {
|
|
42
47
|
return 0;
|
|
43
48
|
}
|
|
44
|
-
const { pairs } = context;
|
|
45
49
|
const pairGroups = pairs[pairIndex].groups;
|
|
46
50
|
const firstPairGroup = (pairGroups === null || pairGroups === void 0 ? void 0 : pairGroups.length) > 0 ? pairGroups[0] : undefined;
|
|
47
51
|
let fee = 0;
|
|
@@ -52,13 +56,19 @@ const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
|
|
|
52
56
|
? getPairPendingAccFee(pairIndex, context.currentBlock, long, {
|
|
53
57
|
pairs,
|
|
54
58
|
openInterest,
|
|
59
|
+
collateralPriceUsd: context.collateralPriceUsd,
|
|
55
60
|
})
|
|
56
61
|
: long
|
|
57
62
|
? firstPairGroup.pairAccFeeLong
|
|
58
63
|
: firstPairGroup.pairAccFeeShort) - initialAccFees.accPairFee;
|
|
59
64
|
}
|
|
60
65
|
for (let i = pairGroups.length; i > 0; i--) {
|
|
61
|
-
const { deltaGroup, deltaPair, beforeTradeOpen } = getPairGroupAccFeesDeltas(i - 1, pairGroups, initialAccFees, pairIndex, long,
|
|
66
|
+
const { deltaGroup, deltaPair, beforeTradeOpen } = getPairGroupAccFeesDeltas(i - 1, pairGroups, initialAccFees, pairIndex, long, {
|
|
67
|
+
currentBlock: context.currentBlock,
|
|
68
|
+
groups,
|
|
69
|
+
pairs,
|
|
70
|
+
collateralPriceUsd: context.collateralPriceUsd,
|
|
71
|
+
});
|
|
62
72
|
fee += Math.max(deltaGroup, deltaPair);
|
|
63
73
|
if (beforeTradeOpen) {
|
|
64
74
|
break;
|
|
@@ -67,6 +77,10 @@ const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
|
|
|
67
77
|
return (posDai * fee) / 100;
|
|
68
78
|
};
|
|
69
79
|
exports.getBorrowingFee = getBorrowingFee;
|
|
80
|
+
/**
|
|
81
|
+
* @dev This function uses static OI which doesn't reflect current market values
|
|
82
|
+
* @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice)
|
|
83
|
+
*/
|
|
70
84
|
const withinMaxGroupOi = (pairIndex, long, positionSizeCollateral, context) => {
|
|
71
85
|
const { groups, pairs } = context;
|
|
72
86
|
if (!groups || !pairs) {
|
|
@@ -85,18 +99,19 @@ const getPairGroupIndex = (pairIndex, context) => {
|
|
|
85
99
|
return pairGroups.length == 0 ? 0 : pairGroups[0].groupIndex;
|
|
86
100
|
};
|
|
87
101
|
const getPairPendingAccFees = (pairIndex, currentBlock, context) => {
|
|
88
|
-
const { pairs, openInterest: { long, short }, } = context;
|
|
102
|
+
const { pairs, openInterest: { long, short }, collateralPriceUsd, } = context;
|
|
89
103
|
const pair = pairs[pairIndex];
|
|
90
|
-
return getPendingAccFees(pair.accFeeLong, pair.accFeeShort, long, short, pair.feePerBlock, currentBlock, pair.accLastUpdatedBlock, pair.oi.max, pair.feeExponent, pair.feePerBlockCap);
|
|
104
|
+
return getPendingAccFees(pair.accFeeLong, pair.accFeeShort, long, short, pair.feePerBlock, currentBlock, pair.accLastUpdatedBlock, pair.oi.max, pair.feeExponent, pair.feePerBlockCap, collateralPriceUsd);
|
|
91
105
|
};
|
|
92
106
|
const getPairPendingAccFee = (pairIndex, currentBlock, long, context) => {
|
|
93
107
|
const { accFeeLong, accFeeShort } = getPairPendingAccFees(pairIndex, currentBlock, context);
|
|
94
108
|
return long ? accFeeLong : accFeeShort;
|
|
95
109
|
};
|
|
96
110
|
const getGroupPendingAccFees = (groupIndex, currentBlock, context) => {
|
|
97
|
-
const { groups } = context;
|
|
111
|
+
const { groups, collateralPriceUsd } = context;
|
|
98
112
|
const group = groups[groupIndex];
|
|
99
|
-
return getPendingAccFees(group.accFeeLong, group.accFeeShort, group.oi.long, group.oi.short, group.feePerBlock, currentBlock, group.accLastUpdatedBlock, group.oi.max, group.feeExponent
|
|
113
|
+
return getPendingAccFees(group.accFeeLong, group.accFeeShort, group.oi.long, group.oi.short, group.feePerBlock, currentBlock, group.accLastUpdatedBlock, group.oi.max, group.feeExponent, undefined, // no fee caps for groups
|
|
114
|
+
collateralPriceUsd);
|
|
100
115
|
};
|
|
101
116
|
const getGroupPendingAccFee = (groupIndex, currentBlock, long, context) => {
|
|
102
117
|
const { accFeeLong, accFeeShort } = getGroupPendingAccFees(groupIndex, currentBlock, context);
|
|
@@ -107,14 +122,16 @@ const getPairGroupAccFeesDeltas = (i, pairGroups, initialFees, pairIndex, long,
|
|
|
107
122
|
const beforeTradeOpen = group.block < initialFees.block;
|
|
108
123
|
let deltaGroup, deltaPair;
|
|
109
124
|
if (i == pairGroups.length - 1) {
|
|
110
|
-
const { currentBlock, groups, pairs } = context;
|
|
125
|
+
const { currentBlock, groups, pairs, collateralPriceUsd } = context;
|
|
111
126
|
const openInterest = pairs[pairIndex].oi;
|
|
112
127
|
deltaGroup = getGroupPendingAccFee(group.groupIndex, currentBlock, long, {
|
|
113
128
|
groups,
|
|
129
|
+
collateralPriceUsd,
|
|
114
130
|
});
|
|
115
131
|
deltaPair = getPairPendingAccFee(pairIndex, currentBlock, long, {
|
|
116
132
|
pairs,
|
|
117
133
|
openInterest,
|
|
134
|
+
collateralPriceUsd,
|
|
118
135
|
});
|
|
119
136
|
}
|
|
120
137
|
else {
|
|
@@ -137,8 +154,8 @@ const getPairGroupAccFeesDeltas = (i, pairGroups, initialFees, pairIndex, long,
|
|
|
137
154
|
}
|
|
138
155
|
return { deltaGroup, deltaPair, beforeTradeOpen };
|
|
139
156
|
};
|
|
140
|
-
const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock, currentBlock, accLastUpdatedBlock, maxOi, feeExponent, feeCaps // as percentage: eg minP: 0.1 = 10%, maxP: 0.5 = 50%
|
|
141
|
-
) => {
|
|
157
|
+
const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock, currentBlock, accLastUpdatedBlock, maxOi, feeExponent, feeCaps, // as percentage: eg minP: 0.1 = 10%, maxP: 0.5 = 50%
|
|
158
|
+
collateralPriceUsd) => {
|
|
142
159
|
const moreShorts = oiLong < oiShort;
|
|
143
160
|
const blockDistance = currentBlock > accLastUpdatedBlock ? currentBlock - accLastUpdatedBlock : 0;
|
|
144
161
|
// If block distance is zero nothing changes
|
|
@@ -150,19 +167,25 @@ const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock
|
|
|
150
167
|
deltaShort: 0,
|
|
151
168
|
};
|
|
152
169
|
}
|
|
153
|
-
|
|
154
|
-
|
|
170
|
+
// Convert OI to USD if collateral price is provided (dynamic collateral OI)
|
|
171
|
+
const oiLongUsd = collateralPriceUsd ? oiLong * collateralPriceUsd : oiLong;
|
|
172
|
+
const oiShortUsd = collateralPriceUsd
|
|
173
|
+
? oiShort * collateralPriceUsd
|
|
174
|
+
: oiShort;
|
|
175
|
+
const maxOiUsd = collateralPriceUsd ? maxOi * collateralPriceUsd : maxOi;
|
|
176
|
+
const netOi = Math.abs(oiLongUsd - oiShortUsd);
|
|
177
|
+
// Calculate minimum and maximum effective oi (using USD values if available)
|
|
155
178
|
const { minP, maxP } = getFeePerBlockCaps(feeCaps);
|
|
156
|
-
const minNetOi =
|
|
157
|
-
const maxNetOi =
|
|
179
|
+
const minNetOi = maxOiUsd * minP;
|
|
180
|
+
const maxNetOi = maxOiUsd * maxP;
|
|
158
181
|
// Calculate the minimum acc fee delta (applies to both sides)
|
|
159
182
|
const minDelta = minNetOi > 0
|
|
160
|
-
? getPendingAccFeesDelta(blockDistance, feePerBlock, netOi,
|
|
183
|
+
? getPendingAccFeesDelta(blockDistance, feePerBlock, netOi, maxOiUsd, feeExponent)
|
|
161
184
|
: 0;
|
|
162
185
|
// Calculate the actual acc fee (using capped oi of 100% or less)
|
|
163
186
|
const delta = netOi > minNetOi
|
|
164
187
|
? getPendingAccFeesDelta(blockDistance, feePerBlock, Math.min(netOi, maxNetOi), // if netOi > cap, use cap
|
|
165
|
-
|
|
188
|
+
maxOiUsd, feeExponent)
|
|
166
189
|
: minDelta;
|
|
167
190
|
const [deltaLong, deltaShort] = moreShorts
|
|
168
191
|
? [minDelta, delta]
|
|
@@ -217,3 +240,4 @@ exports.borrowingFeeUtils = {
|
|
|
217
240
|
};
|
|
218
241
|
exports.BorrowingFee = __importStar(require("./types"));
|
|
219
242
|
__exportStar(require("./converter"), exports);
|
|
243
|
+
__exportStar(require("./builder"), exports);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
|
|
2
|
+
import { GetPairBorrowingFeeV2Context } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* @dev Builds borrowing v2 sub-context for a specific pair
|
|
5
|
+
*/
|
|
6
|
+
export declare const buildBorrowingV2Context: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, currentTimestamp: number) => GetPairBorrowingFeeV2Context | undefined;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildBorrowingV2Context = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @dev Builds borrowing v2 sub-context for a specific pair
|
|
6
|
+
*/
|
|
7
|
+
const buildBorrowingV2Context = (globalTradingVariables, collateralIndex, pairIndex, currentTimestamp) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
10
|
+
if (!(collateral === null || collateral === void 0 ? void 0 : collateral.pairBorrowingFeesV2)) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const params = (_a = collateral.pairBorrowingFeesV2.params) === null || _a === void 0 ? void 0 : _a[pairIndex];
|
|
14
|
+
const data = (_b = collateral.pairBorrowingFeesV2.data) === null || _b === void 0 ? void 0 : _b[pairIndex];
|
|
15
|
+
if (!params || !data) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
params,
|
|
20
|
+
data,
|
|
21
|
+
currentTimestamp,
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
exports.buildBorrowingV2Context = buildBorrowingV2Context;
|
|
@@ -38,14 +38,13 @@ export declare const convertTradeInitialAccFees: (contractTradeData: IFundingFee
|
|
|
38
38
|
export declare const convertTradeInitialAccFeesArray: (contractTradeDataArray: IFundingFees.TradeFeesDataStructOutput[]) => BorrowingFeeV2.TradeInitialAccFees[];
|
|
39
39
|
/**
|
|
40
40
|
* @dev Creates a context object from contract data arrays
|
|
41
|
-
* @param collateralIndices Array of collateral indices
|
|
42
41
|
* @param pairIndices Array of pair indices
|
|
43
42
|
* @param borrowingParams Array of borrowing fee params from contract
|
|
44
43
|
* @param borrowingData Array of pair borrowing fee data from contract
|
|
45
44
|
* @param currentTimestamp Optional current timestamp
|
|
46
|
-
* @returns Complete SDK context for borrowing v2 calculations
|
|
45
|
+
* @returns Complete SDK context for borrowing v2 calculations (collateral-scoped)
|
|
47
46
|
*/
|
|
48
|
-
export declare const createBorrowingV2Context: (
|
|
47
|
+
export declare const createBorrowingV2Context: (pairIndices: number[], borrowingParams: IFundingFees.BorrowingFeeParamsStructOutput[], borrowingData: IFundingFees.PairBorrowingFeeDataStructOutput[], currentTimestamp?: number) => BorrowingFeeV2.GetBorrowingFeeV2Context;
|
|
49
48
|
/**
|
|
50
49
|
* @dev Helper function to validate borrowing rate per second
|
|
51
50
|
* @param borrowingRatePerSecondP Borrowing rate per second (normalized float)
|
|
@@ -64,3 +63,13 @@ export declare const borrowingRateToAPR: (borrowingRatePerSecondP: number) => nu
|
|
|
64
63
|
* @returns Borrowing rate per second (normalized float)
|
|
65
64
|
*/
|
|
66
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;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.aprToBorrowingRate = exports.borrowingRateToAPR = exports.isValidBorrowingRate = exports.createBorrowingV2Context = exports.convertTradeInitialAccFeesArray = exports.convertTradeInitialAccFees = exports.convertPairBorrowingFeeDataArray = exports.convertPairBorrowingFeeData = exports.convertBorrowingFeeParamsArray = exports.convertBorrowingFeeParams = void 0;
|
|
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
4
|
const index_1 = require("./index");
|
|
5
5
|
/**
|
|
6
6
|
* @dev Converts contract BorrowingFeeParams to SDK type
|
|
@@ -56,35 +56,24 @@ const convertTradeInitialAccFeesArray = (contractTradeDataArray) => contractTrad
|
|
|
56
56
|
exports.convertTradeInitialAccFeesArray = convertTradeInitialAccFeesArray;
|
|
57
57
|
/**
|
|
58
58
|
* @dev Creates a context object from contract data arrays
|
|
59
|
-
* @param collateralIndices Array of collateral indices
|
|
60
59
|
* @param pairIndices Array of pair indices
|
|
61
60
|
* @param borrowingParams Array of borrowing fee params from contract
|
|
62
61
|
* @param borrowingData Array of pair borrowing fee data from contract
|
|
63
62
|
* @param currentTimestamp Optional current timestamp
|
|
64
|
-
* @returns Complete SDK context for borrowing v2 calculations
|
|
63
|
+
* @returns Complete SDK context for borrowing v2 calculations (collateral-scoped)
|
|
65
64
|
*/
|
|
66
|
-
const createBorrowingV2Context = (
|
|
65
|
+
const createBorrowingV2Context = (pairIndices, borrowingParams, borrowingData, currentTimestamp) => {
|
|
67
66
|
const context = {
|
|
68
67
|
currentTimestamp,
|
|
69
68
|
borrowingParams: {},
|
|
70
69
|
borrowingData: {},
|
|
71
70
|
};
|
|
72
|
-
// Build
|
|
73
|
-
for (let i = 0; i <
|
|
74
|
-
const collateralIndex = collateralIndices[i];
|
|
71
|
+
// Build objects indexed by pairIndex
|
|
72
|
+
for (let i = 0; i < pairIndices.length; i++) {
|
|
75
73
|
const pairIndex = pairIndices[i];
|
|
76
|
-
// Initialize collateral index objects if they don't exist
|
|
77
|
-
if (!context.borrowingParams[collateralIndex]) {
|
|
78
|
-
context.borrowingParams[collateralIndex] = {};
|
|
79
|
-
}
|
|
80
|
-
if (!context.borrowingData[collateralIndex]) {
|
|
81
|
-
context.borrowingData[collateralIndex] = {};
|
|
82
|
-
}
|
|
83
74
|
// Store converted data
|
|
84
|
-
context.borrowingParams[
|
|
85
|
-
|
|
86
|
-
context.borrowingData[collateralIndex][pairIndex] =
|
|
87
|
-
(0, exports.convertPairBorrowingFeeData)(borrowingData[i]);
|
|
75
|
+
context.borrowingParams[pairIndex] = (0, exports.convertBorrowingFeeParams)(borrowingParams[i]);
|
|
76
|
+
context.borrowingData[pairIndex] = (0, exports.convertPairBorrowingFeeData)(borrowingData[i]);
|
|
88
77
|
}
|
|
89
78
|
return context;
|
|
90
79
|
};
|
|
@@ -119,3 +108,25 @@ const aprToBorrowingRate = (aprPercentage) => {
|
|
|
119
108
|
return aprPercentage / SECONDS_PER_YEAR;
|
|
120
109
|
};
|
|
121
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;
|
package/lib/{contracts/fetch/fees/borrowingFeesV2.d.ts → trade/fees/borrowingV2/fetcher.d.ts}
RENAMED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import { BorrowingFeeV2 } from "../../../trade/fees/borrowingV2";
|
|
1
|
+
import type { GNSMultiCollatDiamond } from "../../../contracts/types/generated";
|
|
2
|
+
import { BorrowingFeeV2 } from ".";
|
|
4
3
|
/**
|
|
5
4
|
* @dev Fetches borrowing fee parameters v2 for specific pairs
|
|
6
5
|
* @param contract GNSMultiCollatDiamond contract instance
|
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.fetchBorrowingV2DataForPairs = exports.createBorrowingV2ContextFromArrays = exports.createBorrowingV2ContextFromContract = exports.fetchAllBorrowingV2Data = exports.fetchPairPendingAccBorrowingFeesV2 = exports.fetchTradeBorrowingFeesCollateralV2 = exports.fetchPairBorrowingFeeDataV2 = exports.fetchBorrowingFeeParamsV2 = void 0;
|
|
13
|
-
const converter_1 = require("
|
|
13
|
+
const converter_1 = require("./converter");
|
|
14
14
|
/**
|
|
15
15
|
* @dev Fetches borrowing fee parameters v2 for specific pairs
|
|
16
16
|
* @param contract GNSMultiCollatDiamond contract instance
|
|
@@ -147,20 +147,12 @@ const createBorrowingV2ContextFromArrays = (collateralIndices, pairIndices, para
|
|
|
147
147
|
borrowingParams: {},
|
|
148
148
|
borrowingData: {},
|
|
149
149
|
};
|
|
150
|
-
// Build
|
|
151
|
-
for (let i = 0; i <
|
|
152
|
-
const collateralIndex = collateralIndices[i];
|
|
150
|
+
// Build objects indexed by pairIndex (collateral-scoped)
|
|
151
|
+
for (let i = 0; i < pairIndices.length; i++) {
|
|
153
152
|
const pairIndex = pairIndices[i];
|
|
154
|
-
//
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
if (!context.borrowingData[collateralIndex]) {
|
|
159
|
-
context.borrowingData[collateralIndex] = {};
|
|
160
|
-
}
|
|
161
|
-
// Store data
|
|
162
|
-
context.borrowingParams[collateralIndex][pairIndex] = params[i];
|
|
163
|
-
context.borrowingData[collateralIndex][pairIndex] = data[i];
|
|
153
|
+
// Store data indexed by pairIndex
|
|
154
|
+
context.borrowingParams[pairIndex] = params[i];
|
|
155
|
+
context.borrowingData[pairIndex] = data[i];
|
|
164
156
|
}
|
|
165
157
|
return context;
|
|
166
158
|
};
|
|
@@ -22,23 +22,11 @@ export declare const BORROWING_V2_PRECISION: {
|
|
|
22
22
|
export declare const getPairPendingAccBorrowingFees: (params: BorrowingFeeV2.BorrowingFeeParams, data: BorrowingFeeV2.PairBorrowingFeeData, currentPairPrice: number, currentTimestamp?: number) => number;
|
|
23
23
|
/**
|
|
24
24
|
* @dev Calculates borrowing fees owed by a specific trade
|
|
25
|
-
* @param input Trade borrowing fee calculation input
|
|
26
|
-
* @param context
|
|
27
|
-
* @returns Borrowing fees in collateral tokens
|
|
28
|
-
*/
|
|
29
|
-
export declare const getTradeBorrowingFeesCollateral: (input: BorrowingFeeV2.TradeBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
|
|
30
|
-
/**
|
|
31
|
-
* @dev Convenience function to calculate borrowing fees for a trade using individual parameters
|
|
32
|
-
* @param positionSizeCollateral Position size in collateral tokens
|
|
33
|
-
* @param pairIndex Index of the trading pair
|
|
34
|
-
* @param collateralIndex Index of the collateral
|
|
35
|
-
* @param openPrice Price at which the trade was opened
|
|
36
|
-
* @param currentPairPrice Current price of the trading pair
|
|
37
|
-
* @param initialAccBorrowingFeeP Initial accumulated borrowing fee when trade was opened
|
|
38
|
-
* @param context Context containing borrowing parameters and data
|
|
25
|
+
* @param input Trade borrowing fee calculation input (without pairIndex)
|
|
26
|
+
* @param context Pair-specific borrowing context
|
|
39
27
|
* @returns Borrowing fees in collateral tokens
|
|
40
28
|
*/
|
|
41
|
-
export declare const
|
|
29
|
+
export declare const getTradeBorrowingFeesCollateral: (input: Omit<BorrowingFeeV2.TradeBorrowingFeeInput, "pairIndex">, context: BorrowingFeeV2.GetPairBorrowingFeeV2Context) => number;
|
|
42
30
|
/**
|
|
43
31
|
* @dev Utility function to get pending accumulated borrowing fees for a pair using context
|
|
44
32
|
* @param input Pair borrowing fee calculation input
|
|
@@ -51,9 +39,10 @@ export declare const getPairBorrowingFees: (input: BorrowingFeeV2.PairBorrowingF
|
|
|
51
39
|
*/
|
|
52
40
|
export declare const borrowingFeeV2Utils: {
|
|
53
41
|
getPairPendingAccBorrowingFees: (params: BorrowingFeeV2.BorrowingFeeParams, data: BorrowingFeeV2.PairBorrowingFeeData, currentPairPrice: number, currentTimestamp?: number) => number;
|
|
54
|
-
getTradeBorrowingFeesCollateral: (input: BorrowingFeeV2.TradeBorrowingFeeInput, context: BorrowingFeeV2.
|
|
42
|
+
getTradeBorrowingFeesCollateral: (input: Omit<BorrowingFeeV2.TradeBorrowingFeeInput, "pairIndex">, context: BorrowingFeeV2.GetPairBorrowingFeeV2Context) => number;
|
|
55
43
|
getPairBorrowingFees: (input: BorrowingFeeV2.PairBorrowingFeeInput, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
|
|
56
|
-
getBorrowingFee: (positionSizeCollateral: number, pairIndex: number, collateralIndex: number, openPrice: number, currentPairPrice: number, initialAccBorrowingFeeP: number, context: BorrowingFeeV2.GetBorrowingFeeV2Context) => number;
|
|
57
44
|
};
|
|
58
45
|
export * as BorrowingFeeV2 from "./types";
|
|
46
|
+
export { GetPairBorrowingFeeV2Context } from "./types";
|
|
59
47
|
export * from "./converter";
|
|
48
|
+
export * from "./fetcher";
|