@gainsnetwork/sdk 0.0.24 → 0.0.25-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/contracts/addresses.json +12 -3
- package/lib/contracts/index.js +3 -1
- 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/GNSNftRewardsV6_3_1.d.ts +613 -0
- package/lib/contracts/types/generated/GNSNftRewardsV6_3_1.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/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/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/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/index.d.ts +3 -0
- package/lib/contracts/types/generated/factories/index.js +7 -1
- package/lib/contracts/types/generated/index.d.ts +6 -0
- package/lib/contracts/types/generated/index.js +7 -1
- package/lib/contracts/types/index.d.ts +7 -2
- package/lib/contracts/utils/openLimitOrders.js +1 -1
- package/lib/contracts/utils/openTrades.js +14 -11
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -0
- package/lib/trade/fees/borrowing/index.d.ts +53 -0
- package/lib/trade/fees/borrowing/index.js +156 -0
- package/lib/trade/fees/borrowing/types.d.ts +32 -0
- package/lib/trade/fees/borrowing/types.js +2 -0
- package/lib/trade/{fees.d.ts → fees/index.d.ts} +2 -1
- package/lib/trade/{fees.js → fees/index.js} +15 -0
- package/lib/trade/index.d.ts +3 -0
- package/lib/trade/index.js +3 -0
- package/lib/trade/liquidation.d.ts +7 -0
- package/lib/trade/liquidation.js +18 -0
- package/lib/trade/pnl.d.ts +5 -3
- package/lib/trade/pnl.js +4 -3
- package/lib/trade/types.d.ts +12 -0
- package/lib/vault/index.d.ts +7 -0
- package/lib/vault/index.js +11 -0
- package/package.json +1 -1
- package/lib/contracts/utils/tradeLastUpdated.d.ts +0 -6
- package/lib/contracts/utils/tradeLastUpdated.js +0 -25
- package/lib/prices/PricingNetworkClient.d.ts +0 -22
- package/lib/prices/PricingNetworkClient.js +0 -179
- package/lib/prices/index.d.ts +0 -1
- package/lib/prices/index.js +0 -17
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { GFarmTradingStorageV5__factory } from "./GFarmTradingStorageV5__factory";
|
|
2
|
+
export { GNSBorrowingFeesV6_3_2__factory } from "./GNSBorrowingFeesV6_3_2__factory";
|
|
2
3
|
export { GNSNftRewardsV6__factory } from "./GNSNftRewardsV6__factory";
|
|
4
|
+
export { GNSNftRewardsV6_3_1__factory } from "./GNSNftRewardsV6_3_1__factory";
|
|
3
5
|
export { GNSPairInfosV6_1__factory } from "./GNSPairInfosV6_1__factory";
|
|
4
6
|
export { GNSPairsStorageV6__factory } from "./GNSPairsStorageV6__factory";
|
|
7
|
+
export { GNSTradingCallbacksV6_3_2__factory } from "./GNSTradingCallbacksV6_3_2__factory";
|
|
5
8
|
export { GTokenOpenPnlFeed__factory } from "./GTokenOpenPnlFeed__factory";
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GTokenOpenPnlFeed__factory = exports.GNSPairsStorageV6__factory = exports.GNSPairInfosV6_1__factory = exports.GNSNftRewardsV6__factory = exports.GFarmTradingStorageV5__factory = void 0;
|
|
3
|
+
exports.GTokenOpenPnlFeed__factory = exports.GNSTradingCallbacksV6_3_2__factory = exports.GNSPairsStorageV6__factory = exports.GNSPairInfosV6_1__factory = exports.GNSNftRewardsV6_3_1__factory = exports.GNSNftRewardsV6__factory = exports.GNSBorrowingFeesV6_3_2__factory = exports.GFarmTradingStorageV5__factory = void 0;
|
|
4
4
|
/* Autogenerated file. Do not edit manually. */
|
|
5
5
|
/* tslint:disable */
|
|
6
6
|
/* eslint-disable */
|
|
7
7
|
var GFarmTradingStorageV5__factory_1 = require("./GFarmTradingStorageV5__factory");
|
|
8
8
|
Object.defineProperty(exports, "GFarmTradingStorageV5__factory", { enumerable: true, get: function () { return GFarmTradingStorageV5__factory_1.GFarmTradingStorageV5__factory; } });
|
|
9
|
+
var GNSBorrowingFeesV6_3_2__factory_1 = require("./GNSBorrowingFeesV6_3_2__factory");
|
|
10
|
+
Object.defineProperty(exports, "GNSBorrowingFeesV6_3_2__factory", { enumerable: true, get: function () { return GNSBorrowingFeesV6_3_2__factory_1.GNSBorrowingFeesV6_3_2__factory; } });
|
|
9
11
|
var GNSNftRewardsV6__factory_1 = require("./GNSNftRewardsV6__factory");
|
|
10
12
|
Object.defineProperty(exports, "GNSNftRewardsV6__factory", { enumerable: true, get: function () { return GNSNftRewardsV6__factory_1.GNSNftRewardsV6__factory; } });
|
|
13
|
+
var GNSNftRewardsV6_3_1__factory_1 = require("./GNSNftRewardsV6_3_1__factory");
|
|
14
|
+
Object.defineProperty(exports, "GNSNftRewardsV6_3_1__factory", { enumerable: true, get: function () { return GNSNftRewardsV6_3_1__factory_1.GNSNftRewardsV6_3_1__factory; } });
|
|
11
15
|
var GNSPairInfosV6_1__factory_1 = require("./GNSPairInfosV6_1__factory");
|
|
12
16
|
Object.defineProperty(exports, "GNSPairInfosV6_1__factory", { enumerable: true, get: function () { return GNSPairInfosV6_1__factory_1.GNSPairInfosV6_1__factory; } });
|
|
13
17
|
var GNSPairsStorageV6__factory_1 = require("./GNSPairsStorageV6__factory");
|
|
14
18
|
Object.defineProperty(exports, "GNSPairsStorageV6__factory", { enumerable: true, get: function () { return GNSPairsStorageV6__factory_1.GNSPairsStorageV6__factory; } });
|
|
19
|
+
var GNSTradingCallbacksV6_3_2__factory_1 = require("./GNSTradingCallbacksV6_3_2__factory");
|
|
20
|
+
Object.defineProperty(exports, "GNSTradingCallbacksV6_3_2__factory", { enumerable: true, get: function () { return GNSTradingCallbacksV6_3_2__factory_1.GNSTradingCallbacksV6_3_2__factory; } });
|
|
15
21
|
var GTokenOpenPnlFeed__factory_1 = require("./GTokenOpenPnlFeed__factory");
|
|
16
22
|
Object.defineProperty(exports, "GTokenOpenPnlFeed__factory", { enumerable: true, get: function () { return GTokenOpenPnlFeed__factory_1.GTokenOpenPnlFeed__factory; } });
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
export type { GFarmTradingStorageV5 } from "./GFarmTradingStorageV5";
|
|
2
|
+
export type { GNSBorrowingFeesV6_3_2 } from "./GNSBorrowingFeesV6_3_2";
|
|
2
3
|
export type { GNSNftRewardsV6 } from "./GNSNftRewardsV6";
|
|
4
|
+
export type { GNSNftRewardsV6_3_1 } from "./GNSNftRewardsV6_3_1";
|
|
3
5
|
export type { GNSPairInfosV6_1 } from "./GNSPairInfosV6_1";
|
|
4
6
|
export type { GNSPairsStorageV6 } from "./GNSPairsStorageV6";
|
|
7
|
+
export type { GNSTradingCallbacksV6_3_2 } from "./GNSTradingCallbacksV6_3_2";
|
|
5
8
|
export type { GTokenOpenPnlFeed } from "./GTokenOpenPnlFeed";
|
|
6
9
|
export * as factories from "./factories";
|
|
7
10
|
export { GFarmTradingStorageV5__factory } from "./factories/GFarmTradingStorageV5__factory";
|
|
11
|
+
export { GNSBorrowingFeesV6_3_2__factory } from "./factories/GNSBorrowingFeesV6_3_2__factory";
|
|
8
12
|
export { GNSNftRewardsV6__factory } from "./factories/GNSNftRewardsV6__factory";
|
|
13
|
+
export { GNSNftRewardsV6_3_1__factory } from "./factories/GNSNftRewardsV6_3_1__factory";
|
|
9
14
|
export { GNSPairInfosV6_1__factory } from "./factories/GNSPairInfosV6_1__factory";
|
|
10
15
|
export { GNSPairsStorageV6__factory } from "./factories/GNSPairsStorageV6__factory";
|
|
16
|
+
export { GNSTradingCallbacksV6_3_2__factory } from "./factories/GNSTradingCallbacksV6_3_2__factory";
|
|
11
17
|
export { GTokenOpenPnlFeed__factory } from "./factories/GTokenOpenPnlFeed__factory";
|
|
@@ -23,15 +23,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.GTokenOpenPnlFeed__factory = exports.GNSPairsStorageV6__factory = exports.GNSPairInfosV6_1__factory = exports.GNSNftRewardsV6__factory = exports.GFarmTradingStorageV5__factory = exports.factories = void 0;
|
|
26
|
+
exports.GTokenOpenPnlFeed__factory = exports.GNSTradingCallbacksV6_3_2__factory = exports.GNSPairsStorageV6__factory = exports.GNSPairInfosV6_1__factory = exports.GNSNftRewardsV6_3_1__factory = exports.GNSNftRewardsV6__factory = exports.GNSBorrowingFeesV6_3_2__factory = exports.GFarmTradingStorageV5__factory = exports.factories = void 0;
|
|
27
27
|
exports.factories = __importStar(require("./factories"));
|
|
28
28
|
var GFarmTradingStorageV5__factory_1 = require("./factories/GFarmTradingStorageV5__factory");
|
|
29
29
|
Object.defineProperty(exports, "GFarmTradingStorageV5__factory", { enumerable: true, get: function () { return GFarmTradingStorageV5__factory_1.GFarmTradingStorageV5__factory; } });
|
|
30
|
+
var GNSBorrowingFeesV6_3_2__factory_1 = require("./factories/GNSBorrowingFeesV6_3_2__factory");
|
|
31
|
+
Object.defineProperty(exports, "GNSBorrowingFeesV6_3_2__factory", { enumerable: true, get: function () { return GNSBorrowingFeesV6_3_2__factory_1.GNSBorrowingFeesV6_3_2__factory; } });
|
|
30
32
|
var GNSNftRewardsV6__factory_1 = require("./factories/GNSNftRewardsV6__factory");
|
|
31
33
|
Object.defineProperty(exports, "GNSNftRewardsV6__factory", { enumerable: true, get: function () { return GNSNftRewardsV6__factory_1.GNSNftRewardsV6__factory; } });
|
|
34
|
+
var GNSNftRewardsV6_3_1__factory_1 = require("./factories/GNSNftRewardsV6_3_1__factory");
|
|
35
|
+
Object.defineProperty(exports, "GNSNftRewardsV6_3_1__factory", { enumerable: true, get: function () { return GNSNftRewardsV6_3_1__factory_1.GNSNftRewardsV6_3_1__factory; } });
|
|
32
36
|
var GNSPairInfosV6_1__factory_1 = require("./factories/GNSPairInfosV6_1__factory");
|
|
33
37
|
Object.defineProperty(exports, "GNSPairInfosV6_1__factory", { enumerable: true, get: function () { return GNSPairInfosV6_1__factory_1.GNSPairInfosV6_1__factory; } });
|
|
34
38
|
var GNSPairsStorageV6__factory_1 = require("./factories/GNSPairsStorageV6__factory");
|
|
35
39
|
Object.defineProperty(exports, "GNSPairsStorageV6__factory", { enumerable: true, get: function () { return GNSPairsStorageV6__factory_1.GNSPairsStorageV6__factory; } });
|
|
40
|
+
var GNSTradingCallbacksV6_3_2__factory_1 = require("./factories/GNSTradingCallbacksV6_3_2__factory");
|
|
41
|
+
Object.defineProperty(exports, "GNSTradingCallbacksV6_3_2__factory", { enumerable: true, get: function () { return GNSTradingCallbacksV6_3_2__factory_1.GNSTradingCallbacksV6_3_2__factory; } });
|
|
36
42
|
var GTokenOpenPnlFeed__factory_1 = require("./factories/GTokenOpenPnlFeed__factory");
|
|
37
43
|
Object.defineProperty(exports, "GTokenOpenPnlFeed__factory", { enumerable: true, get: function () { return GTokenOpenPnlFeed__factory_1.GTokenOpenPnlFeed__factory; } });
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { GFarmTradingStorageV5, GNSPairInfosV6_1, GNSPairsStorageV6, GTokenOpenPnlFeed,
|
|
1
|
+
import { GFarmTradingStorageV5, GNSPairInfosV6_1, GNSPairsStorageV6, GTokenOpenPnlFeed, GNSNftRewardsV6_3_1, GNSBorrowingFeesV6_3_2, GNSTradingCallbacksV6_3_2 } from "./generated";
|
|
2
2
|
export type Contracts = {
|
|
3
3
|
gfarmTradingStorageV5: GFarmTradingStorageV5;
|
|
4
4
|
gnsPairInfosV6_1: GNSPairInfosV6_1;
|
|
5
5
|
gnsPairsStorageV6: GNSPairsStorageV6;
|
|
6
6
|
gTokenOpenPnlFeed: GTokenOpenPnlFeed;
|
|
7
|
-
|
|
7
|
+
gnsNftRewards: GNSNftRewardsV6_3_1;
|
|
8
|
+
gnsBorrowingFees: GNSBorrowingFeesV6_3_2;
|
|
9
|
+
gnsTradingCallbacks: GNSTradingCallbacksV6_3_2;
|
|
8
10
|
};
|
|
9
11
|
export type ContractAddresses = {
|
|
10
12
|
gfarmTradingStorageV5: string;
|
|
@@ -12,5 +14,8 @@ export type ContractAddresses = {
|
|
|
12
14
|
gnsPairsStorageV6: string;
|
|
13
15
|
gTokenOpenPnlFeed: string;
|
|
14
16
|
gnsNftRewardsV6: string;
|
|
17
|
+
gnsNftRewardsV6_3_1: string;
|
|
18
|
+
gnsBorrowingFeesV6_3_2: string;
|
|
19
|
+
gnsTradingCallbacksV6_3_2: string;
|
|
15
20
|
};
|
|
16
21
|
export type BlockTag = number | "latest" | "pending";
|
|
@@ -39,7 +39,7 @@ const fetchOpenLimitOrdersRaw = (contracts, overrides = {}) => __awaiter(void 0,
|
|
|
39
39
|
}
|
|
40
40
|
console.time("fetchOpenLimitOrdersRaw");
|
|
41
41
|
const { useMulticall = false, blockTag = "latest" } = overrides;
|
|
42
|
-
const { gfarmTradingStorageV5: storageContract,
|
|
42
|
+
const { gfarmTradingStorageV5: storageContract, gnsNftRewards: nftRewards } = contracts;
|
|
43
43
|
const openLimitOrders = yield storageContract.getOpenLimitOrders({
|
|
44
44
|
blockTag,
|
|
45
45
|
});
|
|
@@ -44,7 +44,7 @@ const fetchOpenPairTradesRaw = (contracts, overrides = {}) => __awaiter(void 0,
|
|
|
44
44
|
});
|
|
45
45
|
exports.fetchOpenPairTradesRaw = fetchOpenPairTradesRaw;
|
|
46
46
|
const fetchOpenPairTradesBatch = (contracts, startPairIndex, endPairIndex) => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
-
const { gfarmTradingStorageV5: storageContract,
|
|
47
|
+
const { gfarmTradingStorageV5: storageContract, gnsBorrowingFees: borrowingFeesContract, } = contracts;
|
|
48
48
|
const maxTradesPerPair = (yield storageContract.maxTradesPerPair()).toNumber();
|
|
49
49
|
const pairIndexesToFetch = Array.from({ length: endPairIndex - startPairIndex + 1 }, (_, i) => i + startPairIndex);
|
|
50
50
|
const rawTrades = yield Promise.all(pairIndexesToFetch.map((pairIndex) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -62,7 +62,7 @@ const fetchOpenPairTradesBatch = (contracts, startPairIndex, endPairIndex) => __
|
|
|
62
62
|
const actualOpenTradesForTrader = openTradesForTraderAddress.filter(openTrade => openTrade.trader === pairTraderAddress);
|
|
63
63
|
const [actualOpenTradesTradeInfos, actualOpenTradesInitialAccFees] = yield Promise.all([
|
|
64
64
|
Promise.all(actualOpenTradesForTrader.map(aot => storageContract.openTradesInfo(aot.trader, aot.pairIndex, aot.index))),
|
|
65
|
-
Promise.all(actualOpenTradesForTrader.map(aot =>
|
|
65
|
+
Promise.all(actualOpenTradesForTrader.map(aot => borrowingFeesContract.getTradeInitialAccFees(aot.trader, aot.pairIndex, aot.index))),
|
|
66
66
|
]);
|
|
67
67
|
const finalOpenTradesForTrader = new Array(actualOpenTradesForTrader.length);
|
|
68
68
|
for (let tradeIndex = 0; tradeIndex < actualOpenTradesForTrader.length; tradeIndex++) {
|
|
@@ -70,10 +70,10 @@ const fetchOpenPairTradesBatch = (contracts, startPairIndex, endPairIndex) => __
|
|
|
70
70
|
if (tradeInfo === undefined) {
|
|
71
71
|
continue;
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
if (tradeInitialAccFees === undefined) {
|
|
73
|
+
if (actualOpenTradesInitialAccFees[tradeIndex] === undefined) {
|
|
75
74
|
continue;
|
|
76
75
|
}
|
|
76
|
+
const tradeInitialAccFees = Object.assign(Object.assign({}, actualOpenTradesInitialAccFees[tradeIndex].otherFees), { borrowing: actualOpenTradesInitialAccFees[tradeIndex].borrowingFees });
|
|
77
77
|
const trade = actualOpenTradesForTrader[tradeIndex];
|
|
78
78
|
finalOpenTradesForTrader[tradeIndex] = {
|
|
79
79
|
trade,
|
|
@@ -89,16 +89,14 @@ const fetchOpenPairTradesBatch = (contracts, startPairIndex, endPairIndex) => __
|
|
|
89
89
|
return perPairTrades.reduce((a, b) => a.concat(b), []);
|
|
90
90
|
});
|
|
91
91
|
const fetchOpenPairTradesBatchMulticall = (contracts, startPairIndex, endPairIndex, blockTag) => __awaiter(void 0, void 0, void 0, function* () {
|
|
92
|
-
const { gfarmTradingStorageV5: storageContract,
|
|
92
|
+
const { gfarmTradingStorageV5: storageContract, gnsBorrowingFees: borrowingFeesContract, } = contracts;
|
|
93
93
|
// Convert to Multicall for efficient RPC usage
|
|
94
94
|
const multicallProvider = new ethcall_1.Provider();
|
|
95
95
|
yield multicallProvider.init(storageContract.provider);
|
|
96
96
|
const storageContractMulticall = new ethcall_1.Contract(storageContract.address, [
|
|
97
97
|
...storageContract.interface.fragments,
|
|
98
98
|
]);
|
|
99
|
-
const
|
|
100
|
-
...pairInfosContract.interface.fragments,
|
|
101
|
-
]);
|
|
99
|
+
const borrowingFeesContractMulticall = new ethcall_1.Contract(borrowingFeesContract.address, [...borrowingFeesContract.interface.fragments]);
|
|
102
100
|
const maxTradesPerPair = (yield storageContract.maxTradesPerPair()).toNumber();
|
|
103
101
|
const pairIndexesToFetch = Array.from({ length: endPairIndex - startPairIndex + 1 }, (_, i) => i + startPairIndex);
|
|
104
102
|
const mcPairTraderAddresses = yield multicallProvider.all(pairIndexesToFetch.map(pairIndex => storageContractMulticall.pairTradersArray(pairIndex)), blockTag);
|
|
@@ -119,7 +117,7 @@ const fetchOpenPairTradesBatchMulticall = (contracts, startPairIndex, endPairInd
|
|
|
119
117
|
const openTrades = mcFlatOpenTrades.filter(openTrade => openTrade[0] !== "0x0000000000000000000000000000000000000000");
|
|
120
118
|
const [openTradesTradeInfos, openTradesInitialAccFees] = yield Promise.all([
|
|
121
119
|
multicallProvider.all(openTrades.map(openTrade => storageContractMulticall.openTradesInfo(openTrade.trader, openTrade.pairIndex, openTrade.index)), blockTag),
|
|
122
|
-
multicallProvider.all(openTrades.map(openTrade =>
|
|
120
|
+
multicallProvider.all(openTrades.map(openTrade => borrowingFeesContractMulticall.getTradeInitialAccFees(openTrade.trader, openTrade.pairIndex, openTrade.index)), blockTag),
|
|
123
121
|
]);
|
|
124
122
|
const finalTrades = new Array(openTrades.length);
|
|
125
123
|
for (let tradeIndex = 0; tradeIndex < openTradesTradeInfos.length; tradeIndex++) {
|
|
@@ -128,11 +126,11 @@ const fetchOpenPairTradesBatchMulticall = (contracts, startPairIndex, endPairInd
|
|
|
128
126
|
console.error("No trade info found for open trade while fetching open trades!", { trade: openTradesTradeInfos[tradeIndex] });
|
|
129
127
|
continue;
|
|
130
128
|
}
|
|
131
|
-
|
|
132
|
-
if (tradeInitialAccFees === undefined) {
|
|
129
|
+
if (openTradesInitialAccFees[tradeIndex] === undefined) {
|
|
133
130
|
console.error("No initial fees found for open trade while fetching open trades!", { trade: openTrades[tradeIndex] });
|
|
134
131
|
continue;
|
|
135
132
|
}
|
|
133
|
+
const tradeInitialAccFees = Object.assign(Object.assign({}, openTradesInitialAccFees[tradeIndex].otherFees), { borrowing: openTradesInitialAccFees[tradeIndex].borrowingFees });
|
|
136
134
|
const trade = openTrades[tradeIndex];
|
|
137
135
|
finalTrades[tradeIndex] = {
|
|
138
136
|
trade,
|
|
@@ -165,5 +163,10 @@ const _prepareTradeContainer = (trade, tradeInfo, tradeInitialAccFees) => ({
|
|
|
165
163
|
rollover: parseFloat(tradeInitialAccFees.rollover.toString()) / 1e18,
|
|
166
164
|
funding: parseFloat(tradeInitialAccFees.funding.toString()) / 1e18,
|
|
167
165
|
openedAfterUpdate: tradeInitialAccFees.openedAfterUpdate.toString() === "true",
|
|
166
|
+
borrowing: {
|
|
167
|
+
accPairFee: parseFloat(tradeInitialAccFees.borrowing.accPairFee.toString()) / 1e4,
|
|
168
|
+
accGroupFee: parseFloat(tradeInitialAccFees.borrowing.accGroupFee.toString()) / 1e4,
|
|
169
|
+
block: parseFloat(tradeInitialAccFees.borrowing.block.toString()),
|
|
170
|
+
},
|
|
168
171
|
},
|
|
169
172
|
});
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -19,3 +19,6 @@ __exportStar(require("./contracts"), exports);
|
|
|
19
19
|
__exportStar(require("./markets"), exports);
|
|
20
20
|
__exportStar(require("./constants"), exports);
|
|
21
21
|
__exportStar(require("./utils"), exports);
|
|
22
|
+
__exportStar(require("./vault"), exports);
|
|
23
|
+
// Not sure why this is needed, but it is. Barrel imports are not working.
|
|
24
|
+
__exportStar(require("./trade/fees/borrowing/index"), exports);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { OpenInterest } from "../../types";
|
|
2
|
+
import * as BorrowingFee from "./types";
|
|
3
|
+
export type GetBorrowingFeeContext = {
|
|
4
|
+
currentBlock: number;
|
|
5
|
+
accBlockWeightedMarketCap: number;
|
|
6
|
+
groups: BorrowingFee.Group[];
|
|
7
|
+
pairs: BorrowingFee.Pair[];
|
|
8
|
+
openInterest: OpenInterest;
|
|
9
|
+
};
|
|
10
|
+
export declare const getBorrowingFee: (posDai: number, pairIndex: number, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, context: GetBorrowingFeeContext) => number;
|
|
11
|
+
export declare const borrowingFeeUtils: {
|
|
12
|
+
getPairGroupAccFeesDeltas: (i: number, pairGroups: BorrowingFee.PairGroup[], initialFees: BorrowingFee.InitialAccFees, pairIndex: number, long: boolean, context: GetBorrowingFeeContext) => {
|
|
13
|
+
deltaGroup: number;
|
|
14
|
+
deltaPair: number;
|
|
15
|
+
beforeTradeOpen: boolean;
|
|
16
|
+
};
|
|
17
|
+
getPairPendingAccFees: (pairIndex: number, currentBlock: number, context: {
|
|
18
|
+
pairs: BorrowingFee.Pair[];
|
|
19
|
+
openInterest: OpenInterest;
|
|
20
|
+
accBlockWeightedMarketCap: number;
|
|
21
|
+
}) => {
|
|
22
|
+
accFeeLong: number;
|
|
23
|
+
accFeeShort: number;
|
|
24
|
+
delta: number;
|
|
25
|
+
};
|
|
26
|
+
getPairPendingAccFee: (pairIndex: number, currentBlock: number, long: boolean, context: {
|
|
27
|
+
pairs: BorrowingFee.Pair[];
|
|
28
|
+
openInterest: OpenInterest;
|
|
29
|
+
accBlockWeightedMarketCap: number;
|
|
30
|
+
}) => number;
|
|
31
|
+
getGroupPendingAccFees: (groupIndex: number, currentBlock: number, context: {
|
|
32
|
+
groups: BorrowingFee.Group[];
|
|
33
|
+
accBlockWeightedMarketCap: number;
|
|
34
|
+
}) => {
|
|
35
|
+
accFeeLong: number;
|
|
36
|
+
accFeeShort: number;
|
|
37
|
+
delta: number;
|
|
38
|
+
};
|
|
39
|
+
getGroupPendingAccFee: (groupIndex: number, currentBlock: number, long: boolean, context: {
|
|
40
|
+
groups: BorrowingFee.Group[];
|
|
41
|
+
accBlockWeightedMarketCap: number;
|
|
42
|
+
}) => number;
|
|
43
|
+
getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, vaultMarketCap: number) => {
|
|
44
|
+
accFeeLong: number;
|
|
45
|
+
accFeeShort: number;
|
|
46
|
+
delta: number;
|
|
47
|
+
};
|
|
48
|
+
getActivePairFeePerBlock: (pair: BorrowingFee.Pair, openInterest: OpenInterest, accBlockWeightedMarketCap: number, currentBlock: number) => number;
|
|
49
|
+
getActiveGroupFeePerBlock: (group: BorrowingFee.Group, accBlockWeightedMarketCap: number, currentBlock: number) => number;
|
|
50
|
+
getActiveFeePerBlock: (pair: BorrowingFee.Pair, group: BorrowingFee.Group | undefined, pairOpenInterest: OpenInterest, accBlockWeightedMarketCap: number, currentBlock: number) => number;
|
|
51
|
+
getWeightedVaultMarketCap: (accBlockWeightedMarketCap: number, lastAccBlockWeightedMarketCap: number, blockDelta: number) => number;
|
|
52
|
+
};
|
|
53
|
+
export * as BorrowingFee from "./types";
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.BorrowingFee = exports.borrowingFeeUtils = exports.getBorrowingFee = void 0;
|
|
27
|
+
const getBorrowingFee = (posDai, pairIndex, long, initialAccFees, context) => {
|
|
28
|
+
if (!context.groups ||
|
|
29
|
+
!context.pairs ||
|
|
30
|
+
!context.openInterest ||
|
|
31
|
+
!context.pairs[pairIndex]) {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
const { pairs } = context;
|
|
35
|
+
const pairGroups = pairs[pairIndex].groups;
|
|
36
|
+
const firstPairGroup = (pairGroups === null || pairGroups === void 0 ? void 0 : pairGroups.length) > 0 ? pairGroups[0] : undefined;
|
|
37
|
+
let fee = 0;
|
|
38
|
+
if (!firstPairGroup || firstPairGroup.block > initialAccFees.block) {
|
|
39
|
+
fee =
|
|
40
|
+
(!firstPairGroup
|
|
41
|
+
? getPairPendingAccFee(pairIndex, context.currentBlock, long, context)
|
|
42
|
+
: long
|
|
43
|
+
? firstPairGroup.pairAccFeeLong
|
|
44
|
+
: firstPairGroup.pairAccFeeShort) - initialAccFees.accPairFee;
|
|
45
|
+
}
|
|
46
|
+
for (let i = pairGroups.length; i > 0; i--) {
|
|
47
|
+
const { deltaGroup, deltaPair, beforeTradeOpen } = getPairGroupAccFeesDeltas(i - 1, pairGroups, initialAccFees, pairIndex, long, context);
|
|
48
|
+
fee += Math.max(deltaGroup, deltaPair);
|
|
49
|
+
if (beforeTradeOpen) {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return (posDai * fee) / 100;
|
|
54
|
+
};
|
|
55
|
+
exports.getBorrowingFee = getBorrowingFee;
|
|
56
|
+
const getPairPendingAccFees = (pairIndex, currentBlock, context) => {
|
|
57
|
+
const { pairs, openInterest: { long, short }, accBlockWeightedMarketCap, } = context;
|
|
58
|
+
const pair = pairs[pairIndex];
|
|
59
|
+
const vaultMarketCap = getWeightedVaultMarketCap(accBlockWeightedMarketCap, pair.lastAccBlockWeightedMarketCap, currentBlock - pair.accLastUpdatedBlock);
|
|
60
|
+
return getPendingAccFees(pair.accFeeLong, pair.accFeeShort, long, short, pair.feePerBlock, currentBlock, pair.accLastUpdatedBlock, vaultMarketCap);
|
|
61
|
+
};
|
|
62
|
+
const getPairPendingAccFee = (pairIndex, currentBlock, long, context) => {
|
|
63
|
+
const { accFeeLong, accFeeShort } = getPairPendingAccFees(pairIndex, currentBlock, context);
|
|
64
|
+
return long ? accFeeLong : accFeeShort;
|
|
65
|
+
};
|
|
66
|
+
const getGroupPendingAccFees = (groupIndex, currentBlock, context) => {
|
|
67
|
+
const { groups, accBlockWeightedMarketCap } = context;
|
|
68
|
+
const group = groups[groupIndex];
|
|
69
|
+
const vaultMarketCap = getWeightedVaultMarketCap(accBlockWeightedMarketCap, group.lastAccBlockWeightedMarketCap, currentBlock - group.accLastUpdatedBlock);
|
|
70
|
+
return getPendingAccFees(group.accFeeLong, group.accFeeShort, group.oiLong, group.oiShort, group.feePerBlock, currentBlock, group.accLastUpdatedBlock, vaultMarketCap);
|
|
71
|
+
};
|
|
72
|
+
const getGroupPendingAccFee = (groupIndex, currentBlock, long, context) => {
|
|
73
|
+
const { accFeeLong, accFeeShort } = getGroupPendingAccFees(groupIndex, currentBlock, context);
|
|
74
|
+
return long ? accFeeLong : accFeeShort;
|
|
75
|
+
};
|
|
76
|
+
const getPairGroupAccFeesDeltas = (i, pairGroups, initialFees, pairIndex, long, context) => {
|
|
77
|
+
const group = pairGroups[i];
|
|
78
|
+
const beforeTradeOpen = group.block < initialFees.block;
|
|
79
|
+
let deltaGroup, deltaPair;
|
|
80
|
+
if (i == pairGroups.length - 1) {
|
|
81
|
+
const { currentBlock, accBlockWeightedMarketCap, groups, pairs, openInterest, } = context;
|
|
82
|
+
deltaGroup = getGroupPendingAccFee(group.groupIndex, currentBlock, long, {
|
|
83
|
+
groups,
|
|
84
|
+
accBlockWeightedMarketCap,
|
|
85
|
+
});
|
|
86
|
+
deltaPair = getPairPendingAccFee(pairIndex, currentBlock, long, {
|
|
87
|
+
pairs,
|
|
88
|
+
openInterest: openInterest,
|
|
89
|
+
accBlockWeightedMarketCap,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const nextGroup = pairGroups[i + 1];
|
|
94
|
+
if (beforeTradeOpen && nextGroup.block <= initialFees.block) {
|
|
95
|
+
return { deltaGroup: 0, deltaPair: 0, beforeTradeOpen };
|
|
96
|
+
}
|
|
97
|
+
deltaGroup = long
|
|
98
|
+
? nextGroup.prevGroupAccFeeLong
|
|
99
|
+
: nextGroup.prevGroupAccFeeShort;
|
|
100
|
+
deltaPair = long ? nextGroup.pairAccFeeLong : nextGroup.pairAccFeeShort;
|
|
101
|
+
}
|
|
102
|
+
if (beforeTradeOpen) {
|
|
103
|
+
deltaGroup -= initialFees.accGroupFee;
|
|
104
|
+
deltaPair -= initialFees.accPairFee;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
deltaGroup -= long ? group.initialAccFeeLong : group.initialAccFeeShort;
|
|
108
|
+
deltaPair -= long ? group.pairAccFeeLong : group.pairAccFeeShort;
|
|
109
|
+
}
|
|
110
|
+
return { deltaGroup, deltaPair, beforeTradeOpen };
|
|
111
|
+
};
|
|
112
|
+
const getPendingAccFees = (accFeeLong, accFeeShort, oiLong, oiShort, feePerBlock, currentBlock, accLastUpdatedBlock, vaultMarketCap) => {
|
|
113
|
+
const delta = ((oiLong - oiShort) * feePerBlock * (currentBlock - accLastUpdatedBlock)) /
|
|
114
|
+
vaultMarketCap;
|
|
115
|
+
const newAccFeeLong = delta > 0 ? accFeeLong + delta : accFeeLong;
|
|
116
|
+
const newAccFeeShort = delta < 0 ? accFeeShort - delta : accFeeShort;
|
|
117
|
+
return { accFeeLong: newAccFeeLong, accFeeShort: newAccFeeShort, delta };
|
|
118
|
+
};
|
|
119
|
+
const getWeightedVaultMarketCap = (accBlockWeightedMarketCap, lastAccBlockWeightedMarketCap, blockDelta) => {
|
|
120
|
+
return blockDelta > 0
|
|
121
|
+
? blockDelta /
|
|
122
|
+
(accBlockWeightedMarketCap - lastAccBlockWeightedMarketCap) /
|
|
123
|
+
1e18
|
|
124
|
+
: 1;
|
|
125
|
+
};
|
|
126
|
+
const getActivePairFeePerBlock = (pair, openInterest, accBlockWeightedMarketCap, currentBlock) => {
|
|
127
|
+
const { long, short } = openInterest;
|
|
128
|
+
const vaultMarketCap = getWeightedVaultMarketCap(accBlockWeightedMarketCap, pair.lastAccBlockWeightedMarketCap, currentBlock - pair.accLastUpdatedBlock);
|
|
129
|
+
return (Math.abs(long - short) * pair.feePerBlock) / vaultMarketCap;
|
|
130
|
+
};
|
|
131
|
+
const getActiveGroupFeePerBlock = (group, accBlockWeightedMarketCap, currentBlock) => {
|
|
132
|
+
const { oiLong, oiShort } = group;
|
|
133
|
+
const vaultMarketCap = getWeightedVaultMarketCap(accBlockWeightedMarketCap, group.lastAccBlockWeightedMarketCap, currentBlock - group.accLastUpdatedBlock);
|
|
134
|
+
return (Math.abs(oiLong - oiShort) * group.feePerBlock) / vaultMarketCap;
|
|
135
|
+
};
|
|
136
|
+
const getActiveFeePerBlock = (pair, group, pairOpenInterest, accBlockWeightedMarketCap, currentBlock) => {
|
|
137
|
+
const pairFeePerBlock = getActivePairFeePerBlock(pair, pairOpenInterest, accBlockWeightedMarketCap, currentBlock);
|
|
138
|
+
if (!group) {
|
|
139
|
+
return pairFeePerBlock;
|
|
140
|
+
}
|
|
141
|
+
const groupFeePerBlock = getActiveGroupFeePerBlock(group, accBlockWeightedMarketCap, currentBlock);
|
|
142
|
+
return Math.max(pairFeePerBlock + groupFeePerBlock);
|
|
143
|
+
};
|
|
144
|
+
exports.borrowingFeeUtils = {
|
|
145
|
+
getPairGroupAccFeesDeltas,
|
|
146
|
+
getPairPendingAccFees,
|
|
147
|
+
getPairPendingAccFee,
|
|
148
|
+
getGroupPendingAccFees,
|
|
149
|
+
getGroupPendingAccFee,
|
|
150
|
+
getPendingAccFees,
|
|
151
|
+
getActivePairFeePerBlock,
|
|
152
|
+
getActiveGroupFeePerBlock,
|
|
153
|
+
getActiveFeePerBlock,
|
|
154
|
+
getWeightedVaultMarketCap,
|
|
155
|
+
};
|
|
156
|
+
exports.BorrowingFee = __importStar(require("./types"));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type PairGroup = {
|
|
2
|
+
groupIndex: number;
|
|
3
|
+
initialAccFeeLong: number;
|
|
4
|
+
initialAccFeeShort: number;
|
|
5
|
+
prevGroupAccFeeLong: number;
|
|
6
|
+
prevGroupAccFeeShort: number;
|
|
7
|
+
pairAccFeeLong: number;
|
|
8
|
+
pairAccFeeShort: number;
|
|
9
|
+
block: number;
|
|
10
|
+
};
|
|
11
|
+
export type Pair = {
|
|
12
|
+
groups: PairGroup[];
|
|
13
|
+
feePerBlock: number;
|
|
14
|
+
accFeeLong: number;
|
|
15
|
+
accFeeShort: number;
|
|
16
|
+
accLastUpdatedBlock: number;
|
|
17
|
+
lastAccBlockWeightedMarketCap: number;
|
|
18
|
+
};
|
|
19
|
+
export type Group = {
|
|
20
|
+
oiLong: number;
|
|
21
|
+
oiShort: number;
|
|
22
|
+
feePerBlock: number;
|
|
23
|
+
accFeeLong: number;
|
|
24
|
+
accFeeShort: number;
|
|
25
|
+
accLastUpdatedBlock: number;
|
|
26
|
+
lastAccBlockWeightedMarketCap: number;
|
|
27
|
+
};
|
|
28
|
+
export type InitialAccFees = {
|
|
29
|
+
accPairFee: number;
|
|
30
|
+
accGroupFee: number;
|
|
31
|
+
block: number;
|
|
32
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fee, OpenInterest, PairFundingFees, PairParams, PairRolloverFees } from "
|
|
1
|
+
import { Fee, OpenInterest, PairFundingFees, PairParams, PairRolloverFees } from "../types";
|
|
2
2
|
export declare const getClosingFee: (posDai: number, leverage: number, pairIndex: number, pairFee: Fee | undefined) => number;
|
|
3
3
|
export type GetFundingFeeContext = {
|
|
4
4
|
currentBlock?: number;
|
|
@@ -13,3 +13,4 @@ export type GetRolloverFeeContext = {
|
|
|
13
13
|
pairRolloverFees?: PairRolloverFees;
|
|
14
14
|
};
|
|
15
15
|
export declare const getRolloverFee: (posDai: number, initialAccRolloverFees: number, openedAfterUpdate: boolean, context: GetRolloverFeeContext) => number;
|
|
16
|
+
export * from "./borrowing";
|
|
@@ -1,4 +1,18 @@
|
|
|
1
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
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
17
|
exports.getRolloverFee = exports.getFundingFee = exports.getClosingFee = void 0;
|
|
4
18
|
const getClosingFee = (posDai, leverage, pairIndex, pairFee) => {
|
|
@@ -43,3 +57,4 @@ const getRolloverFee = (posDai, initialAccRolloverFees, openedAfterUpdate, conte
|
|
|
43
57
|
return posDai * (pendingAccRolloverFees - initialAccRolloverFees);
|
|
44
58
|
};
|
|
45
59
|
exports.getRolloverFee = getRolloverFee;
|
|
60
|
+
__exportStar(require("./borrowing"), exports);
|
package/lib/trade/index.d.ts
CHANGED
package/lib/trade/index.js
CHANGED
|
@@ -18,3 +18,6 @@ __exportStar(require("./fees"), exports);
|
|
|
18
18
|
__exportStar(require("./pnl"), exports);
|
|
19
19
|
__exportStar(require("./spread"), exports);
|
|
20
20
|
__exportStar(require("./openLimitOrder"), exports);
|
|
21
|
+
__exportStar(require("./liquidation"), exports);
|
|
22
|
+
__exportStar(require("./fees"), exports);
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GetFundingFeeContext, GetRolloverFeeContext, GetBorrowingFeeContext } from "./fees";
|
|
2
|
+
import { Trade, TradeInfo, TradeInitialAccFees } from "./types";
|
|
3
|
+
export type GetLiqPriceContext = GetFundingFeeContext & GetRolloverFeeContext & GetBorrowingFeeContext & {
|
|
4
|
+
currentBlock: number;
|
|
5
|
+
currentL1Block: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const getLiquidationPrice: (trade: Trade, tradeInfo: TradeInfo, initialAccFees: TradeInitialAccFees, context: GetLiqPriceContext) => number;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLiquidationPrice = void 0;
|
|
4
|
+
const fees_1 = require("./fees");
|
|
5
|
+
const getLiquidationPrice = (trade, tradeInfo, initialAccFees, context) => {
|
|
6
|
+
const posDai = trade.initialPosToken * tradeInfo.tokenPriceDai;
|
|
7
|
+
const liqPriceDistance = (trade.openPrice *
|
|
8
|
+
(posDai * 0.9 -
|
|
9
|
+
(0, fees_1.getRolloverFee)(posDai, initialAccFees.rollover, initialAccFees.openedAfterUpdate, Object.assign(Object.assign({}, context), { currentBlock: context.currentL1Block })) -
|
|
10
|
+
(0, fees_1.getBorrowingFee)(posDai * trade.leverage, trade.pairIndex, trade.buy, initialAccFees.borrowing, Object.assign(Object.assign({}, context), { currentBlock: context.currentL1Block })) -
|
|
11
|
+
(0, fees_1.getFundingFee)(posDai * trade.leverage, initialAccFees.funding, trade.buy, initialAccFees.openedAfterUpdate, context))) /
|
|
12
|
+
posDai /
|
|
13
|
+
trade.leverage;
|
|
14
|
+
return trade.buy
|
|
15
|
+
? Math.max(trade.openPrice - liqPriceDistance, 0)
|
|
16
|
+
: Math.max(trade.openPrice + liqPriceDistance, 0);
|
|
17
|
+
};
|
|
18
|
+
exports.getLiquidationPrice = getLiquidationPrice;
|
package/lib/trade/pnl.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { GetFundingFeeContext, GetRolloverFeeContext } from "./fees";
|
|
1
|
+
import { GetBorrowingFeeContext, GetFundingFeeContext, GetRolloverFeeContext } from "./fees";
|
|
2
2
|
import { Fee, Trade, TradeInfo, TradeInitialAccFees } from "./types";
|
|
3
|
-
export type GetPnlContext = {
|
|
3
|
+
export type GetPnlContext = GetRolloverFeeContext & GetFundingFeeContext & GetBorrowingFeeContext & {
|
|
4
|
+
currentBlock: number;
|
|
5
|
+
currentL1Block: number;
|
|
4
6
|
fee: Fee | undefined;
|
|
5
7
|
maxGainP: number | undefined;
|
|
6
|
-
}
|
|
8
|
+
};
|
|
7
9
|
export declare const getPnl: (price: number | undefined, trade: Trade, tradeInfo: TradeInfo, initialAccFees: TradeInitialAccFees, useFees: boolean, context: GetPnlContext) => number[] | undefined;
|
package/lib/trade/pnl.js
CHANGED
|
@@ -8,7 +8,7 @@ const getPnl = (price, trade, tradeInfo, initialAccFees, useFees, context) => {
|
|
|
8
8
|
}
|
|
9
9
|
const posDai = trade.initialPosToken * tradeInfo.tokenPriceDai;
|
|
10
10
|
const { openPrice, leverage } = trade;
|
|
11
|
-
const { maxGainP,
|
|
11
|
+
const { maxGainP, pairParams, pairRolloverFees, pairFundingFees, openInterest, fee, currentL1Block, } = context;
|
|
12
12
|
const maxGain = maxGainP === undefined ? Infinity : (maxGainP / 100) * posDai;
|
|
13
13
|
let pnlDai = trade.buy
|
|
14
14
|
? ((price - openPrice) / openPrice) * leverage * posDai
|
|
@@ -16,16 +16,17 @@ const getPnl = (price, trade, tradeInfo, initialAccFees, useFees, context) => {
|
|
|
16
16
|
pnlDai = pnlDai > maxGain ? maxGain : pnlDai;
|
|
17
17
|
if (useFees) {
|
|
18
18
|
pnlDai -= (0, fees_1.getRolloverFee)(posDai, initialAccFees.rollover, initialAccFees.openedAfterUpdate, {
|
|
19
|
-
currentBlock,
|
|
19
|
+
currentBlock: currentL1Block,
|
|
20
20
|
pairParams,
|
|
21
21
|
pairRolloverFees,
|
|
22
22
|
});
|
|
23
23
|
pnlDai -= (0, fees_1.getFundingFee)(posDai * trade.leverage, initialAccFees.funding, trade.buy, initialAccFees.openedAfterUpdate, {
|
|
24
|
-
currentBlock,
|
|
24
|
+
currentBlock: currentL1Block,
|
|
25
25
|
pairParams,
|
|
26
26
|
pairFundingFees,
|
|
27
27
|
openInterest,
|
|
28
28
|
});
|
|
29
|
+
pnlDai -= (0, fees_1.getBorrowingFee)(posDai, trade.pairIndex, trade.buy, initialAccFees.borrowing, context);
|
|
29
30
|
}
|
|
30
31
|
let pnlPercentage = (pnlDai / posDai) * 100;
|
|
31
32
|
// Can be liquidated
|
package/lib/trade/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GFarmTradingStorageV5 } from "@/contracts/types/generated";
|
|
2
2
|
import { BigNumber } from "ethers";
|
|
3
|
+
import { BorrowingFee } from "./fees/borrowing";
|
|
3
4
|
export type PairIndexes = {
|
|
4
5
|
[key: string]: number;
|
|
5
6
|
};
|
|
@@ -7,6 +8,7 @@ export type TradeContainer = {
|
|
|
7
8
|
trade: Trade;
|
|
8
9
|
tradeInfo: TradeInfo;
|
|
9
10
|
initialAccFees: TradeInitialAccFees;
|
|
11
|
+
receivedAt?: number;
|
|
10
12
|
};
|
|
11
13
|
export type Trade = {
|
|
12
14
|
buy: boolean;
|
|
@@ -29,6 +31,7 @@ export type TradeInitialAccFees = {
|
|
|
29
31
|
rollover: number;
|
|
30
32
|
funding: number;
|
|
31
33
|
openedAfterUpdate: boolean;
|
|
34
|
+
borrowing: BorrowingFee.InitialAccFees;
|
|
32
35
|
};
|
|
33
36
|
export type TradingGroup = {
|
|
34
37
|
maxCollateralP: number;
|
|
@@ -85,6 +88,10 @@ export type PairFundingFees = {
|
|
|
85
88
|
accPerOiShort: number;
|
|
86
89
|
lastUpdateBlock: number;
|
|
87
90
|
};
|
|
91
|
+
export type PairParamsBorrowingFees = {
|
|
92
|
+
pairs: BorrowingFee.Pair[];
|
|
93
|
+
groups: BorrowingFee.Group[];
|
|
94
|
+
};
|
|
88
95
|
export type Pair = {
|
|
89
96
|
name: string;
|
|
90
97
|
from: string;
|
|
@@ -153,6 +160,11 @@ export type TradeContainerRaw = {
|
|
|
153
160
|
rollover: BigNumber;
|
|
154
161
|
funding: BigNumber;
|
|
155
162
|
openedAfterUpdate: boolean;
|
|
163
|
+
borrowing: {
|
|
164
|
+
accPairFee: number;
|
|
165
|
+
accGroupFee: number;
|
|
166
|
+
block: number;
|
|
167
|
+
};
|
|
156
168
|
};
|
|
157
169
|
};
|
|
158
170
|
export declare enum OpenLimitOrderType {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type GetPendingAccBlockWeightedMarketCap = {
|
|
2
|
+
marketCap: number;
|
|
3
|
+
accBlockWeightedMarketCap: number;
|
|
4
|
+
accBlockWeightedMarketCapLastStored: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const getPendingAccBlockWeightedMarketCap: (currentBlock: number, context: GetPendingAccBlockWeightedMarketCap) => number;
|
|
7
|
+
export {};
|