@gainsnetwork/sdk 1.0.4 → 1.0.5-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/constants.d.ts +1 -0
- package/lib/constants.js +2 -1
- package/lib/contracts/utils/pairs.js +1 -0
- package/lib/trade/fees/borrowingV2/fetcher.d.ts +0 -1
- package/lib/trade/liquidation.d.ts +12 -0
- package/lib/trade/liquidation.js +55 -0
- package/lib/trade/pnl.d.ts +10 -0
- package/lib/trade/pnl.js +33 -0
- package/lib/trade/types.d.ts +2 -1
- package/lib/trade/types.js +1 -0
- package/package.json +1 -1
package/lib/constants.d.ts
CHANGED
|
@@ -412,6 +412,7 @@ export declare const pairs: {
|
|
|
412
412
|
"ERA/USD": string;
|
|
413
413
|
"BGSC/USD": string;
|
|
414
414
|
"TAG/USD": string;
|
|
415
|
+
"WLFI/USD": string;
|
|
415
416
|
};
|
|
416
417
|
export declare const syntheticPairs: Set<string>;
|
|
417
418
|
export declare const parentToSyntheticPairMap: Map<string, string>;
|
package/lib/constants.js
CHANGED
|
@@ -420,6 +420,7 @@ exports.pairs = {
|
|
|
420
420
|
"ERA/USD": CRYPTO,
|
|
421
421
|
"BGSC/USD": CRYPTO,
|
|
422
422
|
"TAG/USD": CRYPTO,
|
|
423
|
+
"WLFI/USD": CRYPTO,
|
|
423
424
|
};
|
|
424
425
|
exports.syntheticPairs = new Set([
|
|
425
426
|
"BTCDEGEN/USD",
|
|
@@ -472,7 +473,7 @@ exports.delistedPairIxs = new Set([
|
|
|
472
473
|
99, 101, 106, 111, 113, 114, 116, 118, 120, 122, 123, 125, 127, 130, 147, 152,
|
|
473
474
|
160, 163, 170, 179, 182, 183, 188, 189, 190, 208, 209, 225, 229, 230, 231,
|
|
474
475
|
238, 239, 241, 250, 253, 254, 258, 270, 275, 276, 278, 279, 282, 285, 290,
|
|
475
|
-
294, 296, 305, 311, 330, 349, 352, 353, 354, 355, 357, 365, 366, 395, 396,
|
|
476
|
+
294, 296, 305, 311, 330, 349, 352, 353, 354, 355, 357, 365, 366, 395, 396, 413,
|
|
476
477
|
]);
|
|
477
478
|
exports.delistedGroupsIxs = new Set([]);
|
|
478
479
|
exports.DEFAULT_PROTECTION_CLOSE_FACTOR = 1;
|
|
@@ -518,4 +518,5 @@ const PAIR_INDEX_TO_DESCRIPTION = {
|
|
|
518
518
|
[types_1.PairIndex.ERAUSD]: "Caldera to US Dollar",
|
|
519
519
|
[types_1.PairIndex.BGSCUSD]: "BugsCoin to US Dollar",
|
|
520
520
|
[types_1.PairIndex.TAGUSD]: "TAGGER to US Dollar",
|
|
521
|
+
[types_1.PairIndex.WLFIUSD]: "World Liberty Financial to US Dollar",
|
|
521
522
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GetBorrowingFeeContext, BorrowingFee } from "./fees";
|
|
2
|
+
import { Fee, LiquidationParams, Trade, UserPriceImpact } from "./types";
|
|
3
|
+
import { ContractsVersion } from "../contracts/types";
|
|
4
|
+
export type GetLiquidationPriceContext = GetBorrowingFeeContext & {
|
|
5
|
+
liquidationParams: LiquidationParams | undefined;
|
|
6
|
+
pairSpreadP: number | undefined;
|
|
7
|
+
collateralPriceUsd: number | undefined;
|
|
8
|
+
contractsVersion: ContractsVersion | undefined;
|
|
9
|
+
userPriceImpact?: UserPriceImpact | undefined;
|
|
10
|
+
};
|
|
11
|
+
export declare const getLiquidationPrice: (trade: Trade, fee: Fee, initialAccFees: BorrowingFee.InitialAccFees, context: GetLiquidationPriceContext) => number;
|
|
12
|
+
export declare const getLiqPnlThresholdP: (liquidationParams: LiquidationParams | undefined, leverage: number | undefined) => number;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLiqPnlThresholdP = exports.getLiquidationPrice = void 0;
|
|
4
|
+
const fees_1 = require("./fees");
|
|
5
|
+
const spread_1 = require("./spread");
|
|
6
|
+
const types_1 = require("../contracts/types");
|
|
7
|
+
const getLiquidationPrice = (trade, fee, initialAccFees, context) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const closingFee = (0, fees_1.getClosingFee)(trade.collateralAmount, trade.leverage, trade.pairIndex, fee, context.collateralPriceUsd);
|
|
10
|
+
const borrowingFee = (0, fees_1.getBorrowingFee)(trade.collateralAmount * trade.leverage, trade.pairIndex, trade.long, initialAccFees, context);
|
|
11
|
+
const liqThresholdP = (0, exports.getLiqPnlThresholdP)(context.liquidationParams, trade.leverage);
|
|
12
|
+
let liqPriceDistance = (trade.openPrice *
|
|
13
|
+
(trade.collateralAmount * liqThresholdP - (borrowingFee + closingFee))) /
|
|
14
|
+
trade.collateralAmount /
|
|
15
|
+
trade.leverage;
|
|
16
|
+
if ((context === null || context === void 0 ? void 0 : context.contractsVersion) !== undefined &&
|
|
17
|
+
context.contractsVersion >= types_1.ContractsVersion.V9_2 &&
|
|
18
|
+
((((_a = context === null || context === void 0 ? void 0 : context.liquidationParams) === null || _a === void 0 ? void 0 : _a.maxLiqSpreadP) !== undefined &&
|
|
19
|
+
context.liquidationParams.maxLiqSpreadP > 0) ||
|
|
20
|
+
(((_b = context === null || context === void 0 ? void 0 : context.userPriceImpact) === null || _b === void 0 ? void 0 : _b.fixedSpreadP) !== undefined &&
|
|
21
|
+
context.userPriceImpact.fixedSpreadP > 0))) {
|
|
22
|
+
const closingSpreadP = (0, spread_1.getSpreadP)(context.pairSpreadP, true, context.liquidationParams, context.userPriceImpact);
|
|
23
|
+
liqPriceDistance -= trade.openPrice * closingSpreadP;
|
|
24
|
+
}
|
|
25
|
+
return trade.long
|
|
26
|
+
? Math.max(trade.openPrice - liqPriceDistance, 0)
|
|
27
|
+
: Math.max(trade.openPrice + liqPriceDistance, 0);
|
|
28
|
+
};
|
|
29
|
+
exports.getLiquidationPrice = getLiquidationPrice;
|
|
30
|
+
const getLiqPnlThresholdP = (liquidationParams, leverage) => {
|
|
31
|
+
if (liquidationParams === undefined ||
|
|
32
|
+
leverage === undefined ||
|
|
33
|
+
liquidationParams.maxLiqSpreadP === 0 ||
|
|
34
|
+
liquidationParams.startLiqThresholdP === 0 ||
|
|
35
|
+
liquidationParams.endLiqThresholdP === 0 ||
|
|
36
|
+
liquidationParams.startLeverage === 0 ||
|
|
37
|
+
liquidationParams.endLeverage === 0) {
|
|
38
|
+
return 0.9;
|
|
39
|
+
}
|
|
40
|
+
if (leverage < liquidationParams.startLeverage) {
|
|
41
|
+
return liquidationParams.startLiqThresholdP;
|
|
42
|
+
}
|
|
43
|
+
if (leverage > liquidationParams.endLeverage) {
|
|
44
|
+
return liquidationParams.endLiqThresholdP;
|
|
45
|
+
}
|
|
46
|
+
if (liquidationParams.startLiqThresholdP === liquidationParams.endLiqThresholdP) {
|
|
47
|
+
return liquidationParams.endLiqThresholdP;
|
|
48
|
+
}
|
|
49
|
+
return (liquidationParams.startLiqThresholdP -
|
|
50
|
+
((leverage - liquidationParams.startLeverage) *
|
|
51
|
+
(liquidationParams.startLiqThresholdP -
|
|
52
|
+
liquidationParams.endLiqThresholdP)) /
|
|
53
|
+
(liquidationParams.endLeverage - liquidationParams.startLeverage));
|
|
54
|
+
};
|
|
55
|
+
exports.getLiqPnlThresholdP = getLiqPnlThresholdP;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GetBorrowingFeeContext } from "./fees";
|
|
2
|
+
import { Fee, LiquidationParams, Trade, TradeInfo, TradeInitialAccFees } from "./types";
|
|
3
|
+
import { ContractsVersion } from "../contracts/types";
|
|
4
|
+
export type GetPnlContext = GetBorrowingFeeContext & {
|
|
5
|
+
fee: Fee | undefined;
|
|
6
|
+
collateralPriceUsd: number | undefined;
|
|
7
|
+
contractsVersion: ContractsVersion | undefined;
|
|
8
|
+
feeMultiplier: number | undefined;
|
|
9
|
+
};
|
|
10
|
+
export declare const getPnl: (price: number | undefined, trade: Trade, tradeInfo: TradeInfo, initialAccFees: TradeInitialAccFees, liquidationParams: LiquidationParams, useFees: boolean, context: GetPnlContext) => number[] | undefined;
|
package/lib/trade/pnl.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPnl = void 0;
|
|
4
|
+
const fees_1 = require("./fees");
|
|
5
|
+
const liquidation_1 = require("./liquidation");
|
|
6
|
+
const getPnl = (price, trade, tradeInfo, initialAccFees, liquidationParams, useFees, context) => {
|
|
7
|
+
if (!price) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const posCollat = trade.collateralAmount;
|
|
11
|
+
const { openPrice, leverage } = trade;
|
|
12
|
+
const { fee } = context;
|
|
13
|
+
let pnlCollat = trade.long
|
|
14
|
+
? ((price - openPrice) / openPrice) * leverage * posCollat
|
|
15
|
+
: ((openPrice - price) / openPrice) * leverage * posCollat;
|
|
16
|
+
if (useFees) {
|
|
17
|
+
pnlCollat -= (0, fees_1.getBorrowingFee)(posCollat * trade.leverage, trade.pairIndex, trade.long, initialAccFees, context);
|
|
18
|
+
}
|
|
19
|
+
let pnlPercentage = (pnlCollat / posCollat) * 100;
|
|
20
|
+
// Can be liquidated
|
|
21
|
+
if (pnlPercentage <=
|
|
22
|
+
(0, liquidation_1.getLiqPnlThresholdP)(liquidationParams, leverage) * -100) {
|
|
23
|
+
pnlPercentage = -100;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
pnlCollat -= (0, fees_1.getClosingFee)(posCollat, trade.leverage, trade.pairIndex, fee, context.collateralPriceUsd, context.feeMultiplier);
|
|
27
|
+
pnlPercentage = (pnlCollat / posCollat) * 100;
|
|
28
|
+
}
|
|
29
|
+
pnlPercentage = pnlPercentage < -100 ? -100 : pnlPercentage;
|
|
30
|
+
pnlCollat = (posCollat * pnlPercentage) / 100;
|
|
31
|
+
return [pnlCollat, pnlPercentage];
|
|
32
|
+
};
|
|
33
|
+
exports.getPnl = getPnl;
|
package/lib/trade/types.d.ts
CHANGED
package/lib/trade/types.js
CHANGED
|
@@ -442,4 +442,5 @@ var PairIndex;
|
|
|
442
442
|
PairIndex[PairIndex["ERAUSD"] = 410] = "ERAUSD";
|
|
443
443
|
PairIndex[PairIndex["BGSCUSD"] = 411] = "BGSCUSD";
|
|
444
444
|
PairIndex[PairIndex["TAGUSD"] = 412] = "TAGUSD";
|
|
445
|
+
PairIndex[PairIndex["WLFIUSD"] = 413] = "WLFIUSD";
|
|
445
446
|
})(PairIndex = exports.PairIndex || (exports.PairIndex = {}));
|