aftermath-ts-sdk 1.3.23-perps.22 → 1.3.23-perps.24
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/dist/general/utils/caller.d.ts +16 -0
- package/dist/general/utils/caller.d.ts.map +1 -1
- package/dist/general/utils/caller.js +67 -0
- package/dist/packages/perpetuals/perpetuals.d.ts +70 -5
- package/dist/packages/perpetuals/perpetuals.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetuals.js +101 -6
- package/dist/packages/perpetuals/perpetualsAccount.d.ts +0 -91
- package/dist/packages/perpetuals/perpetualsAccount.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetualsAccount.js +134 -238
- package/dist/packages/perpetuals/perpetualsMarket.d.ts +1 -3
- package/dist/packages/perpetuals/perpetualsMarket.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetualsMarket.js +17 -15
- package/dist/packages/perpetuals/perpetualsTypes.d.ts +100 -49
- package/dist/packages/perpetuals/perpetualsTypes.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -22,7 +22,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
23
|
exports.PerpetualsAccount = void 0;
|
|
24
24
|
const caller_1 = require("../../general/utils/caller");
|
|
25
|
-
const types_1 = require("../../types");
|
|
26
25
|
const utils_1 = require("../../general/utils");
|
|
27
26
|
const perpetuals_1 = require("./perpetuals");
|
|
28
27
|
const __1 = require("..");
|
|
@@ -38,203 +37,6 @@ class PerpetualsAccount extends caller_1.Caller {
|
|
|
38
37
|
this.account = account;
|
|
39
38
|
this.accountCap = accountCap;
|
|
40
39
|
this.Provider = Provider;
|
|
41
|
-
// public async getOwnedWithdrawRequests() {
|
|
42
|
-
// return new Perpetuals(
|
|
43
|
-
// this.config,
|
|
44
|
-
// this.Provider
|
|
45
|
-
// ).getOwnedWithdrawRequests({
|
|
46
|
-
// walletAddress: this.ownerAddress(),
|
|
47
|
-
// });
|
|
48
|
-
// }
|
|
49
|
-
// =========================================================================
|
|
50
|
-
// Calculations
|
|
51
|
-
// =========================================================================
|
|
52
|
-
this.calcFreeCollateralForPosition = (inputs) => {
|
|
53
|
-
var _a, _b;
|
|
54
|
-
const marketId = inputs.market.marketId;
|
|
55
|
-
const position = (_b = (_a = inputs.position) !== null && _a !== void 0 ? _a : this.positionForMarketId({ marketId })) !== null && _b !== void 0 ? _b : inputs.market.emptyPosition();
|
|
56
|
-
const funding = this.calcUnrealizedFundingsForPosition(inputs);
|
|
57
|
-
const { pnl, minInitialMargin } = this.calcPnLAndMarginForPosition(inputs);
|
|
58
|
-
let collateralUsd = position.collateral * inputs.collateralPrice;
|
|
59
|
-
collateralUsd += funding;
|
|
60
|
-
let cappedMargin;
|
|
61
|
-
if (pnl < 0) {
|
|
62
|
-
cappedMargin = collateralUsd + pnl;
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
cappedMargin = collateralUsd;
|
|
66
|
-
}
|
|
67
|
-
if (cappedMargin >= minInitialMargin) {
|
|
68
|
-
return (cappedMargin - minInitialMargin) / inputs.collateralPrice;
|
|
69
|
-
}
|
|
70
|
-
else
|
|
71
|
-
return 0;
|
|
72
|
-
};
|
|
73
|
-
this.calcMarginRatioAndLeverageForPosition = (inputs) => {
|
|
74
|
-
var _a, _b;
|
|
75
|
-
const { market, indexPrice, collateralPrice } = inputs;
|
|
76
|
-
const marketId = market.marketId;
|
|
77
|
-
const position = (_b = (_a = inputs.position) !== null && _a !== void 0 ? _a : this.positionForMarketId({ marketId })) !== null && _b !== void 0 ? _b : market.emptyPosition();
|
|
78
|
-
const funding = this.calcUnrealizedFundingsForPosition({
|
|
79
|
-
market,
|
|
80
|
-
position,
|
|
81
|
-
});
|
|
82
|
-
const collateralUsd = (position === null || position === void 0 ? void 0 : position.collateral) * collateralPrice + funding;
|
|
83
|
-
const { pnl, netAbsBaseValue } = this.calcPnLAndMarginForPosition({
|
|
84
|
-
market,
|
|
85
|
-
indexPrice,
|
|
86
|
-
position,
|
|
87
|
-
});
|
|
88
|
-
const marginRatio = netAbsBaseValue === 0 ? 0 : (collateralUsd + pnl) / netAbsBaseValue;
|
|
89
|
-
const leverage = marginRatio === 0 ? 0 : 1 / marginRatio;
|
|
90
|
-
return {
|
|
91
|
-
marginRatio,
|
|
92
|
-
leverage,
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
this.calcUnrealizedFundings = (inputs) => {
|
|
96
|
-
let totalFunding = 0;
|
|
97
|
-
inputs.markets.forEach((market) => {
|
|
98
|
-
totalFunding += this.calcUnrealizedFundingsForPosition({
|
|
99
|
-
market,
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
return totalFunding;
|
|
103
|
-
};
|
|
104
|
-
this.calcUnrealizedFundingsForPosition = (inputs) => {
|
|
105
|
-
var _a, _b;
|
|
106
|
-
const marketId = inputs.market.marketId;
|
|
107
|
-
const position = (_b = (_a = inputs.position) !== null && _a !== void 0 ? _a : this.positionForMarketId({ marketId })) !== null && _b !== void 0 ? _b : inputs.market.emptyPosition();
|
|
108
|
-
const baseAmount = position.baseAssetAmount;
|
|
109
|
-
const isLong = Math.sign(baseAmount);
|
|
110
|
-
if (isLong < 0) {
|
|
111
|
-
const fundingShort = position.cumFundingRateShort;
|
|
112
|
-
const marketFundingShort = inputs.market.marketState.cumFundingRateShort;
|
|
113
|
-
return -baseAmount * (marketFundingShort - fundingShort);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
const fundingLong = position.cumFundingRateLong;
|
|
117
|
-
const marketFundingLong = inputs.market.marketState.cumFundingRateLong;
|
|
118
|
-
return -baseAmount * (marketFundingLong - fundingLong);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
this.calcPnLAndMarginForPosition = (inputs) => {
|
|
122
|
-
var _a, _b;
|
|
123
|
-
const marketId = inputs.market.marketId;
|
|
124
|
-
const position = (_b = (_a = inputs.position) !== null && _a !== void 0 ? _a : this.positionForMarketId({ marketId })) !== null && _b !== void 0 ? _b : inputs.market.emptyPosition();
|
|
125
|
-
const marginRatioInitial = 1 / (position.leverage || 1);
|
|
126
|
-
// const marginRatioInitial = inputs.market.initialMarginRatio();
|
|
127
|
-
const marginRatioMaintenance = inputs.market.marketParams.marginRatioMaintenance;
|
|
128
|
-
const baseAssetAmount = position.baseAssetAmount;
|
|
129
|
-
const quoteAssetAmount = position.quoteAssetNotionalAmount;
|
|
130
|
-
const bidsQuantity = position.bidsQuantity;
|
|
131
|
-
const asksQuantity = position.asksQuantity;
|
|
132
|
-
const pnl = baseAssetAmount * inputs.indexPrice - quoteAssetAmount;
|
|
133
|
-
const netAbs = Math.max(Math.abs(baseAssetAmount + bidsQuantity), Math.abs(baseAssetAmount - asksQuantity));
|
|
134
|
-
const netAbsBaseValue = netAbs * inputs.indexPrice;
|
|
135
|
-
const minInitialMargin = netAbsBaseValue * marginRatioInitial;
|
|
136
|
-
const minMaintenanceMargin = netAbsBaseValue * marginRatioMaintenance;
|
|
137
|
-
return { pnl, minInitialMargin, minMaintenanceMargin, netAbsBaseValue };
|
|
138
|
-
};
|
|
139
|
-
this.calcLiquidationPriceForPosition = (inputs) => {
|
|
140
|
-
var _a, _b;
|
|
141
|
-
const marketId = inputs.market.marketId;
|
|
142
|
-
const position = (_b = (_a = inputs.position) !== null && _a !== void 0 ? _a : this.positionForMarketId({ marketId })) !== null && _b !== void 0 ? _b : inputs.market.emptyPosition();
|
|
143
|
-
const funding = this.calcUnrealizedFundingsForPosition(inputs);
|
|
144
|
-
const baseAssetAmount = position.baseAssetAmount;
|
|
145
|
-
const quoteAssetAmount = position.quoteAssetNotionalAmount;
|
|
146
|
-
const numerator = position.collateral * inputs.collateralPrice +
|
|
147
|
-
funding -
|
|
148
|
-
quoteAssetAmount;
|
|
149
|
-
const MMR = inputs.market.marketParams.marginRatioMaintenance;
|
|
150
|
-
const bidsQuantity = position.bidsQuantity;
|
|
151
|
-
const asksQuantity = position.asksQuantity;
|
|
152
|
-
const netAbs = Math.max(Math.abs(baseAssetAmount + bidsQuantity), Math.abs(baseAssetAmount - asksQuantity));
|
|
153
|
-
const denominator = netAbs * MMR - baseAssetAmount;
|
|
154
|
-
if (!denominator)
|
|
155
|
-
return 0;
|
|
156
|
-
const liquidationPrice = numerator / denominator;
|
|
157
|
-
return liquidationPrice <= 0 ? 0 : liquidationPrice;
|
|
158
|
-
};
|
|
159
|
-
this.calcFreeMarginUsdForPosition = (inputs) => {
|
|
160
|
-
var _a, _b;
|
|
161
|
-
const marketId = inputs.market.marketId;
|
|
162
|
-
const position = (_b = (_a = inputs.position) !== null && _a !== void 0 ? _a : this.positionForMarketId({ marketId })) !== null && _b !== void 0 ? _b : inputs.market.emptyPosition();
|
|
163
|
-
const totalFunding = this.calcUnrealizedFundingsForPosition(inputs);
|
|
164
|
-
const { pnl, minInitialMargin } = this.calcPnLAndMarginForPosition(inputs);
|
|
165
|
-
let collateralUsd = position.collateral * inputs.collateralPrice;
|
|
166
|
-
const margin = collateralUsd + totalFunding + pnl;
|
|
167
|
-
if (margin >= minInitialMargin) {
|
|
168
|
-
return margin - minInitialMargin;
|
|
169
|
-
}
|
|
170
|
-
else
|
|
171
|
-
return 0;
|
|
172
|
-
};
|
|
173
|
-
this.calcAccountState = (inputs) => {
|
|
174
|
-
const zipped = utils_1.Helpers.zip(inputs.markets, inputs.indexPrices);
|
|
175
|
-
let accountEquity = 0;
|
|
176
|
-
let totalPnL = 0;
|
|
177
|
-
let totalFunding = 0;
|
|
178
|
-
let totalCollateralAllocated = 0;
|
|
179
|
-
zipped.forEach(([market, indexPrice]) => {
|
|
180
|
-
var _a;
|
|
181
|
-
const marketId = market.marketId;
|
|
182
|
-
const position = (_a = this.positionForMarketId({ marketId })) !== null && _a !== void 0 ? _a : market.emptyPosition();
|
|
183
|
-
const funding = this.calcUnrealizedFundingsForPosition({
|
|
184
|
-
market,
|
|
185
|
-
position,
|
|
186
|
-
});
|
|
187
|
-
const { pnl } = this.calcPnLAndMarginForPosition({
|
|
188
|
-
market,
|
|
189
|
-
indexPrice,
|
|
190
|
-
position,
|
|
191
|
-
});
|
|
192
|
-
let collateralUsd = position.collateral * inputs.collateralPrice;
|
|
193
|
-
totalPnL += pnl;
|
|
194
|
-
totalFunding += funding;
|
|
195
|
-
totalCollateralAllocated += collateralUsd;
|
|
196
|
-
accountEquity += collateralUsd + funding + pnl;
|
|
197
|
-
});
|
|
198
|
-
return {
|
|
199
|
-
accountEquity,
|
|
200
|
-
totalPnL,
|
|
201
|
-
totalFunding,
|
|
202
|
-
totalCollateralAllocated,
|
|
203
|
-
};
|
|
204
|
-
};
|
|
205
|
-
this.closePositionTxInputs = (inputs) => {
|
|
206
|
-
var _a;
|
|
207
|
-
const { size, market, orderDatas, collateralPrice } = inputs;
|
|
208
|
-
const marketId = market.marketId;
|
|
209
|
-
const position = (_a = this.positionForMarketId({ marketId })) !== null && _a !== void 0 ? _a : market.emptyPosition();
|
|
210
|
-
// TODO: move conversion to helper function, since used often
|
|
211
|
-
const ordersCollateral = utils_1.Helpers.sum(orderDatas
|
|
212
|
-
.filter((orderData) => orderData.marketId === market.marketId)
|
|
213
|
-
.map((orderData) => market.calcCollateralUsedForOrder(Object.assign(Object.assign({}, inputs), { orderData, leverage: position.leverage })).collateral));
|
|
214
|
-
const fullPositionCollateralChange = Math.max(this.calcFreeMarginUsdForPosition(inputs) / collateralPrice -
|
|
215
|
-
ordersCollateral *
|
|
216
|
-
(1 -
|
|
217
|
-
PerpetualsAccount.constants
|
|
218
|
-
.closePositionMarginOfError), 0) * -1;
|
|
219
|
-
// NOTE: is this safe / correct ?
|
|
220
|
-
const collateralChange = Number(fullPositionCollateralChange) *
|
|
221
|
-
(Number(size) /
|
|
222
|
-
utils_1.Casting.Fixed.fixedOneN9 /
|
|
223
|
-
position.baseAssetAmount);
|
|
224
|
-
const positionSide = perpetuals_1.Perpetuals.positionSide(position);
|
|
225
|
-
return {
|
|
226
|
-
size,
|
|
227
|
-
marketId,
|
|
228
|
-
collateralChange,
|
|
229
|
-
// leverage: position.leverage || 1,
|
|
230
|
-
// leverage: undefined,
|
|
231
|
-
side: positionSide === types_1.PerpetualsOrderSide.Bid
|
|
232
|
-
? types_1.PerpetualsOrderSide.Ask
|
|
233
|
-
: types_1.PerpetualsOrderSide.Bid,
|
|
234
|
-
// hasPosition: this.positionForMarketId({ marketId }) !== undefined,
|
|
235
|
-
reduceOnly: true,
|
|
236
|
-
};
|
|
237
|
-
};
|
|
238
40
|
this.vaultId = vaultId;
|
|
239
41
|
}
|
|
240
42
|
// =========================================================================
|
|
@@ -473,22 +275,41 @@ class PerpetualsAccount extends caller_1.Caller {
|
|
|
473
275
|
});
|
|
474
276
|
});
|
|
475
277
|
}
|
|
476
|
-
getReduceOrderTx(inputs
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
278
|
+
// public async getReduceOrderTx(inputs: {
|
|
279
|
+
// tx?: Transaction;
|
|
280
|
+
// collateralChange: number;
|
|
281
|
+
// marketId: PerpetualsMarketId;
|
|
282
|
+
// orderId: PerpetualsOrderId;
|
|
283
|
+
// sizeToSubtract: bigint;
|
|
284
|
+
// leverage?: number;
|
|
285
|
+
// }) {
|
|
286
|
+
// const { tx, ...otherInputs } = inputs;
|
|
287
|
+
// return this.fetchApiTxObject<
|
|
288
|
+
// ApiPerpetualsReduceOrderBody,
|
|
289
|
+
// ApiTransactionResponse
|
|
290
|
+
// >(
|
|
291
|
+
// `${this.vaultId ? "vault" : "account"}/` +
|
|
292
|
+
// "transactions/reduce-order",
|
|
293
|
+
// {
|
|
294
|
+
// ...otherInputs,
|
|
295
|
+
// txKind: await this.Provider?.Transactions().fetchBase64TxKindFromTx(
|
|
296
|
+
// { tx }
|
|
297
|
+
// ),
|
|
298
|
+
// walletAddress: this.ownerAddress(),
|
|
299
|
+
// ...("vaultId" in this.accountCap
|
|
300
|
+
// ? {
|
|
301
|
+
// vaultId: this.accountCap.vaultId,
|
|
302
|
+
// }
|
|
303
|
+
// : {
|
|
304
|
+
// accountId: this.accountCap.accountId,
|
|
305
|
+
// }),
|
|
306
|
+
// },
|
|
307
|
+
// undefined,
|
|
308
|
+
// {
|
|
309
|
+
// txKind: true,
|
|
310
|
+
// }
|
|
311
|
+
// );
|
|
312
|
+
// }
|
|
492
313
|
getSetLeverageTx(inputs) {
|
|
493
314
|
return __awaiter(this, void 0, void 0, function* () {
|
|
494
315
|
var _a;
|
|
@@ -510,11 +331,18 @@ class PerpetualsAccount extends caller_1.Caller {
|
|
|
510
331
|
// =========================================================================
|
|
511
332
|
// Position Txs
|
|
512
333
|
// =========================================================================
|
|
513
|
-
getClosePositionTx(inputs
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
334
|
+
// public async getClosePositionTx(inputs: {
|
|
335
|
+
// size: bigint;
|
|
336
|
+
// market: PerpetualsMarket;
|
|
337
|
+
// orderDatas: PerpetualsOrderData[];
|
|
338
|
+
// indexPrice: number;
|
|
339
|
+
// collateralPrice: number;
|
|
340
|
+
// }) {
|
|
341
|
+
// throw new Error("TODO");
|
|
342
|
+
// // return this.getPlaceMarketOrderTx({
|
|
343
|
+
// // ...this.closePositionTxInputs(inputs),
|
|
344
|
+
// // });
|
|
345
|
+
// }
|
|
518
346
|
// =========================================================================
|
|
519
347
|
// Interactions
|
|
520
348
|
// =========================================================================
|
|
@@ -563,25 +391,25 @@ class PerpetualsAccount extends caller_1.Caller {
|
|
|
563
391
|
getPlaceMarketOrderPreview(inputs, abortSignal) {
|
|
564
392
|
return __awaiter(this, void 0, void 0, function* () {
|
|
565
393
|
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` +
|
|
566
|
-
"previews/place-market-order", Object.assign(Object.assign(
|
|
394
|
+
"previews/place-market-order", Object.assign(Object.assign({}, inputs), ("vaultId" in this.accountCap
|
|
567
395
|
? {
|
|
568
396
|
vaultId: this.accountCap.vaultId,
|
|
569
397
|
}
|
|
570
398
|
: {
|
|
571
399
|
accountId: this.accountCap.accountId,
|
|
572
|
-
})),
|
|
400
|
+
})), abortSignal);
|
|
573
401
|
});
|
|
574
402
|
}
|
|
575
403
|
getPlaceLimitOrderPreview(inputs, abortSignal) {
|
|
576
404
|
return __awaiter(this, void 0, void 0, function* () {
|
|
577
405
|
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` +
|
|
578
|
-
"previews/place-limit-order", Object.assign(Object.assign(
|
|
406
|
+
"previews/place-limit-order", Object.assign(Object.assign({}, inputs), ("vaultId" in this.accountCap
|
|
579
407
|
? {
|
|
580
408
|
vaultId: this.accountCap.vaultId,
|
|
581
409
|
}
|
|
582
410
|
: {
|
|
583
411
|
accountId: this.accountCap.accountId,
|
|
584
|
-
})),
|
|
412
|
+
})), abortSignal);
|
|
585
413
|
});
|
|
586
414
|
}
|
|
587
415
|
getCancelOrdersPreview(inputs, abortSignal) {
|
|
@@ -592,39 +420,99 @@ class PerpetualsAccount extends caller_1.Caller {
|
|
|
592
420
|
collateralChange: 0,
|
|
593
421
|
marketIdsToPositionAfterCancelOrders: {},
|
|
594
422
|
};
|
|
595
|
-
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` + "previews/cancel-orders", Object.assign(Object.assign(
|
|
423
|
+
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` + "previews/cancel-orders", Object.assign(Object.assign({}, inputs), ("vaultId" in this.accountCap
|
|
596
424
|
? {
|
|
597
425
|
vaultId: this.accountCap.vaultId,
|
|
598
426
|
}
|
|
599
427
|
: {
|
|
600
428
|
accountId: this.accountCap.accountId,
|
|
601
|
-
})),
|
|
602
|
-
});
|
|
603
|
-
}
|
|
604
|
-
getReduceOrderPreview(inputs, abortSignal) {
|
|
605
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
606
|
-
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` + "previews/reduce-order", Object.assign(Object.assign(Object.assign({}, inputs), ("vaultId" in this.accountCap
|
|
607
|
-
? {
|
|
608
|
-
vaultId: this.accountCap.vaultId,
|
|
609
|
-
}
|
|
610
|
-
: {
|
|
611
|
-
accountId: this.accountCap.accountId,
|
|
612
|
-
})), { collateralCoinType: this.accountCap.collateralCoinType }), abortSignal);
|
|
429
|
+
})), abortSignal);
|
|
613
430
|
});
|
|
614
431
|
}
|
|
432
|
+
// public async getReduceOrderPreview(
|
|
433
|
+
// inputs: {
|
|
434
|
+
// marketId: PerpetualsMarketId;
|
|
435
|
+
// orderId: PerpetualsOrderId;
|
|
436
|
+
// sizeToSubtract: bigint;
|
|
437
|
+
// leverage?: number;
|
|
438
|
+
// },
|
|
439
|
+
// abortSignal?: AbortSignal
|
|
440
|
+
// ): Promise<
|
|
441
|
+
// | {
|
|
442
|
+
// positionAfterReduceOrder: PerpetualsPosition;
|
|
443
|
+
// collateralChange: number;
|
|
444
|
+
// }
|
|
445
|
+
// | {
|
|
446
|
+
// error: string;
|
|
447
|
+
// }
|
|
448
|
+
// > {
|
|
449
|
+
// return this.fetchApi<
|
|
450
|
+
// ApiPerpetualsPreviewReduceOrderResponse,
|
|
451
|
+
// ApiPerpetualsPreviewReduceOrderBody
|
|
452
|
+
// >(
|
|
453
|
+
// `${this.vaultId ? "vault" : "account"}/` + "previews/reduce-order",
|
|
454
|
+
// {
|
|
455
|
+
// ...inputs,
|
|
456
|
+
// ...("vaultId" in this.accountCap
|
|
457
|
+
// ? {
|
|
458
|
+
// vaultId: this.accountCap.vaultId,
|
|
459
|
+
// }
|
|
460
|
+
// : {
|
|
461
|
+
// accountId: this.accountCap.accountId,
|
|
462
|
+
// }),
|
|
463
|
+
// },
|
|
464
|
+
// abortSignal
|
|
465
|
+
// );
|
|
466
|
+
// }
|
|
615
467
|
getSetLeveragePreview(inputs, abortSignal) {
|
|
616
468
|
return __awaiter(this, void 0, void 0, function* () {
|
|
617
469
|
const { marketId, leverage } = inputs;
|
|
618
|
-
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` + "previews/set-leverage", Object.assign(
|
|
470
|
+
return this.fetchApi(`${this.vaultId ? "vault" : "account"}/` + "previews/set-leverage", Object.assign({ marketId,
|
|
619
471
|
leverage }, ("vaultId" in this.accountCap
|
|
620
472
|
? {
|
|
621
473
|
vaultId: this.accountCap.vaultId,
|
|
622
474
|
}
|
|
623
475
|
: {
|
|
624
476
|
accountId: this.accountCap.accountId,
|
|
625
|
-
})),
|
|
477
|
+
})), abortSignal);
|
|
626
478
|
});
|
|
627
479
|
}
|
|
480
|
+
// public getPlaceClosePositionOrderPreview = async (
|
|
481
|
+
// inputs: {
|
|
482
|
+
// size: bigint;
|
|
483
|
+
// marketId: PerpetualsMarketId;
|
|
484
|
+
// leverage?: number;
|
|
485
|
+
// } & (
|
|
486
|
+
// | {
|
|
487
|
+
// accountId: PerpetualsAccountId;
|
|
488
|
+
// }
|
|
489
|
+
// | {
|
|
490
|
+
// vaultId: ObjectId;
|
|
491
|
+
// }
|
|
492
|
+
// ),
|
|
493
|
+
// abortSignal?: AbortSignal
|
|
494
|
+
// ): Promise<ReturnType<PerpetualsAccount["getPlaceMarketOrderPreview"]>> => {
|
|
495
|
+
// // TODO: make this fetch instead ?
|
|
496
|
+
// const position = this.positionForMarketId({
|
|
497
|
+
// marketId: inputs.marketId,
|
|
498
|
+
// });
|
|
499
|
+
// if (!position)
|
|
500
|
+
// throw new Error(
|
|
501
|
+
// `Account has no position for market id: ${inputs.marketId}`
|
|
502
|
+
// );
|
|
503
|
+
// return this.getPlaceMarketOrderPreview(
|
|
504
|
+
// {
|
|
505
|
+
// ...inputs,
|
|
506
|
+
// reduceOnly: true,
|
|
507
|
+
// side:
|
|
508
|
+
// Perpetuals.positionSide(position) ===
|
|
509
|
+
// PerpetualsOrderSide.Ask
|
|
510
|
+
// ? PerpetualsOrderSide.Bid
|
|
511
|
+
// : PerpetualsOrderSide.Ask,
|
|
512
|
+
// },
|
|
513
|
+
// abortSignal
|
|
514
|
+
// );
|
|
515
|
+
// };
|
|
628
516
|
getOrderDatas() {
|
|
629
517
|
return __awaiter(this, void 0, void 0, function* () {
|
|
630
518
|
const orderDatas = this.account.positions.reduce((acc, position) => [
|
|
@@ -672,6 +560,14 @@ class PerpetualsAccount extends caller_1.Caller {
|
|
|
672
560
|
});
|
|
673
561
|
});
|
|
674
562
|
}
|
|
563
|
+
// public async getOwnedWithdrawRequests() {
|
|
564
|
+
// return new Perpetuals(
|
|
565
|
+
// this.config,
|
|
566
|
+
// this.Provider
|
|
567
|
+
// ).getOwnedWithdrawRequests({
|
|
568
|
+
// walletAddress: this.ownerAddress(),
|
|
569
|
+
// });
|
|
570
|
+
// }
|
|
675
571
|
// =========================================================================
|
|
676
572
|
// Helpers
|
|
677
573
|
// =========================================================================
|
|
@@ -53,9 +53,7 @@ export declare class PerpetualsMarket extends Caller {
|
|
|
53
53
|
}>;
|
|
54
54
|
timeUntilNextFundingMs: () => Timestamp;
|
|
55
55
|
nextFundingTimeMs: () => Timestamp;
|
|
56
|
-
estimatedFundingRate: (
|
|
57
|
-
indexPrice: number;
|
|
58
|
-
}) => number;
|
|
56
|
+
estimatedFundingRate: () => Percentage;
|
|
59
57
|
calcCollateralUsedForOrder: (inputs: {
|
|
60
58
|
leverage: number;
|
|
61
59
|
orderData: PerpetualsOrderData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perpetualsMarket.d.ts","sourceRoot":"","sources":["../../../src/packages/perpetuals/perpetualsMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAIN,QAAQ,EAKR,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EAGnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAElB,SAAS,EAET,oBAAoB,EAKpB,qBAAqB,EACrB,gCAAgC,EAChC,YAAY,EACZ,UAAU,EAEV,yBAAyB,EAEzB,yCAAyC,EAEzC,0CAA0C,EAC1C,mBAAmB,EACnB,MAAM,aAAa,CAAC;AAIrB,qBAAa,gBAAiB,SAAQ,MAAM;IAiBnC,UAAU,EAAE,oBAAoB;IAZxC,SAAgB,QAAQ,EAAE,kBAAkB,CAAC;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,eAAe,EAAE,MAAM,CAAC;IACxC,SAAgB,kBAAkB,EAAE,QAAQ,CAAC;IAC7C,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IACrD,SAAgB,WAAW,EAAE,qBAAqB,CAAC;gBAO3C,UAAU,EAAE,oBAAoB,EACvC,MAAM,CAAC,EAAE,YAAY;IAiBf,oBAAoB;IAWd,YAAY,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAOlD,YAAY;IAwBlB,eAAe,GAAU,QAAQ;QACvC,SAAS,EAAE,mBAAmB,CAAC;QAC/B,IAAI,EAAE,mBAAmB,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf;sBAIgB,MAAM;OAUrB;IAEW,0BAA0B,CACtC,MAAM,EAAE,0CAA0C,EAClD,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CACP;QACA,KAAK,EAAE,MAAM,CAAC;KACb,GACD;QACA,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,UAAU,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACtB,CACH;
|
|
1
|
+
{"version":3,"file":"perpetualsMarket.d.ts","sourceRoot":"","sources":["../../../src/packages/perpetuals/perpetualsMarket.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,22 +40,16 @@ class PerpetualsMarket extends caller_1.Caller {
|
|
|
40
40
|
return this.nextFundingTimeMs() - Date.now();
|
|
41
41
|
};
|
|
42
42
|
this.nextFundingTimeMs = () => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
return this.marketData.nextFundingTimestampMs >
|
|
44
|
+
BigInt(Number.MAX_SAFE_INTEGER)
|
|
45
|
+
? Number.MAX_SAFE_INTEGER
|
|
46
|
+
: Number(this.marketData.nextFundingTimestampMs);
|
|
46
47
|
};
|
|
47
48
|
// The funding rate as the difference between book and index TWAPs relative to the index price,
|
|
48
49
|
// scaled by the funding period adjustment:
|
|
49
50
|
// (bookTwap - indexTwap) / indexPrice * (fundingFrequency / fundingPeriod)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.estimatedFundingRate = (inputs) => {
|
|
53
|
-
const { indexPrice } = inputs;
|
|
54
|
-
const premiumTwap = this.marketState.premiumTwap;
|
|
55
|
-
const relativePremium = premiumTwap / indexPrice;
|
|
56
|
-
const periodAdjustment = Number(this.marketParams.fundingFrequencyMs) /
|
|
57
|
-
Number(this.marketParams.fundingPeriodMs);
|
|
58
|
-
return relativePremium * periodAdjustment;
|
|
51
|
+
this.estimatedFundingRate = () => {
|
|
52
|
+
return this.marketData.estimatedFundingRate;
|
|
59
53
|
};
|
|
60
54
|
this.calcCollateralUsedForOrder = (inputs) => {
|
|
61
55
|
const { leverage, orderData, indexPrice, collateralPrice } = inputs;
|
|
@@ -117,8 +111,9 @@ class PerpetualsMarket extends caller_1.Caller {
|
|
|
117
111
|
this.emptyPosition = () => {
|
|
118
112
|
return {
|
|
119
113
|
marketId: this.marketId,
|
|
120
|
-
collateralCoinType: this.marketData.collateralCoinType,
|
|
114
|
+
// collateralCoinType: this.marketData.collateralCoinType,
|
|
121
115
|
collateral: 0,
|
|
116
|
+
collateralUsd: 0,
|
|
122
117
|
baseAssetAmount: 0,
|
|
123
118
|
quoteAssetNotionalAmount: 0,
|
|
124
119
|
cumFundingRateLong: this.marketData.marketState.cumFundingRateLong,
|
|
@@ -129,6 +124,13 @@ class PerpetualsMarket extends caller_1.Caller {
|
|
|
129
124
|
makerFee: 1, // 100%
|
|
130
125
|
takerFee: 1, // 100%
|
|
131
126
|
leverage: 1,
|
|
127
|
+
entryPrice: 0,
|
|
128
|
+
freeCollateral: 0,
|
|
129
|
+
freeMarginUsd: 0,
|
|
130
|
+
liquidationPrice: 0,
|
|
131
|
+
marginRatio: 1,
|
|
132
|
+
unrealizedFundingsUsd: 0,
|
|
133
|
+
unrealizedPnlUsd: 0,
|
|
132
134
|
};
|
|
133
135
|
};
|
|
134
136
|
this.marketId = marketData.objectId;
|
|
@@ -169,12 +171,12 @@ class PerpetualsMarket extends caller_1.Caller {
|
|
|
169
171
|
}
|
|
170
172
|
getPlaceMarketOrderPreview(inputs, abortSignal) {
|
|
171
173
|
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
-
return this.fetchApi("account/previews/place-market-order", Object.assign(Object.assign({}, inputs), {
|
|
174
|
+
return this.fetchApi("account/previews/place-market-order", Object.assign(Object.assign({}, inputs), { accountId: undefined }), abortSignal);
|
|
173
175
|
});
|
|
174
176
|
}
|
|
175
177
|
getPlaceLimitOrderPreview(inputs, abortSignal) {
|
|
176
178
|
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
-
return this.fetchApi("account/previews/place-limit-order", Object.assign(Object.assign({}, inputs), {
|
|
179
|
+
return this.fetchApi("account/previews/place-limit-order", Object.assign(Object.assign({}, inputs), { accountId: undefined }), abortSignal);
|
|
178
180
|
});
|
|
179
181
|
}
|
|
180
182
|
// =========================================================================
|