aftermath-ts-sdk 1.2.52 → 1.2.53
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/types/configTypes.d.ts +1 -0
- package/dist/general/types/configTypes.d.ts.map +1 -1
- package/dist/general/utils/caller.d.ts +1 -1
- package/dist/general/utils/caller.d.ts.map +1 -1
- package/dist/general/utils/caller.js +13 -3
- package/dist/general/utils/casting.d.ts +2 -0
- package/dist/general/utils/casting.d.ts.map +1 -1
- package/dist/general/utils/casting.js +2 -0
- package/dist/packages/farms/farms.d.ts +13 -10
- package/dist/packages/farms/farms.d.ts.map +1 -1
- package/dist/packages/farms/farms.js +17 -43
- package/dist/packages/farms/farmsStakedPosition.js +1 -1
- package/dist/packages/farms/farmsStakingPool.d.ts +2 -0
- package/dist/packages/farms/farmsStakingPool.d.ts.map +1 -1
- package/dist/packages/farms/farmsStakingPool.js +21 -3
- package/dist/packages/farms/farmsTypes.d.ts +8 -0
- package/dist/packages/farms/farmsTypes.d.ts.map +1 -1
- package/dist/packages/farms/farmsTypes.js +29 -0
- package/dist/packages/oracle/api/oracleApi.d.ts +9 -1
- package/dist/packages/oracle/api/oracleApi.d.ts.map +1 -1
- package/dist/packages/oracle/api/oracleApi.js +41 -0
- package/dist/packages/oracle/api/oracleApiCasting.d.ts +6 -0
- package/dist/packages/oracle/api/oracleApiCasting.d.ts.map +1 -0
- package/dist/packages/oracle/api/oracleApiCasting.js +25 -0
- package/dist/packages/oracle/oracle.js +1 -1
- package/dist/packages/oracle/oracleCastingTypes.d.ts +11 -0
- package/dist/packages/oracle/oracleCastingTypes.d.ts.map +1 -0
- package/dist/packages/oracle/oracleCastingTypes.js +2 -0
- package/dist/packages/oracle/oracleTypes.d.ts +9 -1
- package/dist/packages/oracle/oracleTypes.d.ts.map +1 -1
- package/dist/packages/perpetuals/api/perpetualsApi.d.ts +34 -10
- package/dist/packages/perpetuals/api/perpetualsApi.d.ts.map +1 -1
- package/dist/packages/perpetuals/api/perpetualsApi.js +499 -100
- package/dist/packages/perpetuals/api/perpetualsApiCasting.d.ts +6 -2
- package/dist/packages/perpetuals/api/perpetualsApiCasting.d.ts.map +1 -1
- package/dist/packages/perpetuals/api/perpetualsApiCasting.js +89 -6
- package/dist/packages/perpetuals/perpetualsAccount.d.ts +43 -4
- package/dist/packages/perpetuals/perpetualsAccount.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetualsAccount.js +63 -15
- package/dist/packages/perpetuals/perpetualsCastingTypes.d.ts +52 -2
- package/dist/packages/perpetuals/perpetualsCastingTypes.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetualsMarket.d.ts +5 -7
- package/dist/packages/perpetuals/perpetualsMarket.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetualsMarket.js +12 -66
- package/dist/packages/perpetuals/perpetualsTypes.d.ts +117 -199
- package/dist/packages/perpetuals/perpetualsTypes.d.ts.map +1 -1
- package/dist/packages/perpetuals/perpetualsTypes.js +26 -43
- package/dist/packages/pools/api/poolsApiCasting.d.ts.map +1 -1
- package/dist/packages/pools/api/poolsApiCasting.js +0 -1
- package/dist/packages/pools/pool.d.ts +7 -22
- package/dist/packages/pools/pool.d.ts.map +1 -1
- package/dist/packages/pools/pool.js +16 -30
- package/dist/packages/pools/pools.d.ts +7 -1
- package/dist/packages/pools/pools.d.ts.map +1 -1
- package/dist/packages/pools/pools.js +17 -2
- package/dist/packages/router/api/routerApi.d.ts +2 -2
- package/dist/packages/router/api/routerApi.d.ts.map +1 -1
- package/dist/packages/router/api/routerApi.js +19 -11
- package/dist/packages/router/router.d.ts +1 -1
- package/dist/packages/router/router.d.ts.map +1 -1
- package/dist/packages/router/router.js +2 -2
- package/dist/packages/router/routerTypes.d.ts +3 -2
- package/dist/packages/router/routerTypes.d.ts.map +1 -1
- package/dist/packages/staking/staking.d.ts +4 -1
- package/dist/packages/staking/staking.d.ts.map +1 -1
- package/dist/packages/staking/staking.js +5 -0
- package/dist/packages/staking/stakingTypes.d.ts +5 -0
- package/dist/packages/staking/stakingTypes.d.ts.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/package.json +1 -1
|
@@ -24,8 +24,6 @@ exports.PerpetualsApi = void 0;
|
|
|
24
24
|
const transactions_1 = require("@mysten/sui/transactions");
|
|
25
25
|
const utils_1 = require("../../../general/utils");
|
|
26
26
|
const sui_1 = require("../../sui");
|
|
27
|
-
const perpetualsTypes_1 = require("../perpetualsTypes");
|
|
28
|
-
const perpetuals_1 = require("../perpetuals");
|
|
29
27
|
const eventsApiHelpers_1 = require("../../../general/apiHelpers/eventsApiHelpers");
|
|
30
28
|
const transactionsApiHelpers_1 = require("../../../general/apiHelpers/transactionsApiHelpers");
|
|
31
29
|
const bcs_1 = require("@mysten/sui/bcs");
|
|
@@ -58,7 +56,7 @@ class PerpetualsApi {
|
|
|
58
56
|
this.allocateCollateralTx = (inputs) => {
|
|
59
57
|
const { tx, collateralCoinType, accountCapId, marketId, amount } = inputs;
|
|
60
58
|
return tx.moveCall({
|
|
61
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
59
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "allocate_collateral"),
|
|
62
60
|
typeArguments: [collateralCoinType],
|
|
63
61
|
arguments: [
|
|
64
62
|
tx.sharedObjectRef({
|
|
@@ -76,7 +74,7 @@ class PerpetualsApi {
|
|
|
76
74
|
this.deallocateCollateralTx = (inputs) => {
|
|
77
75
|
const { tx, collateralCoinType, accountCapId, marketId, amount } = inputs;
|
|
78
76
|
return tx.moveCall({
|
|
79
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
77
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "deallocate_collateral"),
|
|
80
78
|
typeArguments: [collateralCoinType],
|
|
81
79
|
arguments: [
|
|
82
80
|
tx.sharedObjectRef({
|
|
@@ -95,7 +93,7 @@ class PerpetualsApi {
|
|
|
95
93
|
this.createMarketPositionTx = (inputs) => {
|
|
96
94
|
const { tx, collateralCoinType, accountCapId, marketId } = inputs;
|
|
97
95
|
return tx.moveCall({
|
|
98
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
96
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "create_market_position"),
|
|
99
97
|
typeArguments: [collateralCoinType],
|
|
100
98
|
arguments: [
|
|
101
99
|
tx.sharedObjectRef({
|
|
@@ -112,7 +110,7 @@ class PerpetualsApi {
|
|
|
112
110
|
this.shareClearingHouseTx = (inputs) => {
|
|
113
111
|
const { tx, collateralCoinType, marketId } = inputs;
|
|
114
112
|
return tx.moveCall({
|
|
115
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
113
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "share_clearing_house"),
|
|
116
114
|
typeArguments: [collateralCoinType],
|
|
117
115
|
arguments: [
|
|
118
116
|
typeof marketId === "string" ? tx.object(marketId) : marketId,
|
|
@@ -122,7 +120,7 @@ class PerpetualsApi {
|
|
|
122
120
|
this.startSessionTx = (inputs) => {
|
|
123
121
|
const { tx, collateralCoinType, accountCapId, marketId } = inputs;
|
|
124
122
|
return tx.moveCall({
|
|
125
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
123
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "start_session"),
|
|
126
124
|
typeArguments: [collateralCoinType],
|
|
127
125
|
arguments: [
|
|
128
126
|
tx.sharedObjectRef({
|
|
@@ -142,7 +140,7 @@ class PerpetualsApi {
|
|
|
142
140
|
this.endSessionTx = (inputs) => {
|
|
143
141
|
const { tx, collateralCoinType, sessionPotatoId } = inputs;
|
|
144
142
|
return tx.moveCall({
|
|
145
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
143
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "end_session"),
|
|
146
144
|
typeArguments: [collateralCoinType],
|
|
147
145
|
arguments: [
|
|
148
146
|
typeof sessionPotatoId === "string"
|
|
@@ -154,7 +152,7 @@ class PerpetualsApi {
|
|
|
154
152
|
this.placeMarketOrderTx = (inputs) => {
|
|
155
153
|
const { tx, collateralCoinType, sessionPotatoId, side, size } = inputs;
|
|
156
154
|
return tx.moveCall({
|
|
157
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
155
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "place_market_order"),
|
|
158
156
|
typeArguments: [collateralCoinType],
|
|
159
157
|
arguments: [
|
|
160
158
|
typeof sessionPotatoId === "string"
|
|
@@ -168,7 +166,7 @@ class PerpetualsApi {
|
|
|
168
166
|
this.placeLimitOrderTx = (inputs) => {
|
|
169
167
|
const { tx, collateralCoinType, sessionPotatoId, side, size, price, orderType, } = inputs;
|
|
170
168
|
return tx.moveCall({
|
|
171
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
169
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "place_limit_order"),
|
|
172
170
|
typeArguments: [collateralCoinType],
|
|
173
171
|
arguments: [
|
|
174
172
|
typeof sessionPotatoId === "string"
|
|
@@ -184,7 +182,7 @@ class PerpetualsApi {
|
|
|
184
182
|
this.cancelOrdersTx = (inputs) => {
|
|
185
183
|
const { tx, collateralCoinType, accountCapId, marketId, orderIds } = inputs;
|
|
186
184
|
return tx.moveCall({
|
|
187
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
185
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "cancel_orders"),
|
|
188
186
|
typeArguments: [collateralCoinType],
|
|
189
187
|
arguments: [
|
|
190
188
|
tx.sharedObjectRef({
|
|
@@ -197,6 +195,23 @@ class PerpetualsApi {
|
|
|
197
195
|
],
|
|
198
196
|
});
|
|
199
197
|
};
|
|
198
|
+
this.reduceOrdersTx = (inputs) => {
|
|
199
|
+
const { tx, packageId, collateralCoinType, accountCapId, marketId, orderIds, sizesToSubtract, } = inputs;
|
|
200
|
+
return tx.moveCall({
|
|
201
|
+
target: utils_1.Helpers.transactions.createTxTarget(packageId, PerpetualsApi.constants.moduleNames.interface, "reduce_orders"),
|
|
202
|
+
typeArguments: [collateralCoinType],
|
|
203
|
+
arguments: [
|
|
204
|
+
tx.sharedObjectRef({
|
|
205
|
+
objectId: marketId,
|
|
206
|
+
initialSharedVersion: inputs.marketInitialSharedVersion,
|
|
207
|
+
mutable: true,
|
|
208
|
+
}),
|
|
209
|
+
tx.object(accountCapId),
|
|
210
|
+
tx.pure(bcs_1.bcs.vector(bcs_1.bcs.u128()).serialize(orderIds)),
|
|
211
|
+
tx.pure(bcs_1.bcs.vector(bcs_1.bcs.u64()).serialize(sizesToSubtract)),
|
|
212
|
+
],
|
|
213
|
+
});
|
|
214
|
+
};
|
|
200
215
|
this.withdrawCollateralTx = (inputs) => {
|
|
201
216
|
const { tx, collateralCoinType, accountCapId, amount } = inputs;
|
|
202
217
|
return tx.moveCall({
|
|
@@ -250,7 +265,7 @@ class PerpetualsApi {
|
|
|
250
265
|
// const { tx, collateralCoinType, sessionPotatoId } = inputs;
|
|
251
266
|
// return tx.moveCall({
|
|
252
267
|
// target: Helpers.transactions.createTxTarget(
|
|
253
|
-
//
|
|
268
|
+
// inputs.packageId,
|
|
254
269
|
// PerpetualsApi.constants.moduleNames.clearingHouse,
|
|
255
270
|
// "get_hot_potato_fields"
|
|
256
271
|
// ),
|
|
@@ -311,7 +326,7 @@ class PerpetualsApi {
|
|
|
311
326
|
this.getPositionTx = (inputs) => {
|
|
312
327
|
const { tx, marketId, collateralCoinType } = inputs;
|
|
313
328
|
return tx.moveCall({
|
|
314
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
329
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_position"),
|
|
315
330
|
typeArguments: [collateralCoinType],
|
|
316
331
|
arguments: [
|
|
317
332
|
tx.sharedObjectRef({
|
|
@@ -326,7 +341,7 @@ class PerpetualsApi {
|
|
|
326
341
|
this.getOrderbookTx = (inputs) => {
|
|
327
342
|
const { tx, collateralCoinType } = inputs;
|
|
328
343
|
return tx.moveCall({
|
|
329
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
344
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_orderbook"),
|
|
330
345
|
typeArguments: [collateralCoinType],
|
|
331
346
|
arguments: [tx.object(inputs.marketId)],
|
|
332
347
|
});
|
|
@@ -334,7 +349,7 @@ class PerpetualsApi {
|
|
|
334
349
|
this.getBookPriceTx = (inputs) => {
|
|
335
350
|
const { tx, marketId, collateralCoinType } = inputs;
|
|
336
351
|
return tx.moveCall({
|
|
337
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
352
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_book_price"),
|
|
338
353
|
typeArguments: [collateralCoinType],
|
|
339
354
|
arguments: [
|
|
340
355
|
tx.object(marketId),
|
|
@@ -349,7 +364,7 @@ class PerpetualsApi {
|
|
|
349
364
|
this.getBestPriceTx = (inputs) => {
|
|
350
365
|
const { tx, marketId, collateralCoinType } = inputs;
|
|
351
366
|
return tx.moveCall({
|
|
352
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
367
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_best_price"),
|
|
353
368
|
typeArguments: [collateralCoinType],
|
|
354
369
|
arguments: [
|
|
355
370
|
tx.sharedObjectRef({
|
|
@@ -364,7 +379,7 @@ class PerpetualsApi {
|
|
|
364
379
|
this.inspectOrdersTx = (inputs) => {
|
|
365
380
|
const { tx, orderbookId } = inputs;
|
|
366
381
|
return tx.moveCall({
|
|
367
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
382
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.orderbook, "inspect_orders"),
|
|
368
383
|
typeArguments: [],
|
|
369
384
|
arguments: [
|
|
370
385
|
typeof orderbookId === "string"
|
|
@@ -379,7 +394,7 @@ class PerpetualsApi {
|
|
|
379
394
|
this.getOrderSizeTx = (inputs) => {
|
|
380
395
|
const { tx, orderbookId } = inputs;
|
|
381
396
|
return tx.moveCall({
|
|
382
|
-
target: utils_1.Helpers.transactions.createTxTarget(
|
|
397
|
+
target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.orderbook, "get_order_size"),
|
|
383
398
|
typeArguments: [],
|
|
384
399
|
arguments: [
|
|
385
400
|
typeof orderbookId === "string"
|
|
@@ -407,13 +422,14 @@ class PerpetualsApi {
|
|
|
407
422
|
return tx;
|
|
408
423
|
});
|
|
409
424
|
this.buildCancelOrderTx = (inputs) => {
|
|
410
|
-
const { orderId, marketId, marketInitialSharedVersion,
|
|
425
|
+
const { packageId, orderId, marketId, marketInitialSharedVersion, collateralChange, basePriceFeedId, collateralPriceFeedId } = inputs, otherInputs = __rest(inputs, ["packageId", "orderId", "marketId", "marketInitialSharedVersion", "collateralChange", "basePriceFeedId", "collateralPriceFeedId"]);
|
|
411
426
|
return this.buildCancelOrdersTx(Object.assign(Object.assign({}, otherInputs), { orderDatas: [
|
|
412
427
|
{
|
|
428
|
+
packageId,
|
|
413
429
|
orderId,
|
|
414
430
|
marketId,
|
|
415
431
|
marketInitialSharedVersion,
|
|
416
|
-
|
|
432
|
+
collateralChange,
|
|
417
433
|
basePriceFeedId,
|
|
418
434
|
collateralPriceFeedId,
|
|
419
435
|
},
|
|
@@ -435,25 +451,44 @@ class PerpetualsApi {
|
|
|
435
451
|
if (orders.length <= 0)
|
|
436
452
|
continue;
|
|
437
453
|
const marketInitialSharedVersion = orders[0].marketInitialSharedVersion;
|
|
454
|
+
const packageId = orders[0].packageId;
|
|
438
455
|
this.cancelOrdersTx({
|
|
439
456
|
tx,
|
|
440
457
|
collateralCoinType,
|
|
441
458
|
accountCapId,
|
|
442
459
|
marketId,
|
|
443
460
|
marketInitialSharedVersion,
|
|
461
|
+
packageId,
|
|
444
462
|
orderIds: orders.map((order) => order.orderId),
|
|
445
463
|
});
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
464
|
+
const netCollateralChange = utils_1.Helpers.sumBigInt(orders.map((order) => order.collateralChange));
|
|
465
|
+
if (netCollateralChange < BigInt(0)) {
|
|
466
|
+
this.deallocateCollateralTx({
|
|
467
|
+
tx,
|
|
468
|
+
accountCapId,
|
|
469
|
+
collateralCoinType,
|
|
470
|
+
marketId,
|
|
471
|
+
marketInitialSharedVersion,
|
|
472
|
+
packageId,
|
|
473
|
+
amount: utils_1.Helpers.absBigInt(netCollateralChange),
|
|
474
|
+
basePriceFeedId: orders[0].basePriceFeedId,
|
|
475
|
+
collateralPriceFeedId: orders[0].collateralPriceFeedId,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
else if (netCollateralChange > BigInt(0)) {
|
|
479
|
+
this.allocateCollateralTx({
|
|
480
|
+
tx,
|
|
481
|
+
accountCapId,
|
|
482
|
+
collateralCoinType,
|
|
483
|
+
marketId,
|
|
484
|
+
marketInitialSharedVersion,
|
|
485
|
+
packageId,
|
|
486
|
+
amount: netCollateralChange,
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
// no collateral change
|
|
491
|
+
}
|
|
457
492
|
}
|
|
458
493
|
return tx;
|
|
459
494
|
};
|
|
@@ -499,17 +534,441 @@ class PerpetualsApi {
|
|
|
499
534
|
});
|
|
500
535
|
return tx;
|
|
501
536
|
};
|
|
502
|
-
// TODO: add to sdk
|
|
503
537
|
this.buildAllocateCollateralTx = transactionsApiHelpers_1.TransactionsApiHelpers.createBuildTxFunc(this.allocateCollateralTx);
|
|
504
|
-
// TODO: add to sdk
|
|
505
538
|
this.buildDeallocateCollateralTx = transactionsApiHelpers_1.TransactionsApiHelpers.createBuildTxFunc(this.deallocateCollateralTx);
|
|
539
|
+
this.buildReduceOrdersTx = (inputs) => {
|
|
540
|
+
const { walletAddress, collateralChange, accountCapId, collateralCoinType, marketId, marketInitialSharedVersion, packageId, basePriceFeedId, collateralPriceFeedId, orderIds, sizesToSubtract, } = inputs;
|
|
541
|
+
const tx = new transactions_1.Transaction();
|
|
542
|
+
tx.setSender(walletAddress);
|
|
543
|
+
this.reduceOrdersTx({
|
|
544
|
+
tx,
|
|
545
|
+
packageId,
|
|
546
|
+
collateralCoinType,
|
|
547
|
+
accountCapId,
|
|
548
|
+
marketId,
|
|
549
|
+
marketInitialSharedVersion,
|
|
550
|
+
orderIds,
|
|
551
|
+
sizesToSubtract,
|
|
552
|
+
});
|
|
553
|
+
if (collateralChange < BigInt(0)) {
|
|
554
|
+
this.deallocateCollateralTx({
|
|
555
|
+
tx,
|
|
556
|
+
accountCapId,
|
|
557
|
+
collateralCoinType,
|
|
558
|
+
marketId,
|
|
559
|
+
marketInitialSharedVersion,
|
|
560
|
+
packageId,
|
|
561
|
+
basePriceFeedId,
|
|
562
|
+
collateralPriceFeedId,
|
|
563
|
+
amount: utils_1.Helpers.absBigInt(collateralChange),
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
else if (collateralChange > BigInt(0)) {
|
|
567
|
+
this.allocateCollateralTx({
|
|
568
|
+
tx,
|
|
569
|
+
accountCapId,
|
|
570
|
+
collateralCoinType,
|
|
571
|
+
marketId,
|
|
572
|
+
marketInitialSharedVersion,
|
|
573
|
+
packageId,
|
|
574
|
+
amount: collateralChange,
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
// no collateral change
|
|
579
|
+
}
|
|
580
|
+
return tx;
|
|
581
|
+
};
|
|
506
582
|
// =========================================================================
|
|
507
583
|
// Helpers
|
|
508
584
|
// =========================================================================
|
|
509
585
|
this.getAccountCapType = (inputs) => {
|
|
510
|
-
return `${this.addresses.perpetuals.packages.
|
|
586
|
+
return `${this.addresses.perpetuals.packages.events}::${PerpetualsApi.constants.moduleNames.account}::Account<${inputs.collateralCoinType}>`;
|
|
511
587
|
};
|
|
512
588
|
// =========================================================================
|
|
589
|
+
// Private Helpers
|
|
590
|
+
// =========================================================================
|
|
591
|
+
// private fetchOrdersSizes = async (inputs: {
|
|
592
|
+
// orderIds: PerpetualsOrderId[];
|
|
593
|
+
// collateralCoinType: ObjectId;
|
|
594
|
+
// marketId: PerpetualsMarketId;
|
|
595
|
+
// }): Promise<bigint[]> => {
|
|
596
|
+
// const { orderIds, marketId, collateralCoinType } = inputs;
|
|
597
|
+
// if (orderIds.length <= 0) return [];
|
|
598
|
+
// const tx = new Transaction();
|
|
599
|
+
// const orderbookId = this.getOrderbookTx({
|
|
600
|
+
// tx,
|
|
601
|
+
// collateralCoinType,
|
|
602
|
+
// marketId,
|
|
603
|
+
// });
|
|
604
|
+
// for (const orderId of orderIds) {
|
|
605
|
+
// this.getOrderSizeTx({
|
|
606
|
+
// tx,
|
|
607
|
+
// orderId,
|
|
608
|
+
// orderbookId,
|
|
609
|
+
// });
|
|
610
|
+
// }
|
|
611
|
+
// const { allBytes } =
|
|
612
|
+
// await this.Provider.Inspections().fetchAllBytesFromTx({
|
|
613
|
+
// tx,
|
|
614
|
+
// });
|
|
615
|
+
// const sizes = allBytes
|
|
616
|
+
// .slice(1)
|
|
617
|
+
// .map((bytes) => Casting.bigIntFromBytes(bytes[0]));
|
|
618
|
+
// return sizes;
|
|
619
|
+
// };
|
|
620
|
+
// private fetchOrderbookOrders = async (inputs: {
|
|
621
|
+
// collateralCoinType: ObjectId;
|
|
622
|
+
// marketId: PerpetualsMarketId;
|
|
623
|
+
// side: PerpetualsOrderSide;
|
|
624
|
+
// fromPrice: PerpetualsOrderPrice;
|
|
625
|
+
// toPrice: PerpetualsOrderPrice;
|
|
626
|
+
// }): Promise<PerpetualsOrderInfo[]> => {
|
|
627
|
+
// const { collateralCoinType, marketId, side, fromPrice, toPrice } =
|
|
628
|
+
// inputs;
|
|
629
|
+
// const tx = new Transaction();
|
|
630
|
+
// const orderbookId = this.getOrderbookTx({
|
|
631
|
+
// tx,
|
|
632
|
+
// collateralCoinType,
|
|
633
|
+
// marketId,
|
|
634
|
+
// });
|
|
635
|
+
// this.inspectOrdersTx({ tx, orderbookId, side, fromPrice, toPrice });
|
|
636
|
+
// const bytes =
|
|
637
|
+
// await this.Provider.Inspections().fetchFirstBytesFromTxOutput({
|
|
638
|
+
// tx,
|
|
639
|
+
// });
|
|
640
|
+
// const orderInfos: any[] = bcs
|
|
641
|
+
// .vector(perpetualsRegistry.OrderInfo)
|
|
642
|
+
// .parse(new Uint8Array(bytes));
|
|
643
|
+
// return orderInfos.map((orderInfo) =>
|
|
644
|
+
// Casting.perpetuals.orderInfoFromRaw(orderInfo)
|
|
645
|
+
// );
|
|
646
|
+
// };
|
|
647
|
+
// public fetchExecutionPrice = async (
|
|
648
|
+
// inputs: ApiPerpetualsExecutionPriceBody & {
|
|
649
|
+
// collateralCoinType: CoinType;
|
|
650
|
+
// marketId: PerpetualsMarketId;
|
|
651
|
+
// }
|
|
652
|
+
// ): Promise<ApiPerpetualsExecutionPriceResponse> => {
|
|
653
|
+
// const {
|
|
654
|
+
// // collateral,
|
|
655
|
+
// collateralCoinType,
|
|
656
|
+
// marketId,
|
|
657
|
+
// side,
|
|
658
|
+
// size,
|
|
659
|
+
// price,
|
|
660
|
+
// lotSize,
|
|
661
|
+
// basePriceFeedId,
|
|
662
|
+
// collateralPriceFeedId,
|
|
663
|
+
// } = inputs;
|
|
664
|
+
// // TODO: change this
|
|
665
|
+
// const collateral = BigInt(1000000000000000);
|
|
666
|
+
// // const accountCapId = perpetualsBcsRegistry
|
|
667
|
+
// // .ser(`Account<${collateralCoinType}>`, {
|
|
668
|
+
// // id: {
|
|
669
|
+
// // id: {
|
|
670
|
+
// // bytes: "0x0000000000000000000000000000000000000000000000000000000000000321",
|
|
671
|
+
// // },
|
|
672
|
+
// // },
|
|
673
|
+
// // accountId: 0,
|
|
674
|
+
// // collateral,
|
|
675
|
+
// // })
|
|
676
|
+
// // .toBytes();
|
|
677
|
+
// const depositCoinBytes = perpetualsRegistry.Coin.serialize({
|
|
678
|
+
// id: "0x0000000000000000000000000000000000000000000000000000000000000123",
|
|
679
|
+
// balance: {
|
|
680
|
+
// value: BigInt(1000000000000000),
|
|
681
|
+
// },
|
|
682
|
+
// }).toBytes();
|
|
683
|
+
// const walletAddress = InspectionsApiHelpers.constants.devInspectSigner;
|
|
684
|
+
// const tx = new Transaction();
|
|
685
|
+
// tx.setSender(walletAddress);
|
|
686
|
+
// const accountCapId = this.createAccountTx({
|
|
687
|
+
// ...inputs,
|
|
688
|
+
// tx,
|
|
689
|
+
// });
|
|
690
|
+
// this.depositCollateralTx({
|
|
691
|
+
// tx,
|
|
692
|
+
// collateralCoinType,
|
|
693
|
+
// accountCapId,
|
|
694
|
+
// coinBytes: depositCoinBytes,
|
|
695
|
+
// });
|
|
696
|
+
// const { sessionPotatoId } = this.createTxAndStartSession({
|
|
697
|
+
// tx,
|
|
698
|
+
// accountCapId,
|
|
699
|
+
// collateralCoinType,
|
|
700
|
+
// marketId,
|
|
701
|
+
// walletAddress,
|
|
702
|
+
// basePriceFeedId,
|
|
703
|
+
// collateralPriceFeedId,
|
|
704
|
+
// collateralChange: collateral,
|
|
705
|
+
// hasPosition: false,
|
|
706
|
+
// });
|
|
707
|
+
// this.placeLimitOrderTx({
|
|
708
|
+
// tx,
|
|
709
|
+
// side,
|
|
710
|
+
// size,
|
|
711
|
+
// collateralCoinType,
|
|
712
|
+
// sessionPotatoId,
|
|
713
|
+
// orderType: PerpetualsOrderType.Standard,
|
|
714
|
+
// price:
|
|
715
|
+
// price ??
|
|
716
|
+
// (side === PerpetualsOrderSide.Bid
|
|
717
|
+
// ? BigInt("0x7FFFFFFFFFFFFFFF") // 2^63 - 1
|
|
718
|
+
// : BigInt(1)),
|
|
719
|
+
// });
|
|
720
|
+
// this.getHotPotatoFieldsTx({
|
|
721
|
+
// tx,
|
|
722
|
+
// collateralCoinType,
|
|
723
|
+
// sessionPotatoId,
|
|
724
|
+
// });
|
|
725
|
+
// this.endSessionAndTransferAccount({
|
|
726
|
+
// ...inputs,
|
|
727
|
+
// tx,
|
|
728
|
+
// sessionPotatoId,
|
|
729
|
+
// walletAddress,
|
|
730
|
+
// collateralChange: BigInt(0),
|
|
731
|
+
// });
|
|
732
|
+
// const { events } =
|
|
733
|
+
// await this.Provider.Inspections().fetchAllBytesFromTx({
|
|
734
|
+
// tx,
|
|
735
|
+
// });
|
|
736
|
+
// const filledTakerEvent = EventsApiHelpers.findCastEventOrUndefined({
|
|
737
|
+
// events,
|
|
738
|
+
// eventType: this.eventTypes.filledTakerOrder,
|
|
739
|
+
// castFunction: Casting.perpetuals.filledTakerOrderEventFromOnChain,
|
|
740
|
+
// });
|
|
741
|
+
// const sizeNum = lotSize * Math.abs(Number(size));
|
|
742
|
+
// if (!filledTakerEvent) {
|
|
743
|
+
// return {
|
|
744
|
+
// executionPrice: 0,
|
|
745
|
+
// sizeFilled: 0,
|
|
746
|
+
// sizePosted: sizeNum,
|
|
747
|
+
// fills: [],
|
|
748
|
+
// };
|
|
749
|
+
// }
|
|
750
|
+
// const filledOrderEvents =
|
|
751
|
+
// Aftermath.helpers.events.findCastEventsOrUndefined({
|
|
752
|
+
// events,
|
|
753
|
+
// eventType: this.eventTypes.filledTakerOrder,
|
|
754
|
+
// castFunction:
|
|
755
|
+
// Casting.perpetuals.filledTakerOrderEventFromOnChain,
|
|
756
|
+
// });
|
|
757
|
+
// const fills: PerpetualsFilledOrderData[] = filledOrderEvents.map(
|
|
758
|
+
// (event) => {
|
|
759
|
+
// const size = Math.abs(
|
|
760
|
+
// Casting.IFixed.numberFromIFixed(event.baseAssetDelta)
|
|
761
|
+
// );
|
|
762
|
+
// const sizeUsd = Math.abs(
|
|
763
|
+
// Casting.IFixed.numberFromIFixed(event.quoteAssetDelta)
|
|
764
|
+
// );
|
|
765
|
+
// const price = sizeUsd / size;
|
|
766
|
+
// return {
|
|
767
|
+
// size,
|
|
768
|
+
// price,
|
|
769
|
+
// };
|
|
770
|
+
// }
|
|
771
|
+
// );
|
|
772
|
+
// const executionPrice = Perpetuals.calcEntryPrice(filledTakerEvent);
|
|
773
|
+
// const sizeFilled = Math.abs(
|
|
774
|
+
// Casting.IFixed.numberFromIFixed(filledTakerEvent.baseAssetDelta)
|
|
775
|
+
// );
|
|
776
|
+
// const sizePosted = sizeNum - sizeFilled;
|
|
777
|
+
// return {
|
|
778
|
+
// executionPrice,
|
|
779
|
+
// sizeFilled,
|
|
780
|
+
// sizePosted,
|
|
781
|
+
// fills,
|
|
782
|
+
// };
|
|
783
|
+
// // const { fillReceipts, postReceipt } =
|
|
784
|
+
// // await this.fetchMarketOrderReceipts(inputs);
|
|
785
|
+
// // const sizePosted = postReceipt !== undefined ? postReceipt.size : 0;
|
|
786
|
+
// // if (fillReceipts.length <= 0)
|
|
787
|
+
// // return price !== undefined
|
|
788
|
+
// // ? // simulating limit order
|
|
789
|
+
// // {
|
|
790
|
+
// // executionPrice: Perpetuals.orderPriceToPrice({
|
|
791
|
+
// // orderPrice: price,
|
|
792
|
+
// // lotSize,
|
|
793
|
+
// // tickSize,
|
|
794
|
+
// // }),
|
|
795
|
+
// // sizeFilled: 0,
|
|
796
|
+
// // sizePosted: Number(sizePosted),
|
|
797
|
+
// // }
|
|
798
|
+
// // : // simulating market order
|
|
799
|
+
// // {
|
|
800
|
+
// // executionPrice: 0,
|
|
801
|
+
// // sizeFilled: 0,
|
|
802
|
+
// // sizePosted: 0,
|
|
803
|
+
// // };
|
|
804
|
+
// // const sizeFilled = Helpers.sumBigInt(
|
|
805
|
+
// // fillReceipts.map((receipt) => receipt.size)
|
|
806
|
+
// // );
|
|
807
|
+
// // const executionPrice = fillReceipts.reduce((acc, receipt) => {
|
|
808
|
+
// // const orderPrice = PerpetualsOrderUtils.price(
|
|
809
|
+
// // receipt.orderId,
|
|
810
|
+
// // inputs.side === PerpetualsOrderSide.Ask
|
|
811
|
+
// // ? PerpetualsOrderSide.Bid
|
|
812
|
+
// // : PerpetualsOrderSide.Ask
|
|
813
|
+
// // );
|
|
814
|
+
// // const orderPriceNum = Perpetuals.orderPriceToPrice({
|
|
815
|
+
// // orderPrice,
|
|
816
|
+
// // lotSize,
|
|
817
|
+
// // tickSize,
|
|
818
|
+
// // });
|
|
819
|
+
// // return (
|
|
820
|
+
// // acc +
|
|
821
|
+
// // orderPriceNum * (Number(receipt.size) / Number(sizeFilled))
|
|
822
|
+
// // );
|
|
823
|
+
// // }, 0);
|
|
824
|
+
// // return {
|
|
825
|
+
// // executionPrice,
|
|
826
|
+
// // sizeFilled: Number(sizeFilled),
|
|
827
|
+
// // sizePosted: Number(sizePosted),
|
|
828
|
+
// // };
|
|
829
|
+
// };
|
|
830
|
+
// private createTxAndStartSession = (inputs: {
|
|
831
|
+
// tx?: Transaction;
|
|
832
|
+
// collateralCoinType: CoinType;
|
|
833
|
+
// accountCapId: ObjectId | TransactionArgument;
|
|
834
|
+
// marketId: PerpetualsMarketId;
|
|
835
|
+
// marketInitialSharedVersion: ObjectVersion;
|
|
836
|
+
// basePriceFeedId: ObjectId;
|
|
837
|
+
// collateralPriceFeedId: ObjectId;
|
|
838
|
+
// walletAddress: SuiAddress;
|
|
839
|
+
// collateralChange: Balance;
|
|
840
|
+
// hasPosition: boolean;
|
|
841
|
+
// }) => {
|
|
842
|
+
// const { collateralChange, walletAddress, hasPosition } = inputs;
|
|
843
|
+
// const { tx: inputsTx, ...nonTxInputs } = inputs;
|
|
844
|
+
// const tx = inputsTx ?? new Transaction();
|
|
845
|
+
// tx.setSender(walletAddress);
|
|
846
|
+
// if (!hasPosition) {
|
|
847
|
+
// this.createMarketPositionTx({
|
|
848
|
+
// ...nonTxInputs,
|
|
849
|
+
// tx,
|
|
850
|
+
// });
|
|
851
|
+
// }
|
|
852
|
+
// if (collateralChange > BigInt(0)) {
|
|
853
|
+
// this.allocateCollateralTx({
|
|
854
|
+
// ...nonTxInputs,
|
|
855
|
+
// tx,
|
|
856
|
+
// amount: collateralChange,
|
|
857
|
+
// });
|
|
858
|
+
// }
|
|
859
|
+
// const sessionPotatoId = this.startSessionTx({
|
|
860
|
+
// ...nonTxInputs,
|
|
861
|
+
// tx,
|
|
862
|
+
// });
|
|
863
|
+
// return { tx, sessionPotatoId };
|
|
864
|
+
// };
|
|
865
|
+
// private endSessionAndShareMarket = (inputs: {
|
|
866
|
+
// tx: Transaction;
|
|
867
|
+
// collateralCoinType: CoinType;
|
|
868
|
+
// sessionPotatoId: ObjectId | TransactionArgument;
|
|
869
|
+
// }) => {
|
|
870
|
+
// const marketId = this.endSessionTx(inputs);
|
|
871
|
+
// this.shareClearingHouseTx({
|
|
872
|
+
// ...inputs,
|
|
873
|
+
// marketId,
|
|
874
|
+
// });
|
|
875
|
+
// };
|
|
876
|
+
// =========================================================================
|
|
877
|
+
// Public Static Helpers
|
|
878
|
+
// =========================================================================
|
|
879
|
+
// public static bucketOrders = (inputs: {
|
|
880
|
+
// orders: PerpetualsOrderInfo[];
|
|
881
|
+
// side: PerpetualsOrderSide;
|
|
882
|
+
// lotSize: number;
|
|
883
|
+
// tickSize: number;
|
|
884
|
+
// priceBucketSize: number;
|
|
885
|
+
// initialBucketedOrders?: OrderbookDataPoint[];
|
|
886
|
+
// }): OrderbookDataPoint[] => {
|
|
887
|
+
// const {
|
|
888
|
+
// orders,
|
|
889
|
+
// side,
|
|
890
|
+
// lotSize,
|
|
891
|
+
// tickSize,
|
|
892
|
+
// priceBucketSize,
|
|
893
|
+
// initialBucketedOrders,
|
|
894
|
+
// } = inputs;
|
|
895
|
+
// let dataPoints: OrderbookDataPoint[] = initialBucketedOrders ?? [];
|
|
896
|
+
// const roundPrice = (price: number, bucketSize: number): number => {
|
|
897
|
+
// return Math.round(price / bucketSize) * bucketSize;
|
|
898
|
+
// };
|
|
899
|
+
// const comparePrices = (
|
|
900
|
+
// price1: number,
|
|
901
|
+
// price2: number,
|
|
902
|
+
// bucketSize: number
|
|
903
|
+
// ): boolean => {
|
|
904
|
+
// return Math.abs(price1 - price2) < bucketSize;
|
|
905
|
+
// };
|
|
906
|
+
// orders.forEach((order) => {
|
|
907
|
+
// const actualPrice = Perpetuals.orderPriceToPrice({
|
|
908
|
+
// lotSize,
|
|
909
|
+
// tickSize: Math.abs(tickSize),
|
|
910
|
+
// orderPrice: order.price,
|
|
911
|
+
// });
|
|
912
|
+
// const roundedPrice = roundPrice(actualPrice, priceBucketSize);
|
|
913
|
+
// const size =
|
|
914
|
+
// lotSize *
|
|
915
|
+
// Math.abs(Number(order.size)) *
|
|
916
|
+
// (tickSize < 0 ? -1 : 1);
|
|
917
|
+
// const sizeUsd = size * actualPrice;
|
|
918
|
+
// const placementIndex = dataPoints.findIndex(
|
|
919
|
+
// (dataPoint: OrderbookDataPoint) =>
|
|
920
|
+
// comparePrices(
|
|
921
|
+
// roundedPrice,
|
|
922
|
+
// dataPoint.price,
|
|
923
|
+
// priceBucketSize
|
|
924
|
+
// )
|
|
925
|
+
// );
|
|
926
|
+
// if (placementIndex < 0) {
|
|
927
|
+
// if (size > 0) {
|
|
928
|
+
// const newDataPoint: OrderbookDataPoint = {
|
|
929
|
+
// size,
|
|
930
|
+
// sizeUsd,
|
|
931
|
+
// totalSize: size,
|
|
932
|
+
// totalSizeUsd: sizeUsd,
|
|
933
|
+
// price: roundedPrice,
|
|
934
|
+
// };
|
|
935
|
+
// const insertIndex = dataPoints.findIndex((dataPoint) =>
|
|
936
|
+
// side === PerpetualsOrderSide.Ask
|
|
937
|
+
// ? roundedPrice < dataPoint.price
|
|
938
|
+
// : roundedPrice > dataPoint.price
|
|
939
|
+
// );
|
|
940
|
+
// if (insertIndex < 0) {
|
|
941
|
+
// dataPoints.push(newDataPoint);
|
|
942
|
+
// } else {
|
|
943
|
+
// dataPoints.splice(insertIndex, 0, newDataPoint);
|
|
944
|
+
// }
|
|
945
|
+
// }
|
|
946
|
+
// } else {
|
|
947
|
+
// dataPoints[placementIndex].size += size;
|
|
948
|
+
// dataPoints[placementIndex].sizeUsd += sizeUsd;
|
|
949
|
+
// dataPoints[placementIndex].totalSize += size;
|
|
950
|
+
// dataPoints[placementIndex].totalSizeUsd += sizeUsd;
|
|
951
|
+
// }
|
|
952
|
+
// });
|
|
953
|
+
// dataPoints = dataPoints.filter((data) => data.size >= lotSize);
|
|
954
|
+
// for (let index = 0; index < dataPoints.length; index++) {
|
|
955
|
+
// if (index > 0) {
|
|
956
|
+
// dataPoints[index].totalSize =
|
|
957
|
+
// dataPoints[index - 1].totalSize + dataPoints[index].size;
|
|
958
|
+
// dataPoints[index].totalSizeUsd =
|
|
959
|
+
// dataPoints[index - 1].totalSizeUsd +
|
|
960
|
+
// dataPoints[index].sizeUsd;
|
|
961
|
+
// } else {
|
|
962
|
+
// dataPoints[index].totalSize = dataPoints[index].size;
|
|
963
|
+
// dataPoints[index].totalSizeUsd = dataPoints[index].sizeUsd;
|
|
964
|
+
// }
|
|
965
|
+
// }
|
|
966
|
+
// if (side === PerpetualsOrderSide.Ask) {
|
|
967
|
+
// dataPoints.reverse();
|
|
968
|
+
// }
|
|
969
|
+
// return dataPoints;
|
|
970
|
+
// };
|
|
971
|
+
// =========================================================================
|
|
513
972
|
// Event Types
|
|
514
973
|
// =========================================================================
|
|
515
974
|
this.eventType = (eventName) => eventsApiHelpers_1.EventsApiHelpers.createEventType(this.addresses.perpetuals.packages.events, PerpetualsApi.constants.moduleNames.events, eventName);
|
|
@@ -530,6 +989,7 @@ class PerpetualsApi {
|
|
|
530
989
|
deallocatedCollateral: this.eventType("DeallocatedCollateral"),
|
|
531
990
|
// Liquidation
|
|
532
991
|
liquidated: this.eventType("LiquidatedPosition"),
|
|
992
|
+
filledTakerOrderLiquidator: this.eventType("FilledTakerOrderLiquidator"),
|
|
533
993
|
// Account
|
|
534
994
|
createdAccount: this.eventType("CreatedAccount"),
|
|
535
995
|
// Order
|
|
@@ -537,11 +997,16 @@ class PerpetualsApi {
|
|
|
537
997
|
postedOrder: this.eventType("PostedOrder"),
|
|
538
998
|
filledMakerOrder: this.eventType("FilledMakerOrder"),
|
|
539
999
|
filledTakerOrder: this.eventType("FilledTakerOrder"),
|
|
1000
|
+
reducedOrder: this.eventType("ReducedOrder"),
|
|
540
1001
|
// Order Receipts
|
|
541
1002
|
postedOrderReceipt: this.eventType("OrderbookPostReceipt"),
|
|
542
1003
|
// Twap
|
|
543
1004
|
updatedPremiumTwap: this.eventType("UpdatedPremiumTwap"),
|
|
544
1005
|
updatedSpreadTwap: this.eventType("UpdatedSpreadTwap"),
|
|
1006
|
+
// Funding
|
|
1007
|
+
updatedFunding: this.eventType("UpdatedFunding"),
|
|
1008
|
+
// Version
|
|
1009
|
+
updatedMarketVersion: this.eventType("UpdatedClearingHouseVersion"),
|
|
545
1010
|
};
|
|
546
1011
|
this.moveErrors = {
|
|
547
1012
|
[this.addresses.perpetuals.packages.perpetuals]: {
|
|
@@ -642,69 +1107,3 @@ PerpetualsApi.constants = {
|
|
|
642
1107
|
account: "account",
|
|
643
1108
|
},
|
|
644
1109
|
};
|
|
645
|
-
// =========================================================================
|
|
646
|
-
// Public Static Helpers
|
|
647
|
-
// =========================================================================
|
|
648
|
-
PerpetualsApi.bucketOrders = (inputs) => {
|
|
649
|
-
const { orders, side, lotSize, tickSize, priceBucketSize, initialBucketedOrders, } = inputs;
|
|
650
|
-
let dataPoints = initialBucketedOrders !== null && initialBucketedOrders !== void 0 ? initialBucketedOrders : [];
|
|
651
|
-
const roundPrice = (price, bucketSize) => {
|
|
652
|
-
return Math.round(price / bucketSize) * bucketSize;
|
|
653
|
-
};
|
|
654
|
-
const comparePrices = (price1, price2, bucketSize) => {
|
|
655
|
-
return Math.abs(price1 - price2) < bucketSize / 2;
|
|
656
|
-
};
|
|
657
|
-
orders.forEach((order) => {
|
|
658
|
-
const actualPrice = perpetuals_1.Perpetuals.orderPriceToPrice({
|
|
659
|
-
lotSize,
|
|
660
|
-
tickSize: Math.abs(tickSize),
|
|
661
|
-
orderPrice: order.price,
|
|
662
|
-
});
|
|
663
|
-
const roundedPrice = roundPrice(actualPrice, priceBucketSize);
|
|
664
|
-
const size = lotSize * Number(order.size) * (tickSize < 0 ? -1 : 1);
|
|
665
|
-
const sizeUsd = size * actualPrice;
|
|
666
|
-
const placementIndex = dataPoints.findIndex((dataPoint) => comparePrices(roundedPrice, dataPoint.price, priceBucketSize));
|
|
667
|
-
if (placementIndex < 0) {
|
|
668
|
-
const newDataPoint = {
|
|
669
|
-
size,
|
|
670
|
-
sizeUsd,
|
|
671
|
-
totalSize: size,
|
|
672
|
-
totalSizeUsd: sizeUsd,
|
|
673
|
-
price: roundedPrice,
|
|
674
|
-
};
|
|
675
|
-
const insertIndex = dataPoints.findIndex((dataPoint) => side === perpetualsTypes_1.PerpetualsOrderSide.Ask
|
|
676
|
-
? roundedPrice <= dataPoint.price
|
|
677
|
-
: roundedPrice >= dataPoint.price);
|
|
678
|
-
if (insertIndex < 0) {
|
|
679
|
-
dataPoints.push(newDataPoint);
|
|
680
|
-
}
|
|
681
|
-
else {
|
|
682
|
-
dataPoints.splice(insertIndex, 0, newDataPoint);
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
else {
|
|
686
|
-
dataPoints[placementIndex].size += size;
|
|
687
|
-
dataPoints[placementIndex].sizeUsd += sizeUsd;
|
|
688
|
-
dataPoints[placementIndex].totalSize += size;
|
|
689
|
-
dataPoints[placementIndex].totalSizeUsd += sizeUsd;
|
|
690
|
-
}
|
|
691
|
-
});
|
|
692
|
-
dataPoints = dataPoints.filter((data) => data.size > 0 && data.sizeUsd > 0);
|
|
693
|
-
for (let index = 0; index < dataPoints.length; index++) {
|
|
694
|
-
if (index > 0) {
|
|
695
|
-
dataPoints[index].totalSize =
|
|
696
|
-
dataPoints[index - 1].totalSize + dataPoints[index].size;
|
|
697
|
-
dataPoints[index].totalSizeUsd =
|
|
698
|
-
dataPoints[index - 1].totalSizeUsd +
|
|
699
|
-
dataPoints[index].sizeUsd;
|
|
700
|
-
}
|
|
701
|
-
else {
|
|
702
|
-
dataPoints[index].totalSize = dataPoints[index].size;
|
|
703
|
-
dataPoints[index].totalSizeUsd = dataPoints[index].sizeUsd;
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
if (side === perpetualsTypes_1.PerpetualsOrderSide.Ask) {
|
|
707
|
-
dataPoints.reverse();
|
|
708
|
-
}
|
|
709
|
-
return dataPoints;
|
|
710
|
-
};
|