@gainsnetwork/sdk 0.0.19 → 0.0.20-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.
Files changed (150) hide show
  1. package/README.md +11 -11
  2. package/lib/constants.d.ts +135 -135
  3. package/lib/constants.js +123 -123
  4. package/lib/contracts/addresses.d.ts +2 -2
  5. package/lib/contracts/addresses.js +15 -15
  6. package/lib/contracts/addresses.json +23 -23
  7. package/lib/contracts/index.d.ts +6 -6
  8. package/lib/contracts/index.js +32 -32
  9. package/lib/contracts/types/GFarmTradingStorageV5.d.ts +1911 -0
  10. package/lib/contracts/types/GFarmTradingStorageV5.js +2 -0
  11. package/lib/contracts/types/GNSPairInfosV6_1.d.ts +911 -0
  12. package/lib/contracts/types/GNSPairInfosV6_1.js +2 -0
  13. package/lib/contracts/types/GNSPairsStorageV6.d.ts +660 -0
  14. package/lib/contracts/types/GNSPairsStorageV6.js +2 -0
  15. package/lib/contracts/types/common.d.ts +22 -0
  16. package/lib/contracts/types/common.js +2 -0
  17. package/lib/contracts/types/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
  18. package/lib/contracts/types/factories/GFarmTradingStorageV5__factory.js +2691 -0
  19. package/lib/contracts/types/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
  20. package/lib/contracts/types/factories/GNSPairInfosV6_1__factory.js +1485 -0
  21. package/lib/contracts/types/factories/GNSPairsStorageV6__factory.d.ts +117 -0
  22. package/lib/contracts/types/factories/GNSPairsStorageV6__factory.js +1265 -0
  23. package/lib/contracts/types/factories/index.d.ts +3 -0
  24. package/lib/contracts/types/factories/index.js +12 -0
  25. package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -1911
  26. package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -2
  27. package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -533
  28. package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -2
  29. package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -911
  30. package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -2
  31. package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -660
  32. package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -2
  33. package/lib/contracts/types/generated/GTokenOpenPnlFeed.d.ts +557 -557
  34. package/lib/contracts/types/generated/GTokenOpenPnlFeed.js +2 -2
  35. package/lib/contracts/types/generated/common.d.ts +22 -22
  36. package/lib/contracts/types/generated/common.js +2 -2
  37. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -83
  38. package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -2691
  39. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -100
  40. package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -1003
  41. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -98
  42. package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -1485
  43. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -117
  44. package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -1265
  45. package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.d.ts +59 -59
  46. package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.js +765 -765
  47. package/lib/contracts/types/generated/factories/index.d.ts +5 -5
  48. package/lib/contracts/types/generated/factories/index.js +16 -16
  49. package/lib/contracts/types/generated/index.d.ts +11 -11
  50. package/lib/contracts/types/generated/index.js +37 -37
  51. package/lib/contracts/types/index.d.ts +16 -16
  52. package/lib/contracts/types/index.js +2 -2
  53. package/lib/contracts/utils/index.d.ts +3 -3
  54. package/lib/contracts/utils/index.js +19 -19
  55. package/lib/contracts/utils/openLimitOrders.d.ts +8 -8
  56. package/lib/contracts/utils/openLimitOrders.js +77 -77
  57. package/lib/contracts/utils/openTrades.d.ts +9 -9
  58. package/lib/contracts/utils/openTrades.js +169 -193
  59. package/lib/contracts/utils/openTradesOriginal.d.ts +3 -0
  60. package/lib/contracts/utils/openTradesOriginal.js +134 -0
  61. package/lib/contracts/utils/pairs.d.ts +6 -6
  62. package/lib/contracts/utils/pairs.js +102 -102
  63. package/lib/index.d.ts +5 -4
  64. package/lib/index.js +21 -20
  65. package/lib/markets/commodities.d.ts +1 -1
  66. package/lib/markets/commodities.js +31 -31
  67. package/lib/markets/crypto.d.ts +1 -1
  68. package/lib/markets/crypto.js +6 -6
  69. package/lib/markets/forex.d.ts +2 -2
  70. package/lib/markets/forex.js +38 -38
  71. package/lib/markets/index.d.ts +5 -5
  72. package/lib/markets/index.js +21 -21
  73. package/lib/markets/indices.d.ts +1 -1
  74. package/lib/markets/indices.js +6 -6
  75. package/lib/markets/stocks.d.ts +3 -3
  76. package/lib/markets/stocks.js +54 -54
  77. package/lib/prices/PricingStreamClient.d.ts +16 -0
  78. package/lib/prices/PricingStreamClient.js +101 -0
  79. package/lib/prices/index.d.ts +1 -0
  80. package/lib/prices/index.js +17 -0
  81. package/lib/src/contracts/addresses.d.ts +2 -0
  82. package/lib/src/contracts/addresses.js +15 -0
  83. package/lib/src/contracts/addresses.json +20 -0
  84. package/lib/src/contracts/index.d.ts +6 -0
  85. package/lib/src/contracts/index.js +31 -0
  86. package/lib/src/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -0
  87. package/lib/src/contracts/types/generated/GFarmTradingStorageV5.js +2 -0
  88. package/lib/src/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -0
  89. package/lib/src/contracts/types/generated/GNSPairInfosV6_1.js +2 -0
  90. package/lib/src/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -0
  91. package/lib/src/contracts/types/generated/GNSPairsStorageV6.js +2 -0
  92. package/lib/src/contracts/types/generated/GTokenOpenPnlFeed.d.ts +557 -0
  93. package/lib/src/contracts/types/generated/GTokenOpenPnlFeed.js +2 -0
  94. package/lib/src/contracts/types/generated/common.d.ts +22 -0
  95. package/lib/src/contracts/types/generated/common.js +2 -0
  96. package/lib/src/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -0
  97. package/lib/src/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -0
  98. package/lib/src/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -0
  99. package/lib/src/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -0
  100. package/lib/src/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -0
  101. package/lib/src/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -0
  102. package/lib/src/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.d.ts +59 -0
  103. package/lib/src/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.js +765 -0
  104. package/lib/src/contracts/types/generated/factories/index.d.ts +4 -0
  105. package/lib/src/contracts/types/generated/factories/index.js +14 -0
  106. package/lib/src/contracts/types/generated/index.d.ts +9 -0
  107. package/lib/src/contracts/types/generated/index.js +35 -0
  108. package/lib/src/contracts/types/index.d.ts +13 -0
  109. package/lib/src/contracts/types/index.js +2 -0
  110. package/lib/src/contracts/utils/index.d.ts +2 -0
  111. package/lib/src/contracts/utils/index.js +18 -0
  112. package/lib/src/contracts/utils/openTrades.d.ts +3 -0
  113. package/lib/src/contracts/utils/openTrades.js +107 -0
  114. package/lib/src/contracts/utils/pairs.d.ts +6 -0
  115. package/lib/src/contracts/utils/pairs.js +102 -0
  116. package/lib/src/index.d.ts +3 -0
  117. package/lib/src/index.js +19 -0
  118. package/lib/src/markets/commodities.d.ts +1 -0
  119. package/lib/src/markets/commodities.js +31 -0
  120. package/lib/src/markets/crypto.d.ts +1 -0
  121. package/lib/src/markets/crypto.js +6 -0
  122. package/lib/src/markets/forex.d.ts +2 -0
  123. package/lib/src/markets/forex.js +38 -0
  124. package/lib/src/markets/index.d.ts +5 -0
  125. package/lib/src/markets/index.js +21 -0
  126. package/lib/src/markets/indices.d.ts +1 -0
  127. package/lib/src/markets/indices.js +6 -0
  128. package/lib/src/markets/stocks.d.ts +3 -0
  129. package/lib/src/markets/stocks.js +54 -0
  130. package/lib/src/trade/fees.d.ts +15 -0
  131. package/lib/src/trade/fees.js +45 -0
  132. package/lib/src/trade/index.d.ts +2 -0
  133. package/lib/src/trade/index.js +18 -0
  134. package/lib/src/trade/pnl.d.ts +7 -0
  135. package/lib/src/trade/pnl.js +43 -0
  136. package/lib/src/trade/types.d.ts +143 -0
  137. package/lib/src/trade/types.js +8 -0
  138. package/lib/test/index.d.ts +1 -0
  139. package/lib/test/index.js +22 -0
  140. package/lib/test.d.ts +1 -0
  141. package/lib/test.js +37 -0
  142. package/lib/trade/fees.d.ts +15 -15
  143. package/lib/trade/fees.js +45 -45
  144. package/lib/trade/index.d.ts +2 -2
  145. package/lib/trade/index.js +18 -18
  146. package/lib/trade/pnl.d.ts +7 -7
  147. package/lib/trade/pnl.js +43 -43
  148. package/lib/trade/types.d.ts +157 -157
  149. package/lib/trade/types.js +8 -8
  150. package/package.json +107 -104
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPnl = void 0;
4
+ const fees_1 = require("./fees");
5
+ const getPnl = (price, trade, tradeInfo, initialAccFees, useFees, context) => {
6
+ if (!price) {
7
+ return;
8
+ }
9
+ const posDai = trade.initialPosToken * tradeInfo.tokenPriceDai;
10
+ const { openPrice, leverage } = trade;
11
+ const { maxGainP, currentBlock, pairParams, pairRolloverFees, pairFundingFees, openInterest, fee, } = context;
12
+ const maxGain = maxGainP === undefined ? Infinity : (maxGainP / 100) * posDai;
13
+ let pnlDai = trade.buy
14
+ ? ((price - openPrice) / openPrice) * leverage * posDai
15
+ : ((openPrice - price) / openPrice) * leverage * posDai;
16
+ pnlDai = pnlDai > maxGain ? maxGain : pnlDai;
17
+ if (useFees) {
18
+ pnlDai -= (0, fees_1.getRolloverFee)(posDai, initialAccFees.rollover, initialAccFees.openedAfterUpdate, {
19
+ currentBlock,
20
+ pairParams,
21
+ pairRolloverFees,
22
+ });
23
+ pnlDai -= (0, fees_1.getFundingFee)(posDai * trade.leverage, initialAccFees.funding, trade.buy, initialAccFees.openedAfterUpdate, {
24
+ currentBlock,
25
+ pairParams,
26
+ pairFundingFees,
27
+ openInterest,
28
+ });
29
+ }
30
+ let pnlPercentage = (pnlDai / posDai) * 100;
31
+ // Can be liquidated
32
+ if (pnlPercentage <= -90) {
33
+ pnlPercentage = -100;
34
+ }
35
+ else {
36
+ pnlDai -= (0, fees_1.getClosingFee)(posDai, trade.leverage, trade.pairIndex, fee);
37
+ pnlPercentage = (pnlDai / posDai) * 100;
38
+ }
39
+ pnlPercentage = pnlPercentage < -100 ? -100 : pnlPercentage;
40
+ pnlDai = (posDai * pnlPercentage) / 100;
41
+ return [pnlDai, pnlPercentage];
42
+ };
43
+ exports.getPnl = getPnl;
@@ -0,0 +1,143 @@
1
+ export type PairIndexes = {
2
+ [key: string]: number;
3
+ };
4
+ export type TradeContainer = {
5
+ trade: Trade;
6
+ tradeInfo: TradeInfo;
7
+ initialAccFees: TradeInitialAccFees;
8
+ };
9
+ export type Trade = {
10
+ buy: boolean;
11
+ index: number;
12
+ initialPosToken: number;
13
+ leverage: number;
14
+ openPrice: number;
15
+ pairIndex: number;
16
+ sl: number;
17
+ tp: number;
18
+ trader: string;
19
+ };
20
+ export type TradeInfo = {
21
+ openInterestDai: number;
22
+ slLastUpdated: number;
23
+ tokenPriceDai: number;
24
+ tpLastUpdated: number;
25
+ };
26
+ export type TradeInitialAccFees = {
27
+ rollover: number;
28
+ funding: number;
29
+ openedAfterUpdate: boolean;
30
+ };
31
+ export type TradingGroup = {
32
+ maxCollateralP: number;
33
+ maxLeverage: number;
34
+ minLeverage: number;
35
+ name: string;
36
+ };
37
+ export type LimitOrder = {
38
+ block: number;
39
+ buy: boolean;
40
+ index: number;
41
+ leverage: number;
42
+ maxPrice: number;
43
+ minPrice: number;
44
+ pairIndex: number;
45
+ positionSize: number;
46
+ sl: number;
47
+ spreadReductionP: number;
48
+ tp: number;
49
+ trader: string;
50
+ type: number;
51
+ };
52
+ export type Fee = {
53
+ closeFeeP: number;
54
+ minLevPosDai: number;
55
+ nftLimitOrderFeeP: number;
56
+ openFeeP: number;
57
+ referralFeeP: number;
58
+ };
59
+ export type OpenInterest = {
60
+ long: number;
61
+ max: number;
62
+ short: number;
63
+ };
64
+ export type OpenCollateral = {
65
+ long: number;
66
+ short: number;
67
+ };
68
+ export type PairParams = {
69
+ onePercentDepthAbove: number;
70
+ onePercentDepthBelow: number;
71
+ rolloverFeePerBlockP: number;
72
+ fundingFeePerBlockP: number;
73
+ };
74
+ export type PairRolloverFees = {
75
+ accPerCollateral: number;
76
+ lastUpdateBlock: number;
77
+ };
78
+ export type PairFundingFees = {
79
+ accPerOiLong: number;
80
+ accPerOiShort: number;
81
+ lastUpdateBlock: number;
82
+ };
83
+ export type Pair = {
84
+ name: string;
85
+ from: string;
86
+ to: string;
87
+ feeIndex: number;
88
+ groupIndex: number;
89
+ pairIndex: number;
90
+ spreadP: number;
91
+ };
92
+ export type TradeHistoryRecord = {
93
+ action: string;
94
+ address: string;
95
+ buy: number;
96
+ date: string;
97
+ leverage: number;
98
+ pair: string;
99
+ pnl_net: number;
100
+ price: number;
101
+ size: number;
102
+ tx: string;
103
+ };
104
+ export type MarketOrder = {
105
+ trader: string;
106
+ pairIndex: number;
107
+ index: number;
108
+ block: number;
109
+ open: boolean;
110
+ };
111
+ export type ChartBar = {
112
+ close: number;
113
+ high: number;
114
+ isBarClosed: boolean;
115
+ isLastBar: boolean;
116
+ low: number;
117
+ open: number;
118
+ time: number;
119
+ };
120
+ export type LeaderboardTrader = {
121
+ address: string;
122
+ tradesCount: number;
123
+ winrate: number;
124
+ pnl: number;
125
+ volume: number;
126
+ score: number;
127
+ };
128
+ export type OpenTradeParams = [
129
+ address: string,
130
+ pairIndex: number,
131
+ x1: number,
132
+ x2: number,
133
+ wei: number,
134
+ price: string,
135
+ buy: boolean,
136
+ leverage: number,
137
+ takeProfit: string,
138
+ stopLoss: string
139
+ ];
140
+ export declare enum PositionType {
141
+ LONG = "LONG",
142
+ SHORT = "SHORT"
143
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PositionType = void 0;
4
+ var PositionType;
5
+ (function (PositionType) {
6
+ PositionType["LONG"] = "LONG";
7
+ PositionType["SHORT"] = "SHORT";
8
+ })(PositionType = exports.PositionType || (exports.PositionType = {}));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const contracts_1 = require("@/contracts");
13
+ const providers_1 = require("@ethersproject/providers");
14
+ const provider = new providers_1.WebSocketProvider("wss://blue-muddy-seed.arbitrum-mainnet.quiknode.pro/2124fcf6b4c917a038d881098fd78a57e91ddf82/");
15
+ const run = () => __awaiter(void 0, void 0, void 0, function* () {
16
+ const contracts = (0, contracts_1.getContractsForChain)(137, provider);
17
+ console.log(Date.now());
18
+ const openTrades = yield (0, contracts_1.fetchOpenPairTrades)(contracts);
19
+ console.log(openTrades.length);
20
+ console.log(Date.now());
21
+ });
22
+ run();
package/lib/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/lib/test.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const contracts_1 = require("./contracts");
13
+ const providers_1 = require("@ethersproject/providers");
14
+ const provider = new providers_1.WebSocketProvider("wss://polygon-mainnet.g.alchemy.com/v2/K-EcmM_0Mwj3wY_P8wACcc157ytPgSkV");
15
+ const run = () => __awaiter(void 0, void 0, void 0, function* () {
16
+ var _a;
17
+ const contracts = (0, contracts_1.getContractsForChain)(137, provider);
18
+ console.time("mc");
19
+ const openTrades = yield (0, contracts_1.fetchOpenPairTradesRaw)(contracts, {
20
+ useMulticall: true,
21
+ });
22
+ console.log(openTrades.length);
23
+ const trade = openTrades.find(t => {
24
+ var _a, _b;
25
+ return t.trade.trader === "0xe52C5bebF2c16C2604b2Bd811C5e46E61275486c" &&
26
+ ((_a = t.trade.pairIndex) === null || _a === void 0 ? void 0 : _a.toString()) === "0" &&
27
+ ((_b = t.trade.index) === null || _b === void 0 ? void 0 : _b.toString()) === "1";
28
+ });
29
+ console.log(trade);
30
+ console.log((_a = trade === null || trade === void 0 ? void 0 : trade.tradeInfo.openInterestDai) === null || _a === void 0 ? void 0 : _a.toString());
31
+ console.timeEnd("mc");
32
+ // console.time("original");
33
+ // const openTrades = await fetchOpenPairTradesOriginal(contracts);
34
+ // console.log(openTrades.length);
35
+ // console.timeEnd("original");
36
+ });
37
+ void run();
@@ -1,15 +1,15 @@
1
- import { Fee, OpenInterest, PairFundingFees, PairParams, PairRolloverFees } from "./types";
2
- export declare const getClosingFee: (posDai: number, leverage: number, pairIndex: number, pairFee: Fee | undefined) => number;
3
- export type GetFundingFeeContext = {
4
- currentBlock?: number;
5
- pairParams?: PairParams;
6
- pairFundingFees?: PairFundingFees;
7
- openInterest?: OpenInterest;
8
- };
9
- export declare const getFundingFee: (leveragedPosDai: number, initialAccFundingFees: number, buy: boolean, openedAfterUpdate: boolean, context: GetFundingFeeContext) => number;
10
- export type GetRolloverFeeContext = {
11
- currentBlock?: number;
12
- pairParams?: PairParams;
13
- pairRolloverFees?: PairRolloverFees;
14
- };
15
- export declare const getRolloverFee: (posDai: number, initialAccRolloverFees: number, openedAfterUpdate: boolean, context: GetRolloverFeeContext) => number;
1
+ import { Fee, OpenInterest, PairFundingFees, PairParams, PairRolloverFees } from "./types";
2
+ export declare const getClosingFee: (posDai: number, leverage: number, pairIndex: number, pairFee: Fee | undefined) => number;
3
+ export type GetFundingFeeContext = {
4
+ currentBlock?: number;
5
+ pairParams?: PairParams;
6
+ pairFundingFees?: PairFundingFees;
7
+ openInterest?: OpenInterest;
8
+ };
9
+ export declare const getFundingFee: (leveragedPosDai: number, initialAccFundingFees: number, buy: boolean, openedAfterUpdate: boolean, context: GetFundingFeeContext) => number;
10
+ export type GetRolloverFeeContext = {
11
+ currentBlock?: number;
12
+ pairParams?: PairParams;
13
+ pairRolloverFees?: PairRolloverFees;
14
+ };
15
+ export declare const getRolloverFee: (posDai: number, initialAccRolloverFees: number, openedAfterUpdate: boolean, context: GetRolloverFeeContext) => number;
package/lib/trade/fees.js CHANGED
@@ -1,45 +1,45 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRolloverFee = exports.getFundingFee = exports.getClosingFee = void 0;
4
- const getClosingFee = (posDai, leverage, pairIndex, pairFee) => {
5
- if (posDai === undefined ||
6
- leverage === undefined ||
7
- pairIndex === undefined ||
8
- pairFee === undefined) {
9
- return 0;
10
- }
11
- const { closeFeeP, nftLimitOrderFeeP } = pairFee;
12
- return (closeFeeP + nftLimitOrderFeeP) * posDai * leverage;
13
- };
14
- exports.getClosingFee = getClosingFee;
15
- const getFundingFee = (leveragedPosDai, initialAccFundingFees, buy, openedAfterUpdate, context) => {
16
- const { pairParams, pairFundingFees, openInterest, currentBlock } = context;
17
- if (!currentBlock ||
18
- !openedAfterUpdate ||
19
- pairParams === undefined ||
20
- pairFundingFees === undefined ||
21
- openInterest === undefined)
22
- return 0;
23
- const { accPerOiLong, accPerOiShort, lastUpdateBlock } = pairFundingFees;
24
- const { fundingFeePerBlockP } = pairParams;
25
- const { long: longOi, short: shortOi } = openInterest;
26
- const fundingFeesPaidByLongs = (longOi - shortOi) * fundingFeePerBlockP * (currentBlock - lastUpdateBlock);
27
- const pendingAccFundingFees = buy
28
- ? accPerOiLong + fundingFeesPaidByLongs / longOi
29
- : accPerOiShort + (fundingFeesPaidByLongs * -1) / shortOi;
30
- return leveragedPosDai * (pendingAccFundingFees - initialAccFundingFees);
31
- };
32
- exports.getFundingFee = getFundingFee;
33
- const getRolloverFee = (posDai, initialAccRolloverFees, openedAfterUpdate, context) => {
34
- const { pairParams, pairRolloverFees, currentBlock } = context;
35
- if (!currentBlock ||
36
- !openedAfterUpdate ||
37
- pairParams === undefined ||
38
- pairRolloverFees === undefined)
39
- return 0;
40
- const { accPerCollateral, lastUpdateBlock } = pairRolloverFees;
41
- const { rolloverFeePerBlockP } = pairParams;
42
- const pendingAccRolloverFees = accPerCollateral + (currentBlock - lastUpdateBlock) * rolloverFeePerBlockP;
43
- return posDai * (pendingAccRolloverFees - initialAccRolloverFees);
44
- };
45
- exports.getRolloverFee = getRolloverFee;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRolloverFee = exports.getFundingFee = exports.getClosingFee = void 0;
4
+ const getClosingFee = (posDai, leverage, pairIndex, pairFee) => {
5
+ if (posDai === undefined ||
6
+ leverage === undefined ||
7
+ pairIndex === undefined ||
8
+ pairFee === undefined) {
9
+ return 0;
10
+ }
11
+ const { closeFeeP, nftLimitOrderFeeP } = pairFee;
12
+ return (closeFeeP + nftLimitOrderFeeP) * posDai * leverage;
13
+ };
14
+ exports.getClosingFee = getClosingFee;
15
+ const getFundingFee = (leveragedPosDai, initialAccFundingFees, buy, openedAfterUpdate, context) => {
16
+ const { pairParams, pairFundingFees, openInterest, currentBlock } = context;
17
+ if (!currentBlock ||
18
+ !openedAfterUpdate ||
19
+ pairParams === undefined ||
20
+ pairFundingFees === undefined ||
21
+ openInterest === undefined)
22
+ return 0;
23
+ const { accPerOiLong, accPerOiShort, lastUpdateBlock } = pairFundingFees;
24
+ const { fundingFeePerBlockP } = pairParams;
25
+ const { long: longOi, short: shortOi } = openInterest;
26
+ const fundingFeesPaidByLongs = (longOi - shortOi) * fundingFeePerBlockP * (currentBlock - lastUpdateBlock);
27
+ const pendingAccFundingFees = buy
28
+ ? accPerOiLong + fundingFeesPaidByLongs / longOi
29
+ : accPerOiShort + (fundingFeesPaidByLongs * -1) / shortOi;
30
+ return leveragedPosDai * (pendingAccFundingFees - initialAccFundingFees);
31
+ };
32
+ exports.getFundingFee = getFundingFee;
33
+ const getRolloverFee = (posDai, initialAccRolloverFees, openedAfterUpdate, context) => {
34
+ const { pairParams, pairRolloverFees, currentBlock } = context;
35
+ if (!currentBlock ||
36
+ !openedAfterUpdate ||
37
+ pairParams === undefined ||
38
+ pairRolloverFees === undefined)
39
+ return 0;
40
+ const { accPerCollateral, lastUpdateBlock } = pairRolloverFees;
41
+ const { rolloverFeePerBlockP } = pairParams;
42
+ const pendingAccRolloverFees = accPerCollateral + (currentBlock - lastUpdateBlock) * rolloverFeePerBlockP;
43
+ return posDai * (pendingAccRolloverFees - initialAccRolloverFees);
44
+ };
45
+ exports.getRolloverFee = getRolloverFee;
@@ -1,2 +1,2 @@
1
- export * from "./fees";
2
- export * from "./pnl";
1
+ export * from "./fees";
2
+ export * from "./pnl";
@@ -1,18 +1,18 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./fees"), exports);
18
- __exportStar(require("./pnl"), exports);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./fees"), exports);
18
+ __exportStar(require("./pnl"), exports);
@@ -1,7 +1,7 @@
1
- import { GetFundingFeeContext, GetRolloverFeeContext } from "./fees";
2
- import { Fee, Trade, TradeInfo, TradeInitialAccFees } from "./types";
3
- export type GetPnlContext = {
4
- fee: Fee | undefined;
5
- maxGainP: number | undefined;
6
- } & GetRolloverFeeContext & GetFundingFeeContext;
7
- export declare const getPnl: (price: number | undefined, trade: Trade, tradeInfo: TradeInfo, initialAccFees: TradeInitialAccFees, useFees: boolean, context: GetPnlContext) => number[] | undefined;
1
+ import { GetFundingFeeContext, GetRolloverFeeContext } from "./fees";
2
+ import { Fee, Trade, TradeInfo, TradeInitialAccFees } from "./types";
3
+ export type GetPnlContext = {
4
+ fee: Fee | undefined;
5
+ maxGainP: number | undefined;
6
+ } & GetRolloverFeeContext & GetFundingFeeContext;
7
+ 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
@@ -1,43 +1,43 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPnl = void 0;
4
- const fees_1 = require("./fees");
5
- const getPnl = (price, trade, tradeInfo, initialAccFees, useFees, context) => {
6
- if (!price) {
7
- return;
8
- }
9
- const posDai = trade.initialPosToken * tradeInfo.tokenPriceDai;
10
- const { openPrice, leverage } = trade;
11
- const { maxGainP, currentBlock, pairParams, pairRolloverFees, pairFundingFees, openInterest, fee, } = context;
12
- const maxGain = maxGainP === undefined ? Infinity : (maxGainP / 100) * posDai;
13
- let pnlDai = trade.buy
14
- ? ((price - openPrice) / openPrice) * leverage * posDai
15
- : ((openPrice - price) / openPrice) * leverage * posDai;
16
- pnlDai = pnlDai > maxGain ? maxGain : pnlDai;
17
- if (useFees) {
18
- pnlDai -= (0, fees_1.getRolloverFee)(posDai, initialAccFees.rollover, initialAccFees.openedAfterUpdate, {
19
- currentBlock,
20
- pairParams,
21
- pairRolloverFees,
22
- });
23
- pnlDai -= (0, fees_1.getFundingFee)(posDai * trade.leverage, initialAccFees.funding, trade.buy, initialAccFees.openedAfterUpdate, {
24
- currentBlock,
25
- pairParams,
26
- pairFundingFees,
27
- openInterest,
28
- });
29
- }
30
- let pnlPercentage = (pnlDai / posDai) * 100;
31
- // Can be liquidated
32
- if (pnlPercentage <= -90) {
33
- pnlPercentage = -100;
34
- }
35
- else {
36
- pnlDai -= (0, fees_1.getClosingFee)(posDai, trade.leverage, trade.pairIndex, fee);
37
- pnlPercentage = (pnlDai / posDai) * 100;
38
- }
39
- pnlPercentage = pnlPercentage < -100 ? -100 : pnlPercentage;
40
- pnlDai = (posDai * pnlPercentage) / 100;
41
- return [pnlDai, pnlPercentage];
42
- };
43
- exports.getPnl = getPnl;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPnl = void 0;
4
+ const fees_1 = require("./fees");
5
+ const getPnl = (price, trade, tradeInfo, initialAccFees, useFees, context) => {
6
+ if (!price) {
7
+ return;
8
+ }
9
+ const posDai = trade.initialPosToken * tradeInfo.tokenPriceDai;
10
+ const { openPrice, leverage } = trade;
11
+ const { maxGainP, currentBlock, pairParams, pairRolloverFees, pairFundingFees, openInterest, fee, } = context;
12
+ const maxGain = maxGainP === undefined ? Infinity : (maxGainP / 100) * posDai;
13
+ let pnlDai = trade.buy
14
+ ? ((price - openPrice) / openPrice) * leverage * posDai
15
+ : ((openPrice - price) / openPrice) * leverage * posDai;
16
+ pnlDai = pnlDai > maxGain ? maxGain : pnlDai;
17
+ if (useFees) {
18
+ pnlDai -= (0, fees_1.getRolloverFee)(posDai, initialAccFees.rollover, initialAccFees.openedAfterUpdate, {
19
+ currentBlock,
20
+ pairParams,
21
+ pairRolloverFees,
22
+ });
23
+ pnlDai -= (0, fees_1.getFundingFee)(posDai * trade.leverage, initialAccFees.funding, trade.buy, initialAccFees.openedAfterUpdate, {
24
+ currentBlock,
25
+ pairParams,
26
+ pairFundingFees,
27
+ openInterest,
28
+ });
29
+ }
30
+ let pnlPercentage = (pnlDai / posDai) * 100;
31
+ // Can be liquidated
32
+ if (pnlPercentage <= -90) {
33
+ pnlPercentage = -100;
34
+ }
35
+ else {
36
+ pnlDai -= (0, fees_1.getClosingFee)(posDai, trade.leverage, trade.pairIndex, fee);
37
+ pnlPercentage = (pnlDai / posDai) * 100;
38
+ }
39
+ pnlPercentage = pnlPercentage < -100 ? -100 : pnlPercentage;
40
+ pnlDai = (posDai * pnlPercentage) / 100;
41
+ return [pnlDai, pnlPercentage];
42
+ };
43
+ exports.getPnl = getPnl;