@gainsnetwork/sdk 1.4.0-rc1 → 1.4.2-rc1
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.js +10 -10
- package/lib/backend/tradingVariables/converter.js +57 -57
- package/lib/backend/tradingVariables/index.js +6 -7
- package/lib/constants.js +2 -2
- package/lib/contracts/addresses.js +4 -1
- package/lib/contracts/index.d.ts +1 -1
- package/lib/contracts/index.js +3 -3
- package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
- package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.d.ts +1067 -0
- package/lib/contracts/types/generated/GNSBorrowingFees.js +2 -0
- package/lib/contracts/types/generated/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 +386 -260
- 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.d.ts +2 -10
- package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +1621 -219
- 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/utils/borrowingFees.js +9 -20
- package/lib/contracts/utils/openTrades.js +11 -20
- package/lib/contracts/utils/pairs.js +12 -21
- package/lib/markets/forex.js +1 -1
- package/lib/markets/leverage/builder.js +2 -2
- package/lib/markets/oi/fetcher.d.ts +58 -0
- package/lib/markets/oi/fetcher.js +181 -0
- package/lib/markets/oi/validation.d.ts +80 -0
- package/lib/markets/oi/validation.js +172 -0
- package/lib/markets/price/index.d.ts +1 -0
- package/lib/markets/price/index.js +1 -0
- package/lib/markets/price/signedPrices.d.ts +36 -0
- package/lib/markets/price/signedPrices.js +181 -0
- package/lib/markets/price/types.d.ts +27 -0
- package/lib/pricing/depthBands/converter.d.ts +65 -0
- package/lib/pricing/depthBands/converter.js +155 -0
- package/lib/pricing/depthBands/decoder.d.ts +32 -0
- package/lib/pricing/depthBands/decoder.js +109 -0
- package/lib/pricing/depthBands/encoder.d.ts +19 -0
- package/lib/pricing/depthBands/encoder.js +105 -0
- package/lib/pricing/depthBands/index.d.ts +8 -0
- package/lib/pricing/depthBands/index.js +26 -0
- package/lib/pricing/depthBands/types.d.ts +49 -0
- package/lib/pricing/depthBands/types.js +10 -0
- package/lib/pricing/depthBands/validator.d.ts +22 -0
- package/lib/pricing/depthBands/validator.js +113 -0
- package/lib/pricing/depthBands.d.ts +39 -0
- package/lib/pricing/depthBands.js +94 -0
- package/lib/pricing/index.d.ts +4 -0
- package/lib/pricing/index.js +20 -0
- package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
- package/lib/trade/effectiveLeverage/builder.js +30 -0
- package/lib/trade/fees/borrowing/builder.js +2 -3
- package/lib/trade/fees/borrowing/converter.js +5 -1
- package/lib/trade/fees/borrowing/index.js +5 -5
- package/lib/trade/fees/borrowingV2/builder.js +3 -4
- package/lib/trade/fees/borrowingV2/converter.js +1 -1
- package/lib/trade/fees/borrowingV2/fetcher.js +26 -32
- package/lib/trade/fees/borrowingV2/index.js +3 -3
- package/lib/trade/fees/converter.js +22 -22
- package/lib/trade/fees/fundingFees/builder.js +6 -7
- package/lib/trade/fees/fundingFees/converter.js +1 -1
- package/lib/trade/fees/fundingFees/fetcher.js +16 -25
- package/lib/trade/fees/fundingFees/index.js +2 -3
- 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/tiers/index.js +1 -2
- 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.js +5 -3
- package/lib/trade/liquidation/builder.js +1 -2
- package/lib/trade/liquidation/index.js +4 -6
- package/lib/trade/oiWindows.js +1 -2
- package/lib/trade/pnl/builder.js +1 -2
- package/lib/trade/pnl/converter.js +1 -1
- package/lib/trade/pnl/index.js +4 -7
- package/lib/trade/priceImpact/close/builder.js +1 -2
- package/lib/trade/priceImpact/close/index.js +4 -1
- package/lib/trade/priceImpact/cumulVol/builder.js +18 -10
- package/lib/trade/priceImpact/cumulVol/index.js +21 -16
- package/lib/trade/priceImpact/cumulVol/types.d.ts +11 -0
- package/lib/trade/priceImpact/cumulVol/types.js +2 -0
- package/lib/trade/priceImpact/open/builder.js +1 -2
- package/lib/trade/priceImpact/open/index.js +4 -1
- package/lib/trade/priceImpact/skew/builder.js +2 -3
- package/lib/trade/priceImpact/skew/converter.js +1 -1
- package/lib/trade/priceImpact/skew/fetcher.js +24 -33
- package/package.json +2 -2
- 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,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Holding fees calculation utilities for v10+ markets
|
|
3
|
+
* @dev Combines funding fees and borrowing v2 fees
|
|
4
|
+
*/
|
|
5
|
+
import { FundingFeeParams, PairFundingFeeData, PairOiAfterV10 } from "../fundingFees/types";
|
|
6
|
+
import { BorrowingFeeParams, PairBorrowingFeeData } from "../borrowingV2/types";
|
|
7
|
+
export type HoldingFeeRates = {
|
|
8
|
+
longHourlyRate: number;
|
|
9
|
+
shortHourlyRate: number;
|
|
10
|
+
fundingFeeLongHourlyRate: number;
|
|
11
|
+
fundingFeeShortHourlyRate: number;
|
|
12
|
+
borrowingFeeHourlyRate: number;
|
|
13
|
+
currentFundingRatePerSecondP: number;
|
|
14
|
+
currentBorrowingRatePerSecondP: number;
|
|
15
|
+
};
|
|
16
|
+
export type GetPairHoldingFeeRatesInput = {
|
|
17
|
+
fundingParams: FundingFeeParams;
|
|
18
|
+
fundingData: PairFundingFeeData;
|
|
19
|
+
pairOiToken: PairOiAfterV10;
|
|
20
|
+
netExposureToken: number;
|
|
21
|
+
netExposureUsd: number;
|
|
22
|
+
borrowingParams: BorrowingFeeParams | null;
|
|
23
|
+
borrowingData: PairBorrowingFeeData | null;
|
|
24
|
+
currentPairPrice: number;
|
|
25
|
+
currentTimestamp: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* @dev Calculates current holding fee rates per hour for display
|
|
29
|
+
* @param input Input parameters for calculation
|
|
30
|
+
* @returns Holding fee rates per hour with breakdown
|
|
31
|
+
*/
|
|
32
|
+
export declare const getPairHoldingFeeRates: (input: GetPairHoldingFeeRatesInput) => HoldingFeeRates;
|
|
33
|
+
/**
|
|
34
|
+
* @dev Converts a per-second rate to annual percentage rate (APR)
|
|
35
|
+
* @param ratePerSecond Rate per second
|
|
36
|
+
* @returns Annual percentage rate
|
|
37
|
+
*/
|
|
38
|
+
export declare const convertRatePerSecondToAPR: (ratePerSecond: number) => number;
|
|
39
|
+
/**
|
|
40
|
+
* @dev Formats a holding fee rate for display
|
|
41
|
+
* @param rate Hourly rate (can be negative)
|
|
42
|
+
* @param decimals Number of decimal places
|
|
43
|
+
* @returns Formatted string with sign
|
|
44
|
+
*/
|
|
45
|
+
export declare const formatHoldingFeeRate: (rate: number, decimals?: number) => string;
|
|
46
|
+
export * as HoldingFees from "./types";
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Holding fees calculation utilities for v10+ markets
|
|
4
|
+
* @dev Combines funding fees and borrowing v2 fees
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
+
if (mod && mod.__esModule) return mod;
|
|
24
|
+
var result = {};
|
|
25
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
+
__setModuleDefault(result, mod);
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.HoldingFees = exports.formatHoldingFeeRate = exports.convertRatePerSecondToAPR = exports.getPairHoldingFeeRates = void 0;
|
|
31
|
+
const fundingFees_1 = require("../fundingFees");
|
|
32
|
+
const SECONDS_PER_HOUR = 3600;
|
|
33
|
+
const SECONDS_PER_YEAR = 365 * 24 * 60 * 60;
|
|
34
|
+
const PERCENTAGE_PRECISION = 100;
|
|
35
|
+
/**
|
|
36
|
+
* @dev Calculates current holding fee rates per hour for display
|
|
37
|
+
* @param input Input parameters for calculation
|
|
38
|
+
* @returns Holding fee rates per hour with breakdown
|
|
39
|
+
*/
|
|
40
|
+
const getPairHoldingFeeRates = (input) => {
|
|
41
|
+
const { fundingParams, fundingData, pairOiToken, netExposureToken, netExposureUsd, borrowingParams, borrowingData, currentPairPrice, currentTimestamp, } = input;
|
|
42
|
+
// Calculate funding fee rates
|
|
43
|
+
let fundingFeeLongHourlyRate = 0;
|
|
44
|
+
let fundingFeeShortHourlyRate = 0;
|
|
45
|
+
let currentFundingRatePerSecondP = 0;
|
|
46
|
+
if (fundingParams.fundingFeesEnabled) {
|
|
47
|
+
// Get current funding rate
|
|
48
|
+
const pendingFunding = (0, fundingFees_1.getPairPendingAccFundingFees)(fundingParams, fundingData, currentPairPrice, pairOiToken, netExposureToken, netExposureUsd, currentTimestamp);
|
|
49
|
+
currentFundingRatePerSecondP = pendingFunding.currentFundingRatePerSecondP;
|
|
50
|
+
// Get APR multipliers
|
|
51
|
+
const { longAprMultiplier, shortAprMultiplier } = (0, fundingFees_1.getLongShortAprMultiplier)(currentFundingRatePerSecondP, pairOiToken.oiLongToken, pairOiToken.oiShortToken, fundingParams.aprMultiplierEnabled);
|
|
52
|
+
// Calculate hourly rates
|
|
53
|
+
// Funding rate * seconds per hour * current price * APR multiplier / 100
|
|
54
|
+
const baseHourlyRate = (currentFundingRatePerSecondP * SECONDS_PER_HOUR * currentPairPrice) /
|
|
55
|
+
PERCENTAGE_PRECISION;
|
|
56
|
+
// Long side pays when rate is positive, earns when negative
|
|
57
|
+
fundingFeeLongHourlyRate = baseHourlyRate * longAprMultiplier;
|
|
58
|
+
// Short side is opposite
|
|
59
|
+
fundingFeeShortHourlyRate = -baseHourlyRate * shortAprMultiplier;
|
|
60
|
+
}
|
|
61
|
+
// Calculate borrowing v2 rates
|
|
62
|
+
let borrowingFeeHourlyRate = 0;
|
|
63
|
+
let currentBorrowingRatePerSecondP = 0;
|
|
64
|
+
if (borrowingParams && borrowingData) {
|
|
65
|
+
currentBorrowingRatePerSecondP = borrowingParams.borrowingRatePerSecondP;
|
|
66
|
+
// Borrowing rate * seconds per hour * current price / 100
|
|
67
|
+
borrowingFeeHourlyRate =
|
|
68
|
+
(currentBorrowingRatePerSecondP * SECONDS_PER_HOUR * currentPairPrice) /
|
|
69
|
+
PERCENTAGE_PRECISION;
|
|
70
|
+
}
|
|
71
|
+
// Total holding fees (funding can be negative/positive, borrowing always positive cost)
|
|
72
|
+
const longHourlyRate = fundingFeeLongHourlyRate + borrowingFeeHourlyRate;
|
|
73
|
+
const shortHourlyRate = fundingFeeShortHourlyRate + borrowingFeeHourlyRate;
|
|
74
|
+
return {
|
|
75
|
+
longHourlyRate,
|
|
76
|
+
shortHourlyRate,
|
|
77
|
+
fundingFeeLongHourlyRate,
|
|
78
|
+
fundingFeeShortHourlyRate,
|
|
79
|
+
borrowingFeeHourlyRate,
|
|
80
|
+
currentFundingRatePerSecondP,
|
|
81
|
+
currentBorrowingRatePerSecondP,
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
exports.getPairHoldingFeeRates = getPairHoldingFeeRates;
|
|
85
|
+
/**
|
|
86
|
+
* @dev Converts a per-second rate to annual percentage rate (APR)
|
|
87
|
+
* @param ratePerSecond Rate per second
|
|
88
|
+
* @returns Annual percentage rate
|
|
89
|
+
*/
|
|
90
|
+
const convertRatePerSecondToAPR = (ratePerSecond) => {
|
|
91
|
+
return ratePerSecond * SECONDS_PER_YEAR * PERCENTAGE_PRECISION;
|
|
92
|
+
};
|
|
93
|
+
exports.convertRatePerSecondToAPR = convertRatePerSecondToAPR;
|
|
94
|
+
/**
|
|
95
|
+
* @dev Formats a holding fee rate for display
|
|
96
|
+
* @param rate Hourly rate (can be negative)
|
|
97
|
+
* @param decimals Number of decimal places
|
|
98
|
+
* @returns Formatted string with sign
|
|
99
|
+
*/
|
|
100
|
+
const formatHoldingFeeRate = (rate, decimals = 4) => {
|
|
101
|
+
const sign = rate > 0 ? "+" : "";
|
|
102
|
+
return `${sign}${rate.toFixed(decimals)}%`;
|
|
103
|
+
};
|
|
104
|
+
exports.formatHoldingFeeRate = formatHoldingFeeRate;
|
|
105
|
+
exports.HoldingFees = __importStar(require("./types"));
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Type definitions for holding fees (funding + borrowing v2)
|
|
3
|
+
*/
|
|
4
|
+
export interface HoldingFeeRates {
|
|
5
|
+
longHourlyRate: number;
|
|
6
|
+
shortHourlyRate: number;
|
|
7
|
+
fundingFeeLongHourlyRate: number;
|
|
8
|
+
fundingFeeShortHourlyRate: number;
|
|
9
|
+
borrowingFeeHourlyRate: number;
|
|
10
|
+
currentFundingRatePerSecondP: number;
|
|
11
|
+
currentBorrowingRatePerSecondP: number;
|
|
12
|
+
}
|
|
13
|
+
export interface GetPairHoldingFeeRatesInput {
|
|
14
|
+
fundingParams: import("../fundingFees/types").FundingFeeParams;
|
|
15
|
+
fundingData: import("../fundingFees/types").PairFundingFeeData;
|
|
16
|
+
pairOiToken: import("../fundingFees/types").PairOiAfterV10;
|
|
17
|
+
netExposureToken: number;
|
|
18
|
+
netExposureUsd: number;
|
|
19
|
+
borrowingParams: import("../borrowingV2/types").BorrowingFeeParams | null;
|
|
20
|
+
borrowingData: import("../borrowingV2/types").PairBorrowingFeeData | null;
|
|
21
|
+
currentPairPrice: number;
|
|
22
|
+
currentTimestamp: number;
|
|
23
|
+
}
|
|
@@ -24,9 +24,8 @@ exports.MAX_FEE_TIERS = 8;
|
|
|
24
24
|
const getCurrentDay = () => Math.floor(Date.now() / 1000 / 60 / 60 / 24);
|
|
25
25
|
exports.getCurrentDay = getCurrentDay;
|
|
26
26
|
const getFeeTiersCount = (feeTiers) => {
|
|
27
|
-
var _a;
|
|
28
27
|
for (let i = exports.MAX_FEE_TIERS; i > 0; --i) {
|
|
29
|
-
if (
|
|
28
|
+
if (feeTiers[i - 1]?.feeMultiplier > 0) {
|
|
30
29
|
return i;
|
|
31
30
|
}
|
|
32
31
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Holding fees calculation for structured contexts
|
|
3
|
+
*/
|
|
4
|
+
import { Trade, TradeInfo, TradeFeesData } from "../../types";
|
|
5
|
+
import { TradeHoldingFees } from "./types";
|
|
6
|
+
import { ContractsVersion } from "../../../contracts/types";
|
|
7
|
+
import type { BorrowingV1SubContext, BorrowingV2SubContext, FundingFeesSubContext } from "../../pnl";
|
|
8
|
+
/**
|
|
9
|
+
* @dev Context for holding fees calculation with structured sub-contexts
|
|
10
|
+
*/
|
|
11
|
+
export type GetStructuredHoldingFeesContext = {
|
|
12
|
+
contractsVersion: ContractsVersion;
|
|
13
|
+
currentTimestamp: number;
|
|
14
|
+
collateralPriceUsd: number;
|
|
15
|
+
borrowingV1?: BorrowingV1SubContext;
|
|
16
|
+
borrowingV2?: BorrowingV2SubContext;
|
|
17
|
+
funding?: FundingFeesSubContext;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* @dev Calculates total holding fees using structured context
|
|
21
|
+
* @param trade The trade to calculate fees for
|
|
22
|
+
* @param tradeInfo Trade info containing contracts version
|
|
23
|
+
* @param tradeFeesData Trade fees data containing initial acc fees
|
|
24
|
+
* @param currentPairPrice Current pair price
|
|
25
|
+
* @param context Structured context with sub-contexts for each fee type
|
|
26
|
+
* @returns Object containing all holding fee components
|
|
27
|
+
*/
|
|
28
|
+
export declare const getTradePendingHoldingFeesCollateralStructured: (trade: Trade, tradeInfo: TradeInfo, tradeFeesData: TradeFeesData, currentPairPrice: number, context: GetStructuredHoldingFeesContext) => TradeHoldingFees;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Holding fees calculation for structured contexts
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getTradePendingHoldingFeesCollateralStructured = void 0;
|
|
7
|
+
const types_1 = require("../../../contracts/types");
|
|
8
|
+
const borrowing_1 = require("../borrowing");
|
|
9
|
+
const borrowingV2_1 = require("../borrowingV2");
|
|
10
|
+
const pairContext_1 = require("../fundingFees/pairContext");
|
|
11
|
+
/**
|
|
12
|
+
* @dev Calculates total holding fees using structured context
|
|
13
|
+
* @param trade The trade to calculate fees for
|
|
14
|
+
* @param tradeInfo Trade info containing contracts version
|
|
15
|
+
* @param tradeFeesData Trade fees data containing initial acc fees
|
|
16
|
+
* @param currentPairPrice Current pair price
|
|
17
|
+
* @param context Structured context with sub-contexts for each fee type
|
|
18
|
+
* @returns Object containing all holding fee components
|
|
19
|
+
*/
|
|
20
|
+
const getTradePendingHoldingFeesCollateralStructured = (trade, tradeInfo, tradeFeesData, currentPairPrice, context) => {
|
|
21
|
+
const positionSizeCollateral = trade.collateralAmount * trade.leverage;
|
|
22
|
+
// Calculate funding fees (v10+ only)
|
|
23
|
+
let fundingFeeCollateral = 0;
|
|
24
|
+
if (context.contractsVersion >= types_1.ContractsVersion.V10 &&
|
|
25
|
+
context.funding &&
|
|
26
|
+
tradeFeesData.initialAccFundingFeeP !== undefined) {
|
|
27
|
+
fundingFeeCollateral = (0, pairContext_1.getPairTradeFundingFeesCollateral)({
|
|
28
|
+
positionSizeCollateral,
|
|
29
|
+
openPrice: trade.openPrice,
|
|
30
|
+
long: trade.long,
|
|
31
|
+
currentPairPrice,
|
|
32
|
+
initialAccFundingFeeP: tradeFeesData.initialAccFundingFeeP,
|
|
33
|
+
}, context.funding // TODO: Fix types once funding types are properly imported
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
// Calculate borrowing fees v2
|
|
37
|
+
let borrowingFeeCollateral = 0;
|
|
38
|
+
if (context.borrowingV2 && tradeFeesData.initialAccBorrowingFeeP !== undefined) {
|
|
39
|
+
borrowingFeeCollateral = (0, borrowingV2_1.getPairTradeBorrowingFeesCollateral)({
|
|
40
|
+
positionSizeCollateral,
|
|
41
|
+
openPrice: trade.openPrice,
|
|
42
|
+
currentPairPrice,
|
|
43
|
+
initialAccBorrowingFeeP: tradeFeesData.initialAccBorrowingFeeP,
|
|
44
|
+
currentTimestamp: context.currentTimestamp,
|
|
45
|
+
}, context.borrowingV2);
|
|
46
|
+
}
|
|
47
|
+
// Calculate v1 borrowing fees (some markets use v1 indefinitely)
|
|
48
|
+
let borrowingFeeCollateral_old = 0;
|
|
49
|
+
if (context.borrowingV1) {
|
|
50
|
+
borrowingFeeCollateral_old = (0, borrowing_1.getPairBorrowingFee)(positionSizeCollateral, trade.long, context.borrowingV1.initialAccFees || { accPairFee: 0, accGroupFee: 0, block: 0 }, {
|
|
51
|
+
currentBlock: context.borrowingV1.currentBlock,
|
|
52
|
+
group: context.borrowingV1.group,
|
|
53
|
+
pair: context.borrowingV1.pair,
|
|
54
|
+
collateralPriceUsd: context.collateralPriceUsd,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
fundingFeeCollateral,
|
|
59
|
+
borrowingFeeCollateral,
|
|
60
|
+
borrowingFeeCollateral_old,
|
|
61
|
+
totalFeeCollateral: fundingFeeCollateral +
|
|
62
|
+
borrowingFeeCollateral +
|
|
63
|
+
borrowingFeeCollateral_old,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.getTradePendingHoldingFeesCollateralStructured = getTradePendingHoldingFeesCollateralStructured;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Holding fees calculation for structured contexts
|
|
3
|
+
*/
|
|
4
|
+
import { Trade, TradeInfo, TradeFeesData } from "../../types";
|
|
5
|
+
import { TradeHoldingFees } from "./types";
|
|
6
|
+
import { ContractsVersion } from "../../../contracts/types";
|
|
7
|
+
import type { BorrowingV1SubContext, BorrowingV2SubContext, FundingFeesSubContext } from "../../pnl";
|
|
8
|
+
/**
|
|
9
|
+
* @dev Context for holding fees calculation with structured sub-contexts
|
|
10
|
+
*/
|
|
11
|
+
export type GetStructuredHoldingFeesContext = {
|
|
12
|
+
contractsVersion: ContractsVersion;
|
|
13
|
+
currentTimestamp: number;
|
|
14
|
+
collateralPriceUsd: number;
|
|
15
|
+
borrowingV1?: BorrowingV1SubContext;
|
|
16
|
+
borrowingV2?: BorrowingV2SubContext;
|
|
17
|
+
funding?: FundingFeesSubContext;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* @dev Calculates total holding fees using structured context
|
|
21
|
+
* @param trade The trade to calculate fees for
|
|
22
|
+
* @param tradeInfo Trade info containing contracts version
|
|
23
|
+
* @param tradeFeesData Trade fees data containing initial acc fees
|
|
24
|
+
* @param currentPairPrice Current pair price
|
|
25
|
+
* @param context Structured context with sub-contexts for each fee type
|
|
26
|
+
* @returns Object containing all holding fee components
|
|
27
|
+
*/
|
|
28
|
+
export declare const getTradePendingHoldingFeesCollateralStructured: (trade: Trade, tradeInfo: TradeInfo, tradeFeesData: TradeFeesData, currentPairPrice: number, context: GetStructuredHoldingFeesContext) => TradeHoldingFees;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @dev Holding fees calculation for structured contexts
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getTradePendingHoldingFeesCollateralStructured = void 0;
|
|
7
|
+
const types_1 = require("../../../contracts/types");
|
|
8
|
+
const borrowing_1 = require("../borrowing");
|
|
9
|
+
const borrowingV2_1 = require("../borrowingV2");
|
|
10
|
+
const fundingFees_1 = require("../fundingFees");
|
|
11
|
+
/**
|
|
12
|
+
* @dev Calculates total holding fees using structured context
|
|
13
|
+
* @param trade The trade to calculate fees for
|
|
14
|
+
* @param tradeInfo Trade info containing contracts version
|
|
15
|
+
* @param tradeFeesData Trade fees data containing initial acc fees
|
|
16
|
+
* @param currentPairPrice Current pair price
|
|
17
|
+
* @param context Structured context with sub-contexts for each fee type
|
|
18
|
+
* @returns Object containing all holding fee components
|
|
19
|
+
*/
|
|
20
|
+
const getTradePendingHoldingFeesCollateralStructured = (trade, tradeInfo, tradeFeesData, currentPairPrice, context) => {
|
|
21
|
+
const positionSizeCollateral = trade.collateralAmount * trade.leverage;
|
|
22
|
+
// Calculate funding fees (v10+ only)
|
|
23
|
+
let fundingFeeCollateral = 0;
|
|
24
|
+
if (context.contractsVersion >= types_1.ContractsVersion.V10 &&
|
|
25
|
+
context.funding &&
|
|
26
|
+
tradeFeesData.initialAccFundingFeeP !== undefined) {
|
|
27
|
+
fundingFeeCollateral = (0, fundingFees_1.getTradeFundingFeesCollateral)(trade, tradeInfo, tradeFeesData, currentPairPrice, Object.assign(Object.assign({}, context.funding), { currentTimestamp: context.currentTimestamp }) // TODO: Fix types once funding types are properly imported
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
// Calculate borrowing fees v2
|
|
31
|
+
let borrowingFeeCollateral = 0;
|
|
32
|
+
if (context.borrowingV2 &&
|
|
33
|
+
tradeFeesData.initialAccBorrowingFeeP !== undefined) {
|
|
34
|
+
borrowingFeeCollateral = (0, borrowingV2_1.getTradeBorrowingFeesCollateral)({
|
|
35
|
+
positionSizeCollateral,
|
|
36
|
+
openPrice: trade.openPrice,
|
|
37
|
+
currentPairPrice,
|
|
38
|
+
initialAccBorrowingFeeP: tradeFeesData.initialAccBorrowingFeeP,
|
|
39
|
+
currentTimestamp: context.currentTimestamp,
|
|
40
|
+
}, context.borrowingV2);
|
|
41
|
+
}
|
|
42
|
+
// Calculate v1 borrowing fees (some markets use v1 indefinitely)
|
|
43
|
+
let borrowingFeeCollateral_old = 0;
|
|
44
|
+
if (context.borrowingV1) {
|
|
45
|
+
borrowingFeeCollateral_old = (0, borrowing_1.getBorrowingFee)(positionSizeCollateral, undefined, // pairIndex not needed for pair-specific context
|
|
46
|
+
trade.long, context.borrowingV1.initialAccFees || {
|
|
47
|
+
accPairFee: 0,
|
|
48
|
+
accGroupFee: 0,
|
|
49
|
+
block: 0,
|
|
50
|
+
}, {
|
|
51
|
+
currentBlock: context.borrowingV1.currentBlock,
|
|
52
|
+
group: context.borrowingV1.group,
|
|
53
|
+
pair: context.borrowingV1.pair,
|
|
54
|
+
collateralPriceUsd: context.collateralPriceUsd,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
fundingFeeCollateral,
|
|
59
|
+
borrowingFeeCollateral,
|
|
60
|
+
borrowingFeeCollateral_old,
|
|
61
|
+
totalFeeCollateral: fundingFeeCollateral +
|
|
62
|
+
borrowingFeeCollateral +
|
|
63
|
+
borrowingFeeCollateral_old,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.getTradePendingHoldingFeesCollateralStructured = getTradePendingHoldingFeesCollateralStructured;
|
|
@@ -35,11 +35,10 @@ const types_1 = require("../../../contracts/types");
|
|
|
35
35
|
* @returns Total fee in collateral tokens
|
|
36
36
|
*/
|
|
37
37
|
const getTotalTradeFeesCollateral = (collateralIndex, trader, pairIndex, positionSizeCollateral, isCounterTrade, context) => {
|
|
38
|
-
var _a;
|
|
39
38
|
const { fee, collateralPriceUsd } = context;
|
|
40
39
|
const { totalPositionSizeFeeP, minPositionSizeUsd } = fee;
|
|
41
40
|
// Get counter trade fee rate multiplier (default 1 = 1x)
|
|
42
|
-
const counterTradeFeeRateMultiplier = isCounterTrade &&
|
|
41
|
+
const counterTradeFeeRateMultiplier = isCounterTrade && context.counterTradeSettings?.[pairIndex]
|
|
43
42
|
? context.counterTradeSettings[pairIndex].feeRateMultiplier
|
|
44
43
|
: 1;
|
|
45
44
|
// Apply counter trade multiplier to position size
|
|
@@ -119,7 +118,10 @@ const getTradePendingHoldingFeesCollateral = (trade, tradeInfo, tradeFeesData, c
|
|
|
119
118
|
if (context.contractsVersion >= types_1.ContractsVersion.V10 &&
|
|
120
119
|
context.funding &&
|
|
121
120
|
tradeFeesData.initialAccFundingFeeP !== undefined) {
|
|
122
|
-
fundingFeeCollateral = (0, fundingFees_1.getTradeFundingFeesCollateral)(trade, tradeInfo, tradeFeesData, currentPairPrice,
|
|
121
|
+
fundingFeeCollateral = (0, fundingFees_1.getTradeFundingFeesCollateral)(trade, tradeInfo, tradeFeesData, currentPairPrice, {
|
|
122
|
+
...context.funding,
|
|
123
|
+
currentTimestamp: context.currentTimestamp,
|
|
124
|
+
});
|
|
123
125
|
}
|
|
124
126
|
// Calculate borrowing fees v2 (v10+ only)
|
|
125
127
|
let borrowingFeeCollateral = 0;
|
|
@@ -17,7 +17,6 @@ const builder_4 = require("../fees/trading/builder");
|
|
|
17
17
|
* @returns Complete context ready for getLiquidationPrice
|
|
18
18
|
*/
|
|
19
19
|
const buildLiquidationPriceContext = (globalTradingVariables, tradeContainer, additionalParams) => {
|
|
20
|
-
var _a;
|
|
21
20
|
const { trade, tradeInfo } = tradeContainer;
|
|
22
21
|
const collateralIndex = trade.collateralIndex || 1;
|
|
23
22
|
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
@@ -29,7 +28,7 @@ const buildLiquidationPriceContext = (globalTradingVariables, tradeContainer, ad
|
|
|
29
28
|
core: {
|
|
30
29
|
currentBlock: additionalParams.currentBlock,
|
|
31
30
|
currentTimestamp: additionalParams.currentTimestamp,
|
|
32
|
-
collateralPriceUsd:
|
|
31
|
+
collateralPriceUsd: collateral.prices?.collateralPriceUsd || 1,
|
|
33
32
|
contractsVersion: tradeInfo.contractsVersion,
|
|
34
33
|
spreadP: additionalParams.spreadP,
|
|
35
34
|
},
|
|
@@ -27,7 +27,6 @@ const __1 = require("..");
|
|
|
27
27
|
* @returns Liquidation price
|
|
28
28
|
*/
|
|
29
29
|
const getLiquidationPrice = (trade, context) => {
|
|
30
|
-
var _a, _b;
|
|
31
30
|
// Extract parameters from structured context
|
|
32
31
|
const { currentPairPrice, additionalFeeCollateral = 0, partialCloseMultiplier = 1, beforeOpened = false, isCounterTrade = false, } = context.liquidationSpecific;
|
|
33
32
|
// 1. Calculate closing fees
|
|
@@ -72,9 +71,9 @@ const getLiquidationPrice = (trade, context) => {
|
|
|
72
71
|
trade.leverage;
|
|
73
72
|
// 6. Apply closing spread for v9.2+
|
|
74
73
|
if (context.core.contractsVersion >= types_1.ContractsVersion.V9_2 &&
|
|
75
|
-
((
|
|
74
|
+
((context.tradeData.liquidationParams?.maxLiqSpreadP !== undefined &&
|
|
76
75
|
context.tradeData.liquidationParams.maxLiqSpreadP > 0) ||
|
|
77
|
-
(
|
|
76
|
+
(context.liquidationSpecific.userPriceImpact?.fixedSpreadP !==
|
|
78
77
|
undefined &&
|
|
79
78
|
context.liquidationSpecific.userPriceImpact.fixedSpreadP > 0))) {
|
|
80
79
|
const closingSpreadP = (0, __1.getSpreadP)(context.core.spreadP, true, context.tradeData.liquidationParams, context.liquidationSpecific.userPriceImpact);
|
|
@@ -99,7 +98,6 @@ exports.getLiquidationPrice = getLiquidationPrice;
|
|
|
99
98
|
* @returns New liquidation price after the update
|
|
100
99
|
*/
|
|
101
100
|
const getLiquidationPriceAfterPositionUpdate = (existingTrade, newCollateralAmount, newLeverage, isLeverageUpdate, positionSizeCollateralDelta, pnlToRealizeCollateral, context) => {
|
|
102
|
-
var _a, _b;
|
|
103
101
|
const { currentPairPrice, isCounterTrade = false } = context.liquidationSpecific;
|
|
104
102
|
// 1. Calculate closing fees on the new position size
|
|
105
103
|
const closingFeeCollateral = (0, __1.getTotalTradeFeesCollateral)(existingTrade.collateralIndex, "", // No fee tiers applied for liquidation calculation
|
|
@@ -167,9 +165,9 @@ const getLiquidationPriceAfterPositionUpdate = (existingTrade, newCollateralAmou
|
|
|
167
165
|
newLeverage;
|
|
168
166
|
// 9. Apply closing spread for v9.2+
|
|
169
167
|
if (context.core.contractsVersion >= types_1.ContractsVersion.V9_2 &&
|
|
170
|
-
((
|
|
168
|
+
((context.tradeData.liquidationParams?.maxLiqSpreadP !== undefined &&
|
|
171
169
|
context.tradeData.liquidationParams.maxLiqSpreadP > 0) ||
|
|
172
|
-
(
|
|
170
|
+
(context.liquidationSpecific.userPriceImpact?.fixedSpreadP !==
|
|
173
171
|
undefined &&
|
|
174
172
|
context.liquidationSpecific.userPriceImpact.fixedSpreadP > 0))) {
|
|
175
173
|
const closingSpreadP = (0, __1.getSpreadP)(context.core.spreadP, true, context.tradeData.liquidationParams, context.liquidationSpecific.userPriceImpact);
|
package/lib/trade/oiWindows.js
CHANGED
|
@@ -7,13 +7,12 @@ const getCurrentOiWindowId = (oiWindowSettings) => {
|
|
|
7
7
|
};
|
|
8
8
|
exports.getCurrentOiWindowId = getCurrentOiWindowId;
|
|
9
9
|
const getActiveOi = (currentOiWindowId, windowsCount, oiWindows, buy) => {
|
|
10
|
-
var _a, _b;
|
|
11
10
|
if (oiWindows === undefined || windowsCount === 0)
|
|
12
11
|
return 0;
|
|
13
12
|
let activeOi = 0;
|
|
14
13
|
for (let id = currentOiWindowId - (windowsCount - 1); id <= currentOiWindowId; id++) {
|
|
15
14
|
activeOi +=
|
|
16
|
-
(buy ?
|
|
15
|
+
(buy ? oiWindows?.[id]?.oiLongUsd : oiWindows?.[id]?.oiShortUsd) || 0;
|
|
17
16
|
}
|
|
18
17
|
return activeOi;
|
|
19
18
|
};
|
package/lib/trade/pnl/builder.js
CHANGED
|
@@ -14,7 +14,6 @@ const builder_4 = require("../fees/trading/builder");
|
|
|
14
14
|
* @returns Complete context ready for getComprehensivePnl
|
|
15
15
|
*/
|
|
16
16
|
const buildComprehensivePnlContext = (globalTradingVariables, tradeContainer, additionalParams) => {
|
|
17
|
-
var _a;
|
|
18
17
|
const { trade, tradeInfo } = tradeContainer;
|
|
19
18
|
const collateralIndex = trade.collateralIndex || 1;
|
|
20
19
|
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
@@ -23,7 +22,7 @@ const buildComprehensivePnlContext = (globalTradingVariables, tradeContainer, ad
|
|
|
23
22
|
core: {
|
|
24
23
|
currentBlock: additionalParams.currentBlock,
|
|
25
24
|
currentTimestamp: additionalParams.currentTimestamp,
|
|
26
|
-
collateralPriceUsd:
|
|
25
|
+
collateralPriceUsd: collateral.prices?.collateralPriceUsd || 1,
|
|
27
26
|
contractsVersion: tradeInfo.contractsVersion,
|
|
28
27
|
},
|
|
29
28
|
// Build sub-contexts using dedicated builders
|
|
@@ -34,7 +34,7 @@ exports.encodePnlPercent = encodePnlPercent;
|
|
|
34
34
|
*/
|
|
35
35
|
const convertCollateralAmount = (amount, collateralDecimals) => {
|
|
36
36
|
const value = typeof amount === "bigint" ? Number(amount) : amount;
|
|
37
|
-
return value /
|
|
37
|
+
return value / 10 ** collateralDecimals;
|
|
38
38
|
};
|
|
39
39
|
exports.convertCollateralAmount = convertCollateralAmount;
|
|
40
40
|
/**
|
package/lib/trade/pnl/index.js
CHANGED
|
@@ -81,7 +81,6 @@ exports.getTradeValue = getTradeValue;
|
|
|
81
81
|
* @returns Detailed PnL breakdown
|
|
82
82
|
*/
|
|
83
83
|
const getComprehensivePnl = (trade, marketPrice, executionPrice, tradeInfo, context) => {
|
|
84
|
-
var _a;
|
|
85
84
|
// Calculate both raw PnL (market price) and impact-adjusted PnL (execution price)
|
|
86
85
|
let rawPnlPercent = (0, exports.getPnlPercent)(trade.openPrice, marketPrice, trade.long, trade.leverage);
|
|
87
86
|
let impactPnlPercent = (0, exports.getPnlPercent)(trade.openPrice, executionPrice, trade.long, trade.leverage);
|
|
@@ -115,7 +114,7 @@ const getComprehensivePnl = (trade, marketPrice, executionPrice, tradeInfo, cont
|
|
|
115
114
|
const totalHoldingFees = borrowingFeeV1 + borrowingFeeV2 + fundingFee;
|
|
116
115
|
const totalFees = totalHoldingFees + closingFee;
|
|
117
116
|
// Check liquidation (using raw PnL for liquidation check)
|
|
118
|
-
const liquidationThreshold =
|
|
117
|
+
const liquidationThreshold = context.tradeData?.liquidationParams
|
|
119
118
|
? (0, liquidation_1.getLiqPnlThresholdP)(context.tradeData.liquidationParams, trade.leverage) *
|
|
120
119
|
-100
|
|
121
120
|
: -90; // Default 90% loss
|
|
@@ -192,7 +191,6 @@ exports.getComprehensivePnl = getComprehensivePnl;
|
|
|
192
191
|
* @returns [pnlCollateral, pnlPercentage] or undefined if no price
|
|
193
192
|
*/
|
|
194
193
|
const getPnl = (price, trade, _tradeInfo, initialAccFees, liquidationParams, useFees, context) => {
|
|
195
|
-
var _a;
|
|
196
194
|
if (!price) {
|
|
197
195
|
return;
|
|
198
196
|
}
|
|
@@ -224,7 +222,7 @@ const getPnl = (price, trade, _tradeInfo, initialAccFees, liquidationParams, use
|
|
|
224
222
|
// Calculate closing fee using the same function as opening fees
|
|
225
223
|
const positionSizeCollateral = posCollat * trade.leverage;
|
|
226
224
|
const closingFee = (0, trading_1.getTotalTradeFeesCollateral)(0, // collateralIndex not used
|
|
227
|
-
trade.user, trade.pairIndex, positionSizeCollateral,
|
|
225
|
+
trade.user, trade.pairIndex, positionSizeCollateral, trade.isCounterTrade ?? false, {
|
|
228
226
|
fee: context.fee,
|
|
229
227
|
globalTradeFeeParams: context.globalTradeFeeParams,
|
|
230
228
|
collateralPriceUsd: context.collateralPriceUsd || 1,
|
|
@@ -248,12 +246,11 @@ exports.getPnl = getPnl;
|
|
|
248
246
|
* @returns The price that would result in the target PnL percentage
|
|
249
247
|
*/
|
|
250
248
|
const getPriceForTargetPnlPercentage = (targetPnlPercent, trade, tradeInfo, context, netPnl = false) => {
|
|
251
|
-
var _a, _b;
|
|
252
249
|
const { leverage, openPrice, long, collateralAmount } = trade;
|
|
253
250
|
const positionSizeCollateral = collateralAmount * leverage;
|
|
254
251
|
// Calculate holding fees - always use getTradePendingHoldingFeesCollateral
|
|
255
252
|
// This mirrors the contract's getTradeValueCollateral which always calls this function
|
|
256
|
-
const fees = (0, trading_1.getTradePendingHoldingFeesCollateral)(trade, tradeInfo,
|
|
253
|
+
const fees = (0, trading_1.getTradePendingHoldingFeesCollateral)(trade, tradeInfo, context.tradeData?.tradeFeesData || {
|
|
257
254
|
realizedTradingFeesCollateral: 0,
|
|
258
255
|
realizedPnlCollateral: 0,
|
|
259
256
|
manuallyRealizedNegativePnlCollateral: 0,
|
|
@@ -269,7 +266,7 @@ const getPriceForTargetPnlPercentage = (targetPnlPercent, trade, tradeInfo, cont
|
|
|
269
266
|
borrowingV1: context.borrowingV1,
|
|
270
267
|
borrowingV2: context.borrowingV2,
|
|
271
268
|
funding: context.funding,
|
|
272
|
-
initialAccFees:
|
|
269
|
+
initialAccFees: context.tradeData?.initialAccFees,
|
|
273
270
|
});
|
|
274
271
|
const totalHoldingFees = fees.fundingFeeCollateral +
|
|
275
272
|
fees.borrowingFeeCollateral +
|
|
@@ -14,7 +14,6 @@ const builder_2 = require("../skew/builder");
|
|
|
14
14
|
* @returns Complete context ready for getTradeClosingPriceImpact
|
|
15
15
|
*/
|
|
16
16
|
const buildTradeClosingPriceImpactContext = (globalTradingVariables, collateralIndex, pairIndex, tradeInfo, additionalParams) => {
|
|
17
|
-
var _a;
|
|
18
17
|
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
19
18
|
if (!collateral) {
|
|
20
19
|
return undefined;
|
|
@@ -36,7 +35,7 @@ const buildTradeClosingPriceImpactContext = (globalTradingVariables, collateralI
|
|
|
36
35
|
}
|
|
37
36
|
// Return structured context with proper subcontexts
|
|
38
37
|
return {
|
|
39
|
-
collateralPriceUsd:
|
|
38
|
+
collateralPriceUsd: collateral.prices?.collateralPriceUsd || 1,
|
|
40
39
|
cumulVolContext,
|
|
41
40
|
skewContext,
|
|
42
41
|
tradeInfo,
|
|
@@ -129,6 +129,9 @@ exports.getTradeClosingPriceImpact = getTradeClosingPriceImpact;
|
|
|
129
129
|
* @returns Price impact breakdown and trade value
|
|
130
130
|
*/
|
|
131
131
|
const getTradeClosingPriceImpactAtOracle = (input, context) => {
|
|
132
|
-
return (0, exports.getTradeClosingPriceImpact)(
|
|
132
|
+
return (0, exports.getTradeClosingPriceImpact)({
|
|
133
|
+
...input,
|
|
134
|
+
currentPairPrice: input.oraclePrice,
|
|
135
|
+
}, context);
|
|
133
136
|
};
|
|
134
137
|
exports.getTradeClosingPriceImpactAtOracle = getTradeClosingPriceImpactAtOracle;
|