flash-sdk 1.0.134 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/CustodyAccount.d.ts +6 -8
- package/dist/CustodyAccount.js +0 -21
- package/dist/MarketAccount.d.ts +23 -0
- package/dist/MarketAccount.js +42 -0
- package/dist/OraclePrice.d.ts +2 -0
- package/dist/OraclePrice.js +12 -4
- package/dist/PerpetualsClient.d.ts +1500 -976
- package/dist/PerpetualsClient.js +1410 -825
- package/dist/PoolAccount.d.ts +13 -3
- package/dist/PoolConfig.d.ts +25 -1
- package/dist/PoolConfig.js +61 -18
- package/dist/PoolConfig.json +582 -142
- package/dist/PoolDataClient.d.ts +2 -9
- package/dist/PoolDataClient.js +1 -43
- package/dist/PositionAccount.d.ts +14 -12
- package/dist/TradingAccount.d.ts +20 -0
- package/dist/TradingAccount.js +17 -0
- package/dist/backupOracle.js +16 -3
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.js +3 -2
- package/dist/idl/perp_composability.d.ts +132 -86
- package/dist/idl/perp_composability.js +132 -86
- package/dist/idl/perpetuals.d.ts +2276 -1102
- package/dist/idl/perpetuals.js +2250 -1076
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/index.d.ts +24 -2
- package/dist/types/index.js +23 -12
- package/dist/utils/getNftAccounts.d.ts +7 -0
- package/dist/utils/getNftAccounts.js +28 -0
- package/package.json +1 -1
package/dist/PerpetualsClient.js
CHANGED
@@ -74,6 +74,7 @@ var rpc_1 = require("./utils/rpc");
|
|
74
74
|
var utils_1 = require("./utils");
|
75
75
|
var constants_1 = require("./constants");
|
76
76
|
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
77
|
+
var getNftAccounts_1 = require("./utils/getNftAccounts");
|
77
78
|
var PerpetualsClient = (function () {
|
78
79
|
function PerpetualsClient(provider, programId, composabilityProgramId, opts) {
|
79
80
|
var _this = this;
|
@@ -249,34 +250,28 @@ var PerpetualsClient = (function () {
|
|
249
250
|
return [2, this.program.account.multisig.fetch(this.multisig.publicKey)];
|
250
251
|
});
|
251
252
|
}); };
|
252
|
-
this.getPositionKey = function (wallet, poolName, tokenMint, side) {
|
253
|
-
var pool = _this.getPoolKey(poolName);
|
254
|
-
var custody = _this.getCustodyKey(poolName, tokenMint);
|
255
|
-
return _this.findProgramAddress("position", [
|
256
|
-
wallet,
|
257
|
-
pool,
|
258
|
-
custody,
|
259
|
-
side === "long" ? [1] : [2],
|
260
|
-
]).publicKey;
|
261
|
-
};
|
262
253
|
this.getPosition = function (postionKey) { return __awaiter(_this, void 0, void 0, function () {
|
263
254
|
return __generator(this, function (_a) {
|
264
255
|
return [2, this.program.account.position.fetch(postionKey)];
|
265
256
|
});
|
266
257
|
}); };
|
267
|
-
this.getUserPosition = function (
|
258
|
+
this.getUserPosition = function (owner, targetCustody, collateralCustody, side) { return __awaiter(_this, void 0, void 0, function () {
|
268
259
|
return __generator(this, function (_a) {
|
269
|
-
return [2, this.program.account.position.fetch(this.getPositionKey(
|
260
|
+
return [2, this.program.account.position.fetch(this.getPositionKey(owner, targetCustody, collateralCustody, side))];
|
270
261
|
});
|
271
262
|
}); };
|
272
263
|
this.getUserPositions = function (wallet, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
273
|
-
var positionKeys, positionsDatas;
|
264
|
+
var marketAccountsPks, positionKeys, positionsDatas;
|
274
265
|
var _this = this;
|
275
266
|
var _a;
|
276
267
|
return __generator(this, function (_b) {
|
277
268
|
switch (_b.label) {
|
278
269
|
case 0:
|
279
|
-
|
270
|
+
marketAccountsPks = poolConfig.getAllMarketPks();
|
271
|
+
positionKeys = marketAccountsPks.map(function (f) { return _this.findProgramAddress("position", [
|
272
|
+
wallet,
|
273
|
+
f
|
274
|
+
]); }).map(function (p) { return p.publicKey; });
|
280
275
|
return [4, this.provider.connection.getMultipleAccountsInfo(positionKeys)];
|
281
276
|
case 1:
|
282
277
|
positionsDatas = (_a = (_b.sent())) !== null && _a !== void 0 ? _a : [];
|
@@ -405,11 +400,18 @@ var PerpetualsClient = (function () {
|
|
405
400
|
}
|
406
401
|
});
|
407
402
|
}); };
|
408
|
-
this.addPool = function (name) { return __awaiter(_this, void 0, void 0, function () {
|
403
|
+
this.addPool = function (name, maxAumUsd, permissions, metadataSymbol, metadataTitle, metadataUri) { return __awaiter(_this, void 0, void 0, function () {
|
409
404
|
return __generator(this, function (_a) {
|
410
405
|
switch (_a.label) {
|
411
406
|
case 0: return [4, this.program.methods
|
412
|
-
.addPool({
|
407
|
+
.addPool({
|
408
|
+
name: name,
|
409
|
+
maxAumUsd: maxAumUsd,
|
410
|
+
permissions: permissions,
|
411
|
+
metadataSymbol: metadataSymbol,
|
412
|
+
metadataTitle: metadataTitle,
|
413
|
+
metadataUri: metadataUri
|
414
|
+
})
|
413
415
|
.accounts({
|
414
416
|
admin: this.provider.wallet.publicKey,
|
415
417
|
multisig: this.multisig.publicKey,
|
@@ -456,7 +458,7 @@ var PerpetualsClient = (function () {
|
|
456
458
|
}
|
457
459
|
});
|
458
460
|
}); };
|
459
|
-
this.addCustody = function (poolName, tokenMint, isStable, isVirtual, oracle, pricing, permissions, fees, borrowRate, ratios) { return __awaiter(_this, void 0, void 0, function () {
|
461
|
+
this.addCustody = function (poolName, tokenMint, isStable, isVirtual, oracle, pricing, permissions, fees, borrowRate, ratios, depegAdjustment) { return __awaiter(_this, void 0, void 0, function () {
|
460
462
|
var trx_id, error_1;
|
461
463
|
return __generator(this, function (_a) {
|
462
464
|
switch (_a.label) {
|
@@ -472,6 +474,7 @@ var PerpetualsClient = (function () {
|
|
472
474
|
fees: fees,
|
473
475
|
borrowRate: borrowRate,
|
474
476
|
ratios: ratios,
|
477
|
+
depegAdjustment: depegAdjustment
|
475
478
|
})
|
476
479
|
.accounts({
|
477
480
|
admin: this.admin,
|
@@ -570,28 +573,28 @@ var PerpetualsClient = (function () {
|
|
570
573
|
});
|
571
574
|
}); };
|
572
575
|
this.getLiquidationState = function (wallet, poolName, tokenMint, collateralMint, side, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
573
|
-
var _a, _b;
|
576
|
+
var targetCustody, collateralCustody, _a, _b;
|
574
577
|
var _c;
|
575
578
|
return __generator(this, function (_d) {
|
576
579
|
switch (_d.label) {
|
577
580
|
case 0:
|
581
|
+
targetCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
582
|
+
collateralCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
578
583
|
_b = (_a = this.program.methods
|
579
584
|
.getLiquidationState({}))
|
580
585
|
.accounts;
|
581
586
|
_c = {
|
582
587
|
perpetuals: this.perpetuals.publicKey,
|
583
588
|
pool: this.getPoolKey(poolName),
|
584
|
-
position: this.getPositionKey(wallet,
|
585
|
-
|
589
|
+
position: this.getPositionKey(wallet, targetCustody, collateralCustody, side),
|
590
|
+
targetCustody: this.getCustodyKey(poolName, tokenMint)
|
586
591
|
};
|
587
592
|
return [4, this.getCustodyOracleAccountKey(poolName, tokenMint)];
|
588
593
|
case 1:
|
589
|
-
_c.
|
590
|
-
_c.
|
591
|
-
_c.collateralCustody = this.getCustodyKey(poolName, collateralMint),
|
592
|
-
_c.collateralCustodyCustomOracleAccount = poolConfig.backupOracle;
|
594
|
+
_c.targetOracleAccount = _d.sent(),
|
595
|
+
_c.collateralCustody = this.getCustodyKey(poolName, collateralMint);
|
593
596
|
return [4, this.getCustodyOracleAccountKey(poolName, collateralMint)];
|
594
|
-
case 2: return [4, _b.apply(_a, [(_c.
|
597
|
+
case 2: return [4, _b.apply(_a, [(_c.collateralOracleAccount = _d.sent(),
|
595
598
|
_c.ixSysvar = web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
596
599
|
_c)])
|
597
600
|
.view()
|
@@ -603,69 +606,34 @@ var PerpetualsClient = (function () {
|
|
603
606
|
}
|
604
607
|
});
|
605
608
|
}); };
|
606
|
-
this.
|
607
|
-
var
|
608
|
-
return __generator(this, function (_a) {
|
609
|
-
switch (_a.label) {
|
610
|
-
case 0:
|
611
|
-
marketCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(marketSymbol).mintKey); });
|
612
|
-
collateralCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
613
|
-
return [4, this.program.methods
|
614
|
-
.validateCollectivePnl({ side: side })
|
615
|
-
.accounts({
|
616
|
-
perpetuals: this.perpetuals.publicKey,
|
617
|
-
pool: this.getPoolKey(poolName),
|
618
|
-
custody: marketCustodyConfig.custodyAccount,
|
619
|
-
custodyOracleAccount: marketCustodyConfig.oracleAddress,
|
620
|
-
custodyCustomOracleAccount: poolConfig.backupOracle,
|
621
|
-
collateralCustody: collateralCustodyConfig.custodyAccount,
|
622
|
-
collateralCustodyOracleAccount: collateralCustodyConfig.oracleAddress,
|
623
|
-
collateralCustodyCustomOracleAccount: poolConfig.backupOracle,
|
624
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
625
|
-
})
|
626
|
-
.remainingAccounts([])
|
627
|
-
.rpc()
|
628
|
-
.catch(function (err) {
|
629
|
-
console.error(err);
|
630
|
-
throw err;
|
631
|
-
})];
|
632
|
-
case 1:
|
633
|
-
_a.sent();
|
634
|
-
return [2];
|
635
|
-
}
|
636
|
-
});
|
637
|
-
}); };
|
638
|
-
this.liquidate = function (wallet, poolConfig, tokenMint, collateralMint, side, receivingAccount, rewardsReceivingAccount) { return __awaiter(_this, void 0, void 0, function () {
|
639
|
-
var poolName, _a, _b;
|
609
|
+
this.liquidate = function (wallet, poolConfig, tokenMint, collateralMint, side) { return __awaiter(_this, void 0, void 0, function () {
|
610
|
+
var poolName, market, targetCustody, collateralCustody, _a, _b;
|
640
611
|
var _c;
|
641
612
|
return __generator(this, function (_d) {
|
642
613
|
switch (_d.label) {
|
643
614
|
case 0:
|
644
615
|
poolName = poolConfig.poolName;
|
616
|
+
market = poolConfig.getMarketPk(this.getCustodyKey(poolName, tokenMint), this.getCustodyKey(poolName, collateralMint), side === 'long' ? types_1.Side.Long : types_1.Side.Short);
|
617
|
+
targetCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
618
|
+
collateralCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
645
619
|
_b = (_a = this.program.methods
|
646
620
|
.liquidate({}))
|
647
621
|
.accounts;
|
648
622
|
_c = {
|
649
623
|
signer: this.provider.wallet.publicKey,
|
650
|
-
receivingAccount: receivingAccount,
|
651
|
-
rewardsReceivingAccount: rewardsReceivingAccount,
|
652
|
-
transferAuthority: this.authority.publicKey,
|
653
624
|
perpetuals: this.perpetuals.publicKey,
|
654
625
|
pool: this.getPoolKey(poolName),
|
655
|
-
position: this.getPositionKey(wallet,
|
656
|
-
|
626
|
+
position: this.getPositionKey(wallet, targetCustody, collateralCustody, side),
|
627
|
+
market: market,
|
628
|
+
targetCustody: this.getCustodyKey(poolName, tokenMint)
|
657
629
|
};
|
658
630
|
return [4, this.getCustodyOracleAccountKey(poolName, tokenMint)];
|
659
631
|
case 1:
|
660
|
-
_c.
|
632
|
+
_c.targetOracleAccount = _d.sent(),
|
661
633
|
_c.collateralCustody = this.getCustodyKey(poolName, collateralMint);
|
662
634
|
return [4, this.getCustodyOracleAccountKey(poolName, collateralMint)];
|
663
|
-
case 2: return [4, _b.apply(_a, [(_c.
|
664
|
-
_c.collateralCustodyTokenAccount = this.getCustodyTokenAccountKey(poolName, collateralMint),
|
665
|
-
_c.collateralCustodyCustomOracleAccount = poolConfig.backupOracle,
|
666
|
-
_c.custodyCustomOracleAccount = poolConfig.backupOracle,
|
635
|
+
case 2: return [4, _b.apply(_a, [(_c.collateralOracleAccount = _d.sent(),
|
667
636
|
_c.eventAuthority = this.eventAuthority.publicKey,
|
668
|
-
_c.tokenProgram = spl_token_1.TOKEN_PROGRAM_ID,
|
669
637
|
_c.program = this.program.programId,
|
670
638
|
_c.ixSysvar = web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
671
639
|
_c)])
|
@@ -775,12 +743,15 @@ var PerpetualsClient = (function () {
|
|
775
743
|
}
|
776
744
|
});
|
777
745
|
}); };
|
778
|
-
this.getEntryPriceAndFeeView = function (
|
779
|
-
var _a, _b;
|
746
|
+
this.getEntryPriceAndFeeView = function (tokenMint, collateralMint, collateral, size, side, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
747
|
+
var targetCustody, collateralCustody, market, _a, _b;
|
780
748
|
var _c;
|
781
749
|
return __generator(this, function (_d) {
|
782
750
|
switch (_d.label) {
|
783
751
|
case 0:
|
752
|
+
targetCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
753
|
+
collateralCustody = this.getCustodyKey(poolConfig.poolName, collateralMint);
|
754
|
+
market = poolConfig.getMarketPk(targetCustody, collateralCustody, side === 'long' ? types_1.Side.Long : types_1.Side.Short);
|
784
755
|
_b = (_a = this.program.methods
|
785
756
|
.getEntryPriceAndFee({
|
786
757
|
collateral: collateral,
|
@@ -790,11 +761,16 @@ var PerpetualsClient = (function () {
|
|
790
761
|
.accounts;
|
791
762
|
_c = {
|
792
763
|
perpetuals: this.perpetuals.publicKey,
|
793
|
-
pool:
|
794
|
-
|
764
|
+
pool: poolConfig.poolAddress,
|
765
|
+
targetCustody: targetCustody
|
795
766
|
};
|
796
|
-
return [4, this.getCustodyOracleAccountKey(poolName, tokenMint)];
|
797
|
-
case 1:
|
767
|
+
return [4, this.getCustodyOracleAccountKey(poolConfig.poolName, tokenMint)];
|
768
|
+
case 1:
|
769
|
+
_c.targetOracleAccount = _d.sent(),
|
770
|
+
_c.collateralCustody = collateralCustody;
|
771
|
+
return [4, this.getCustodyOracleAccountKey(poolConfig.poolName, collateralMint)];
|
772
|
+
case 2: return [4, _b.apply(_a, [(_c.collateralOracleAccount = _d.sent(),
|
773
|
+
_c.market = market,
|
798
774
|
_c.ixSysvar = web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
799
775
|
_c)])
|
800
776
|
.view()
|
@@ -802,27 +778,35 @@ var PerpetualsClient = (function () {
|
|
802
778
|
console.error(err);
|
803
779
|
throw err;
|
804
780
|
})];
|
805
|
-
case
|
781
|
+
case 3: return [2, _d.sent()];
|
806
782
|
}
|
807
783
|
});
|
808
784
|
}); };
|
809
|
-
this.getExitPriceAndFeeView = function (wallet,
|
810
|
-
var _a, _b;
|
785
|
+
this.getExitPriceAndFeeView = function (wallet, tokenMint, collateralMint, side, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
786
|
+
var targetCustody, collateralCustody, market, _a, _b;
|
811
787
|
var _c;
|
812
788
|
return __generator(this, function (_d) {
|
813
789
|
switch (_d.label) {
|
814
790
|
case 0:
|
791
|
+
targetCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
792
|
+
collateralCustody = this.getCustodyKey(poolConfig.poolName, collateralMint);
|
793
|
+
market = poolConfig.getMarketPk(targetCustody, collateralCustody, side === 'long' ? types_1.Side.Long : types_1.Side.Short);
|
815
794
|
_b = (_a = this.program.methods
|
816
795
|
.getExitPriceAndFee({}))
|
817
796
|
.accounts;
|
818
797
|
_c = {
|
819
798
|
perpetuals: this.perpetuals.publicKey,
|
820
|
-
pool:
|
821
|
-
position: this.getPositionKey(wallet,
|
822
|
-
|
799
|
+
pool: poolConfig.poolAddress,
|
800
|
+
position: this.getPositionKey(wallet, targetCustody, collateralCustody, side),
|
801
|
+
targetCustody: this.getCustodyKey(poolConfig.poolName, tokenMint)
|
823
802
|
};
|
824
|
-
return [4, this.getCustodyOracleAccountKey(poolName, tokenMint)];
|
825
|
-
case 1:
|
803
|
+
return [4, this.getCustodyOracleAccountKey(poolConfig.poolName, tokenMint)];
|
804
|
+
case 1:
|
805
|
+
_c.targetOracleAccount = _d.sent(),
|
806
|
+
_c.collateralCustody = this.getCustodyKey(poolConfig.poolName, collateralMint);
|
807
|
+
return [4, this.getCustodyOracleAccountKey(poolConfig.poolName, collateralMint)];
|
808
|
+
case 2: return [4, _b.apply(_a, [(_c.collateralOracleAccount = _d.sent(),
|
809
|
+
_c.market = market,
|
826
810
|
_c.ixSysvar = web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
827
811
|
_c)])
|
828
812
|
.view()
|
@@ -830,63 +814,35 @@ var PerpetualsClient = (function () {
|
|
830
814
|
console.error(err);
|
831
815
|
throw err;
|
832
816
|
})];
|
833
|
-
case
|
817
|
+
case 3: return [2, _d.sent()];
|
834
818
|
}
|
835
819
|
});
|
836
820
|
}); };
|
837
|
-
this.
|
838
|
-
|
839
|
-
if (removeCollateral === void 0) { removeCollateral = new anchor_1.BN(0); }
|
840
|
-
return __awaiter(_this, void 0, void 0, function () {
|
841
|
-
var _a, _b;
|
842
|
-
var _c;
|
843
|
-
return __generator(this, function (_d) {
|
844
|
-
switch (_d.label) {
|
845
|
-
case 0:
|
846
|
-
_b = (_a = this.program.methods
|
847
|
-
.getLiquidationPrice({
|
848
|
-
addCollateralDelta: addCollateral,
|
849
|
-
removeCollateralDelta: removeCollateral,
|
850
|
-
}))
|
851
|
-
.accounts;
|
852
|
-
_c = {
|
853
|
-
perpetuals: this.perpetuals.publicKey,
|
854
|
-
pool: this.getPoolKey(poolName),
|
855
|
-
position: this.getPositionKey(wallet, poolName, tokenMint, side),
|
856
|
-
custody: this.getCustodyKey(poolName, tokenMint)
|
857
|
-
};
|
858
|
-
return [4, this.getCustodyOracleAccountKey(poolName, tokenMint)];
|
859
|
-
case 1: return [4, _b.apply(_a, [(_c.custodyOracleAccount = _d.sent(),
|
860
|
-
_c.ixSysvar = web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
861
|
-
_c)])
|
862
|
-
.view()
|
863
|
-
.catch(function (err) {
|
864
|
-
console.error(err);
|
865
|
-
throw err;
|
866
|
-
})];
|
867
|
-
case 2: return [2, _d.sent()];
|
868
|
-
}
|
869
|
-
});
|
870
|
-
});
|
871
|
-
};
|
872
|
-
this.getPnlView = function (wallet, poolName, tokenMint, side) { return __awaiter(_this, void 0, void 0, function () {
|
873
|
-
var pos, _a, _b;
|
821
|
+
this.getPnlView = function (wallet, tokenMint, collateralMint, side, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
822
|
+
var targetCustody, collateralCustody, market, pos, _a, _b;
|
874
823
|
var _c;
|
875
824
|
return __generator(this, function (_d) {
|
876
825
|
switch (_d.label) {
|
877
826
|
case 0:
|
878
|
-
|
827
|
+
targetCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
828
|
+
collateralCustody = this.getCustodyKey(poolConfig.poolName, collateralMint);
|
829
|
+
market = poolConfig.getMarketPk(targetCustody, collateralCustody, side === 'long' ? types_1.Side.Long : types_1.Side.Short);
|
830
|
+
pos = this.getPositionKey(wallet, targetCustody, collateralCustody, side);
|
879
831
|
_b = (_a = this.program.methods
|
880
832
|
.getPnl({}))
|
881
833
|
.accounts;
|
882
834
|
_c = {
|
883
835
|
perpetuals: this.perpetuals.publicKey,
|
884
|
-
pool:
|
836
|
+
pool: poolConfig.poolAddress,
|
885
837
|
position: pos,
|
886
|
-
|
838
|
+
targetCustody: this.getCustodyKey(poolConfig.poolName, tokenMint)
|
887
839
|
};
|
888
|
-
return [4, this.getCustodyOracleAccountKey(poolName, tokenMint)];
|
889
|
-
case 1:
|
840
|
+
return [4, this.getCustodyOracleAccountKey(poolConfig.poolName, tokenMint)];
|
841
|
+
case 1:
|
842
|
+
_c.custodyOracleAccount = _d.sent(),
|
843
|
+
_c.collateralCustody = this.getCustodyKey(poolConfig.poolName, tokenMint);
|
844
|
+
return [4, this.getCustodyOracleAccountKey(poolConfig.poolName, collateralMint)];
|
845
|
+
case 2: return [4, _b.apply(_a, [(_c.collateralOracleAccount = _d.sent(),
|
890
846
|
_c.ixSysvar = web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
891
847
|
_c)])
|
892
848
|
.view()
|
@@ -894,11 +850,11 @@ var PerpetualsClient = (function () {
|
|
894
850
|
console.error(err);
|
895
851
|
throw err;
|
896
852
|
})];
|
897
|
-
case
|
853
|
+
case 3: return [2, _d.sent()];
|
898
854
|
}
|
899
855
|
});
|
900
856
|
}); };
|
901
|
-
this.getSwapAmountAndFeesView = function (poolName, tokenMintIn, tokenMintOut, amountIn) { return __awaiter(_this, void 0, void 0, function () {
|
857
|
+
this.getSwapAmountAndFeesView = function (poolName, tokenMintIn, tokenMintOut, amountIn, useFeePool) { return __awaiter(_this, void 0, void 0, function () {
|
902
858
|
var _a, _b;
|
903
859
|
var _c;
|
904
860
|
return __generator(this, function (_d) {
|
@@ -907,6 +863,7 @@ var PerpetualsClient = (function () {
|
|
907
863
|
_b = (_a = this.program.methods
|
908
864
|
.getSwapAmountAndFees({
|
909
865
|
amountIn: amountIn,
|
866
|
+
useFeePool: useFeePool
|
910
867
|
}))
|
911
868
|
.accounts;
|
912
869
|
_c = {
|
@@ -1053,47 +1010,64 @@ var PerpetualsClient = (function () {
|
|
1053
1010
|
return { feeBps: fee, feeAmount: feeAmount };
|
1054
1011
|
};
|
1055
1012
|
this.getMinAndMaxOraclePriceSync = function (price, emaPrice, custodyAccount) {
|
1056
|
-
var
|
1057
|
-
var
|
1013
|
+
var maxPriceUsd = price.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1014
|
+
var minPriceUsd = maxPriceUsd.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1015
|
+
var divergenceBps;
|
1058
1016
|
if (custodyAccount.isStable) {
|
1059
|
-
|
1017
|
+
divergenceBps = maxPriceUsd.getDeviationFactor(OraclePrice_1.OraclePrice.from({
|
1018
|
+
price: new anchor_1.BN(10).pow(maxPriceUsd.exponent.abs()),
|
1019
|
+
exponent: maxPriceUsd.exponent,
|
1020
|
+
confidence: maxPriceUsd.confidence,
|
1021
|
+
timestamp: maxPriceUsd.timestamp
|
1022
|
+
}));
|
1060
1023
|
}
|
1061
1024
|
else {
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1025
|
+
var emaPriceInPriceDecimals = emaPrice.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1026
|
+
divergenceBps = maxPriceUsd.getDeviationFactor(emaPriceInPriceDecimals);
|
1027
|
+
}
|
1028
|
+
if (divergenceBps.gte(custodyAccount.oracle.maxDivergenceBps)) {
|
1029
|
+
var factorBps = (divergenceBps.mul(new anchor_1.BN(constants_1.BPS_POWER))).div(custodyAccount.oracle.maxDivergenceBps);
|
1030
|
+
var confBps = (maxPriceUsd.confidence.muln(constants_1.BPS_POWER)).div(maxPriceUsd.price);
|
1031
|
+
if (confBps.lt(custodyAccount.oracle.maxConfBps)) {
|
1032
|
+
var confFactor = anchor_1.BN.min(factorBps, new anchor_1.BN(50000));
|
1033
|
+
var confScale = (maxPriceUsd.confidence.mul(confFactor)).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1034
|
+
minPriceUsd.price = maxPriceUsd.price.sub(confScale);
|
1035
|
+
return {
|
1036
|
+
min: minPriceUsd,
|
1037
|
+
max: maxPriceUsd
|
1038
|
+
};
|
1068
1039
|
}
|
1069
1040
|
else {
|
1070
|
-
|
1041
|
+
minPriceUsd.price = maxPriceUsd.price.sub(maxPriceUsd.confidence);
|
1042
|
+
return {
|
1043
|
+
min: minPriceUsd,
|
1044
|
+
max: maxPriceUsd
|
1045
|
+
};
|
1071
1046
|
}
|
1072
1047
|
}
|
1073
1048
|
else {
|
1074
1049
|
return {
|
1075
|
-
min:
|
1076
|
-
max:
|
1050
|
+
min: maxPriceUsd,
|
1051
|
+
max: maxPriceUsd
|
1077
1052
|
};
|
1078
1053
|
}
|
1079
|
-
return {
|
1080
|
-
min: minPrice,
|
1081
|
-
max: price
|
1082
|
-
};
|
1083
1054
|
};
|
1084
1055
|
this.getMinAndMaxPriceSync = function (price, emaPrice, custodyAccount) {
|
1085
1056
|
var minPrice = price;
|
1086
|
-
var
|
1057
|
+
var divergenceBps;
|
1087
1058
|
if (custodyAccount.isStable) {
|
1088
|
-
|
1059
|
+
divergenceBps = price.getDeviationFactor(OraclePrice_1.OraclePrice.from({ price: new anchor_1.BN(10).pow(price.exponent.abs()), exponent: price.exponent, confidence: price.confidence, timestamp: price.timestamp }));
|
1089
1060
|
}
|
1090
1061
|
else {
|
1091
|
-
|
1062
|
+
divergenceBps = price.getDeviationFactor(emaPrice);
|
1092
1063
|
}
|
1093
|
-
if (
|
1094
|
-
var
|
1095
|
-
|
1096
|
-
|
1064
|
+
if (divergenceBps.gte(custodyAccount.oracle.maxDivergenceBps)) {
|
1065
|
+
var factorBps = (divergenceBps.mul(new anchor_1.BN(constants_1.BPS_POWER))).div(custodyAccount.oracle.maxDivergenceBps);
|
1066
|
+
var confBps = (price.confidence.muln(constants_1.BPS_POWER)).div(price.price);
|
1067
|
+
if (confBps.lt(custodyAccount.oracle.maxConfBps)) {
|
1068
|
+
var confFactor = anchor_1.BN.min(factorBps, new anchor_1.BN(50000));
|
1069
|
+
var confScale = (price.confidence.mul(confFactor)).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1070
|
+
minPrice.price = price.price.sub(confScale);
|
1097
1071
|
}
|
1098
1072
|
else {
|
1099
1073
|
minPrice.price = price.price.sub(price.confidence);
|
@@ -1101,13 +1075,13 @@ var PerpetualsClient = (function () {
|
|
1101
1075
|
}
|
1102
1076
|
else {
|
1103
1077
|
return {
|
1104
|
-
min: price.scale_to_exponent(new anchor_1.BN(constants_1.
|
1105
|
-
max: price.scale_to_exponent(new anchor_1.BN(constants_1.
|
1078
|
+
min: price.scale_to_exponent(new anchor_1.BN(constants_1.USD_DECIMALS).neg()).price,
|
1079
|
+
max: price.scale_to_exponent(new anchor_1.BN(constants_1.USD_DECIMALS).neg()).price
|
1106
1080
|
};
|
1107
1081
|
}
|
1108
1082
|
return {
|
1109
|
-
min: minPrice.scale_to_exponent(new anchor_1.BN(constants_1.
|
1110
|
-
max: price.scale_to_exponent(new anchor_1.BN(constants_1.
|
1083
|
+
min: minPrice.scale_to_exponent(new anchor_1.BN(constants_1.USD_DECIMALS).neg()).price,
|
1084
|
+
max: price.scale_to_exponent(new anchor_1.BN(constants_1.USD_DECIMALS).neg()).price
|
1111
1085
|
};
|
1112
1086
|
};
|
1113
1087
|
this.checkIfPriceStaleOrCustom = function (price, emaPrice, custodyAccount, timestampInSeconds) {
|
@@ -1124,9 +1098,9 @@ var PerpetualsClient = (function () {
|
|
1124
1098
|
else {
|
1125
1099
|
deviation = price.getDeviationFactor(emaPrice);
|
1126
1100
|
}
|
1127
|
-
if (deviation.gte(custodyAccount.oracle.
|
1101
|
+
if (deviation.gte(custodyAccount.oracle.maxDivergenceBps)) {
|
1128
1102
|
var confFactor = (price.confidence.muln(constants_1.BPS_POWER)).div(price.price);
|
1129
|
-
if (confFactor.lt(custodyAccount.oracle.
|
1103
|
+
if (confFactor.lt(custodyAccount.oracle.maxConfBps)) {
|
1130
1104
|
return false;
|
1131
1105
|
}
|
1132
1106
|
else {
|
@@ -1153,7 +1127,7 @@ var PerpetualsClient = (function () {
|
|
1153
1127
|
return new anchor_1.BN(Number.MAX_SAFE_INTEGER);
|
1154
1128
|
}
|
1155
1129
|
};
|
1156
|
-
this.getLeverageAtAmountEntryWithSwapSync = function (positionAccount, inputDeltaAmount, sizeDeltaAmount, side, poolAccount, inputTokenPrice, inputTokenEmaPrice, inputTokenCustodyAccount, collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount,
|
1130
|
+
this.getLeverageAtAmountEntryWithSwapSync = function (positionAccount, inputDeltaAmount, sizeDeltaAmount, side, poolAccount, inputTokenPrice, inputTokenEmaPrice, inputTokenCustodyAccount, collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount, targetTokenPrice, targetTokenEmaPrice, targetTokenCustodyAccount, poolAumUsdMax, poolConfig, pnlUsd) {
|
1157
1131
|
var finalCollateralAmount = constants_1.BN_ZERO;
|
1158
1132
|
if (!inputDeltaAmount.isZero()) {
|
1159
1133
|
if (inputTokenCustodyAccount.publicKey.equals(collateralTokenCustodyAccount.publicKey)) {
|
@@ -1164,12 +1138,12 @@ var PerpetualsClient = (function () {
|
|
1164
1138
|
finalCollateralAmount = swapAmountOut;
|
1165
1139
|
}
|
1166
1140
|
}
|
1167
|
-
var
|
1141
|
+
var entryPriceUsdBN = _this.getEntryPriceUsdSync(side, targetTokenPrice, targetTokenEmaPrice, targetTokenCustodyAccount);
|
1168
1142
|
var openFeeUsd = constants_1.BN_ZERO;
|
1169
1143
|
if (sizeDeltaAmount != constants_1.BN_ZERO) {
|
1170
|
-
var newEntryPriceOracle = new OraclePrice_1.OraclePrice({ price:
|
1171
|
-
var sizeDeltaUsd = newEntryPriceOracle.getAssetAmountUsd(sizeDeltaAmount,
|
1172
|
-
openFeeUsd = sizeDeltaUsd.mul(
|
1144
|
+
var newEntryPriceOracle = new OraclePrice_1.OraclePrice({ price: entryPriceUsdBN, exponent: new anchor_1.BN(constants_1.USD_DECIMALS).neg(), confidence: targetTokenPrice.confidence, timestamp: targetTokenPrice.timestamp });
|
1145
|
+
var sizeDeltaUsd = newEntryPriceOracle.getAssetAmountUsd(sizeDeltaAmount, targetTokenCustodyAccount.decimals);
|
1146
|
+
openFeeUsd = sizeDeltaUsd.mul(targetTokenCustodyAccount.fees.openPosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1173
1147
|
}
|
1174
1148
|
if (positionAccount === null) {
|
1175
1149
|
var data = __assign({}, types_1.DEFAULT_POSITION);
|
@@ -1177,15 +1151,22 @@ var PerpetualsClient = (function () {
|
|
1177
1151
|
}
|
1178
1152
|
else {
|
1179
1153
|
positionAccount = positionAccount.clone();
|
1180
|
-
|
1154
|
+
var positionEntryPrice = OraclePrice_1.OraclePrice.from({
|
1155
|
+
price: positionAccount.entryPrice.price,
|
1156
|
+
exponent: new anchor_1.BN(positionAccount.entryPrice.exponent),
|
1157
|
+
confidence: constants_1.BN_ZERO,
|
1158
|
+
timestamp: constants_1.BN_ZERO
|
1159
|
+
})
|
1160
|
+
.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1161
|
+
entryPriceUsdBN = _this.getAveragePriceSync(positionEntryPrice.price, positionAccount.sizeAmount, entryPriceUsdBN, sizeDeltaAmount);
|
1181
1162
|
}
|
1182
1163
|
var collateralMinOraclePrice = _this.getMinAndMaxOraclePriceSync(collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount).min;
|
1183
1164
|
var collateralAmount = positionAccount.collateralAmount.add(finalCollateralAmount);
|
1184
1165
|
var currentCollateralUsd = collateralMinOraclePrice.getAssetAmountUsd(collateralAmount, collateralTokenCustodyAccount.decimals);
|
1185
1166
|
var currentCollateralUsdIncludingPnl = currentCollateralUsd.add(pnlUsd).sub(openFeeUsd);
|
1186
1167
|
var sizeAmount = positionAccount.sizeAmount.add(sizeDeltaAmount);
|
1187
|
-
var entryOraclePrice = new OraclePrice_1.OraclePrice({ price:
|
1188
|
-
var sizeAmountUsd = entryOraclePrice.getAssetAmountUsd(sizeAmount,
|
1168
|
+
var entryOraclePrice = new OraclePrice_1.OraclePrice({ price: entryPriceUsdBN, exponent: new anchor_1.BN(constants_1.USD_DECIMALS).neg(), confidence: targetTokenPrice.confidence, timestamp: targetTokenPrice.timestamp });
|
1169
|
+
var sizeAmountUsd = entryOraclePrice.getAssetAmountUsd(sizeAmount, targetTokenCustodyAccount.decimals);
|
1189
1170
|
if (currentCollateralUsdIncludingPnl.gt(constants_1.BN_ZERO)) {
|
1190
1171
|
return sizeAmountUsd.mul(new anchor_1.BN(constants_1.BPS_POWER)).div(currentCollateralUsdIncludingPnl);
|
1191
1172
|
}
|
@@ -1193,99 +1174,168 @@ var PerpetualsClient = (function () {
|
|
1193
1174
|
return new anchor_1.BN(Number.MAX_SAFE_INTEGER);
|
1194
1175
|
}
|
1195
1176
|
};
|
1196
|
-
this.getEntryPriceAndFeeSync = function (positionAccount, collateralDeltaAmount, sizeDeltaAmount, side,
|
1177
|
+
this.getEntryPriceAndFeeSync = function (positionAccount, marketCorrelation, collateralDeltaAmount, sizeDeltaAmount, side, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, discountBps) {
|
1178
|
+
if (discountBps === void 0) { discountBps = constants_1.BN_ZERO; }
|
1197
1179
|
if (collateralDeltaAmount.isNeg() || sizeDeltaAmount.isNeg()) {
|
1198
1180
|
throw new Error("Delta Amounts cannot be negative.");
|
1199
1181
|
}
|
1200
|
-
var
|
1182
|
+
var entryPriceUsdBN = _this.getEntryPriceUsdSync(side, targetPrice, targetEmaPrice, targetCustodyAccount);
|
1183
|
+
var oracleEntryPrice = OraclePrice_1.OraclePrice.from({ price: entryPriceUsdBN, exponent: new anchor_1.BN(-1 * constants_1.USD_DECIMALS), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO });
|
1201
1184
|
if (positionAccount === null) {
|
1202
1185
|
var data = __assign({}, types_1.DEFAULT_POSITION);
|
1203
1186
|
positionAccount = PositionAccount_1.PositionAccount.from(web3_js_1.PublicKey.default, data);
|
1187
|
+
var sizeUsd = oracleEntryPrice.getAssetAmountUsd(sizeDeltaAmount, targetCustodyAccount.decimals);
|
1188
|
+
positionAccount.sizeUsd = sizeUsd;
|
1189
|
+
positionAccount.sizeDecimals = targetCustodyAccount.decimals;
|
1190
|
+
positionAccount.collateralDecimals = collateralCustodyAccount.decimals;
|
1191
|
+
positionAccount.lockedDecimals = collateralCustodyAccount.decimals;
|
1204
1192
|
}
|
1205
1193
|
else {
|
1206
1194
|
positionAccount = positionAccount.clone();
|
1207
|
-
|
1195
|
+
var positionEntryPrice = OraclePrice_1.OraclePrice.from({
|
1196
|
+
price: positionAccount.entryPrice.price,
|
1197
|
+
exponent: new anchor_1.BN(positionAccount.entryPrice.exponent),
|
1198
|
+
confidence: constants_1.BN_ZERO,
|
1199
|
+
timestamp: constants_1.BN_ZERO
|
1200
|
+
})
|
1201
|
+
.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1202
|
+
entryPriceUsdBN = _this.getAveragePriceSync(positionEntryPrice.price, positionAccount.sizeAmount, entryPriceUsdBN, sizeDeltaAmount);
|
1203
|
+
var sizeDeltaUsd = oracleEntryPrice.getAssetAmountUsd(sizeDeltaAmount, targetCustodyAccount.decimals);
|
1204
|
+
positionAccount.sizeUsd = positionAccount.sizeUsd.add(sizeDeltaUsd);
|
1208
1205
|
}
|
1209
1206
|
positionAccount.collateralAmount = positionAccount.collateralAmount.add(collateralDeltaAmount);
|
1210
1207
|
positionAccount.sizeAmount = positionAccount.sizeAmount.add(sizeDeltaAmount);
|
1211
|
-
var
|
1212
|
-
var liquidationPrice = _this.getLiquidationPriceSync(positionAccount.collateralAmount, positionAccount.sizeAmount,
|
1213
|
-
var entryOraclePrice = new OraclePrice_1.OraclePrice({ price:
|
1214
|
-
var sizeAmountUsd = entryOraclePrice.getAssetAmountUsd(sizeDeltaAmount,
|
1208
|
+
var lockFeeUsd = _this.getLockFeeUsdForPosition(positionAccount, collateralCustodyAccount, currentTimestamp);
|
1209
|
+
var liquidationPrice = _this.getLiquidationPriceSync(positionAccount.collateralAmount, positionAccount.sizeAmount, entryPriceUsdBN, lockFeeUsd, positionAccount.unsettledFeesUsd, marketCorrelation, side, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, positionAccount);
|
1210
|
+
var entryOraclePrice = new OraclePrice_1.OraclePrice({ price: entryPriceUsdBN, exponent: new anchor_1.BN(constants_1.USD_DECIMALS).neg(), confidence: targetPrice.confidence, timestamp: targetPrice.timestamp });
|
1211
|
+
var sizeAmountUsd = entryOraclePrice.getAssetAmountUsd(sizeDeltaAmount, targetCustodyAccount.decimals);
|
1215
1212
|
var collateralTokenMinOraclePrice = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount).min;
|
1216
1213
|
var feeUsd = constants_1.BN_ZERO;
|
1217
1214
|
var feeAmount = constants_1.BN_ZERO;
|
1215
|
+
var feeUsdAfterDiscount = constants_1.BN_ZERO;
|
1216
|
+
var feeAmountAfterDiscount = constants_1.BN_ZERO;
|
1218
1217
|
if (positionAccount !== null && sizeDeltaAmount.isZero()) {
|
1219
1218
|
}
|
1220
1219
|
else {
|
1221
|
-
feeUsd = sizeAmountUsd.mul(
|
1220
|
+
feeUsd = sizeAmountUsd.mul(targetCustodyAccount.fees.openPosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1222
1221
|
feeAmount = feeUsd.mul(new anchor_1.BN(Math.pow(10, collateralCustodyAccount.decimals))).div(collateralTokenMinOraclePrice.price);
|
1222
|
+
if (discountBps.gt(constants_1.BN_ZERO)) {
|
1223
|
+
feeUsdAfterDiscount = feeUsd.mul(discountBps).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1224
|
+
feeUsdAfterDiscount = feeUsd.sub(feeUsdAfterDiscount);
|
1225
|
+
feeAmountAfterDiscount = feeUsdAfterDiscount.mul(new anchor_1.BN(Math.pow(10, collateralCustodyAccount.decimals))).div(collateralTokenMinOraclePrice.price);
|
1226
|
+
}
|
1227
|
+
else {
|
1228
|
+
feeUsdAfterDiscount = feeUsd;
|
1229
|
+
feeAmountAfterDiscount = feeAmount;
|
1230
|
+
}
|
1223
1231
|
}
|
1224
1232
|
return {
|
1225
|
-
entryPrice:
|
1233
|
+
entryPrice: entryPriceUsdBN,
|
1226
1234
|
feeUsd: feeUsd,
|
1227
1235
|
feeAmount: feeAmount,
|
1236
|
+
feeUsdAfterDiscount: feeUsdAfterDiscount,
|
1237
|
+
feeAmountAfterDiscount: feeAmountAfterDiscount,
|
1228
1238
|
liquidationPrice: liquidationPrice
|
1229
1239
|
};
|
1230
1240
|
};
|
1231
|
-
this.
|
1232
|
-
var _a = _this.getMinAndMaxPriceSync(
|
1233
|
-
var entryPriceBN = side ===
|
1234
|
-
|
1235
|
-
|
1236
|
-
minPrice.sub(minPrice.mul(marketCustodyAccount.pricing.tradeSpreadShort).div(new anchor_1.BN(constants_1.BPS_POWER)));
|
1241
|
+
this.getEntryPriceUsdSync = function (side, targetPrice, targetEmaPrice, targetCustodyAccount) {
|
1242
|
+
var _a = _this.getMinAndMaxPriceSync(targetPrice, targetEmaPrice, targetCustodyAccount), minPrice = _a.min, maxPrice = _a.max;
|
1243
|
+
var entryPriceBN = (0, types_1.isVariant)(side, 'long') === types_1.Side.Long ?
|
1244
|
+
maxPrice.add(maxPrice.mul(targetCustodyAccount.pricing.tradeSpreadLong).div(new anchor_1.BN(constants_1.BPS_POWER))) :
|
1245
|
+
minPrice.sub(minPrice.mul(targetCustodyAccount.pricing.tradeSpreadShort).div(new anchor_1.BN(constants_1.BPS_POWER)));
|
1237
1246
|
return entryPriceBN;
|
1238
1247
|
};
|
1239
|
-
this.
|
1240
|
-
|
1248
|
+
this.getExitFeeSync = function (positionAccount, targetCustody, collateralCustodyAccount, collateralPrice, collateralEmaPrice) {
|
1249
|
+
var exitFeeUsd = positionAccount.sizeUsd.mul(targetCustody.fees.closePosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1250
|
+
var collateralTokenMinOraclePrice = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount).min;
|
1251
|
+
var exitFeeAmount = collateralTokenMinOraclePrice.getTokenAmount(exitFeeUsd, collateralCustodyAccount.decimals);
|
1252
|
+
return {
|
1253
|
+
exitFeeAmount: exitFeeAmount,
|
1254
|
+
exitFeeUsd: exitFeeUsd
|
1255
|
+
};
|
1256
|
+
};
|
1257
|
+
this.getExitPriceAndFeeSync = function (positionAccount, marketCorrelation, collateralDeltaAmount, sizeDeltaAmount, side, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, discountBps) {
|
1258
|
+
if (discountBps === void 0) { discountBps = constants_1.BN_ZERO; }
|
1259
|
+
var resultingPositionAccount = positionAccount.clone();
|
1241
1260
|
if (collateralDeltaAmount.isNeg() || sizeDeltaAmount.isNeg()) {
|
1242
1261
|
throw new Error("Delta Amounts cannot be negative ");
|
1243
1262
|
}
|
1244
|
-
|
1245
|
-
|
1246
|
-
if (
|
1263
|
+
resultingPositionAccount.collateralAmount = resultingPositionAccount.collateralAmount.sub(collateralDeltaAmount);
|
1264
|
+
resultingPositionAccount.sizeAmount = resultingPositionAccount.sizeAmount.sub(sizeDeltaAmount);
|
1265
|
+
if (resultingPositionAccount.collateralAmount.isNeg() || resultingPositionAccount.sizeAmount.isNeg()) {
|
1247
1266
|
throw new Error("cannot remove/close more than collateral/Size");
|
1248
1267
|
}
|
1249
|
-
var
|
1268
|
+
var exitOraclePrice = _this.getExitOraclePriceSync(side, targetPrice, targetEmaPrice, targetCustodyAccount);
|
1250
1269
|
var _a = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount), collateralTokenMinOraclePrice = _a.min, collateralTokenMaxOraclePrice = _a.max;
|
1251
|
-
var
|
1252
|
-
var
|
1253
|
-
var
|
1254
|
-
var
|
1255
|
-
var
|
1256
|
-
var
|
1257
|
-
var
|
1270
|
+
var lockFeeUsd = _this.getLockFeeUsdForPosition(resultingPositionAccount, collateralCustodyAccount, currentTimestamp);
|
1271
|
+
var lockFee = collateralTokenMinOraclePrice.getTokenAmount(lockFeeUsd, collateralCustodyAccount.decimals);
|
1272
|
+
var sizeAmountUsd = exitOraclePrice.getAssetAmountUsd(sizeDeltaAmount, targetCustodyAccount.decimals);
|
1273
|
+
var exitFeeUsd = sizeAmountUsd.mul(targetCustodyAccount.fees.closePosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1274
|
+
var exitFeeAmount = collateralTokenMaxOraclePrice.getTokenAmount(exitFeeUsd, collateralCustodyAccount.decimals);
|
1275
|
+
var exitFeeUsdAfterDiscount = constants_1.BN_ZERO;
|
1276
|
+
var exitFeeAmountAfterDiscount = constants_1.BN_ZERO;
|
1277
|
+
if (discountBps.gt(constants_1.BN_ZERO)) {
|
1278
|
+
exitFeeUsdAfterDiscount = exitFeeUsd.mul(discountBps).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1279
|
+
exitFeeUsdAfterDiscount = exitFeeUsd.sub(exitFeeUsdAfterDiscount);
|
1280
|
+
exitFeeAmountAfterDiscount = collateralTokenMaxOraclePrice.getTokenAmount(exitFeeUsdAfterDiscount, collateralCustodyAccount.decimals);
|
1281
|
+
}
|
1282
|
+
else {
|
1283
|
+
exitFeeUsdAfterDiscount = exitFeeUsd;
|
1284
|
+
exitFeeAmountAfterDiscount = exitFeeAmount;
|
1285
|
+
}
|
1286
|
+
var positionEntryOraclePrice = new OraclePrice_1.OraclePrice({
|
1287
|
+
price: positionAccount.entryPrice.price, exponent: new anchor_1.BN(positionAccount.entryPrice.exponent), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO
|
1288
|
+
}).scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1289
|
+
var positionEntryPriceUsd = positionEntryOraclePrice.price;
|
1290
|
+
resultingPositionAccount.sizeUsd = positionEntryOraclePrice.getAssetAmountUsd(resultingPositionAccount.sizeAmount, targetCustodyAccount.decimals);
|
1291
|
+
var liquidationPrice = _this.getLiquidationPriceSync(resultingPositionAccount.collateralAmount, resultingPositionAccount.sizeAmount, positionEntryPriceUsd, lockFeeUsd, resultingPositionAccount.unsettledFeesUsd, marketCorrelation, side, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, positionAccount);
|
1258
1292
|
return {
|
1259
|
-
exitPrice:
|
1260
|
-
borrowFeeUsd:
|
1261
|
-
borrowFeeAmount:
|
1262
|
-
exitFeeUsd:
|
1263
|
-
exitFeeAmount:
|
1293
|
+
exitPrice: exitOraclePrice.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS)).price,
|
1294
|
+
borrowFeeUsd: lockFeeUsd,
|
1295
|
+
borrowFeeAmount: lockFee,
|
1296
|
+
exitFeeUsd: exitFeeUsd,
|
1297
|
+
exitFeeAmount: exitFeeAmount,
|
1298
|
+
exitFeeUsdAfterDiscount: exitFeeUsdAfterDiscount,
|
1299
|
+
exitFeeAmountAfterDiscount: exitFeeAmountAfterDiscount,
|
1264
1300
|
liquidationPrice: liquidationPrice
|
1265
1301
|
};
|
1266
1302
|
};
|
1267
|
-
this.getExitPriceSync = function (side,
|
1268
|
-
var _a = _this.getMinAndMaxPriceSync(
|
1269
|
-
var exitPriceBN = side
|
1270
|
-
|
1271
|
-
|
1272
|
-
maxPrice.add(maxPrice.mul(marketCustodyAccount.pricing.tradeSpreadLong).div(new anchor_1.BN(constants_1.BPS_POWER)));
|
1303
|
+
this.getExitPriceSync = function (side, targetPrice, targetEmaPrice, targetCustodyAccount) {
|
1304
|
+
var _a = _this.getMinAndMaxPriceSync(targetPrice, targetEmaPrice, targetCustodyAccount), minPrice = _a.min, maxPrice = _a.max;
|
1305
|
+
var exitPriceBN = (0, types_1.isVariant)(side, 'long') ?
|
1306
|
+
minPrice.sub(minPrice.mul(targetCustodyAccount.pricing.tradeSpreadShort).div(new anchor_1.BN(constants_1.BPS_POWER))) :
|
1307
|
+
maxPrice.add(maxPrice.mul(targetCustodyAccount.pricing.tradeSpreadLong).div(new anchor_1.BN(constants_1.BPS_POWER)));
|
1273
1308
|
return exitPriceBN;
|
1274
1309
|
};
|
1275
|
-
this.
|
1310
|
+
this.getExitOraclePriceSync = function (side, targetPrice, targetEmaPrice, targetCustodyAccount) {
|
1311
|
+
var _a = _this.getMinAndMaxOraclePriceSync(targetPrice, targetEmaPrice, targetCustodyAccount), minPrice = _a.min, maxPrice = _a.max;
|
1312
|
+
if ((0, types_1.isVariant)(side, 'long')) {
|
1313
|
+
return minPrice;
|
1314
|
+
}
|
1315
|
+
else {
|
1316
|
+
return maxPrice;
|
1317
|
+
}
|
1318
|
+
};
|
1319
|
+
this.getSizeAmountFromLeverageAndCollateral = function (collateralAmtWithFee, leverage, marketToken, collateralToken, side, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, discountBps) {
|
1320
|
+
if (discountBps === void 0) { discountBps = constants_1.BN_ZERO; }
|
1276
1321
|
var collateralTokenMinPrice = _this.getMinAndMaxPriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount).min;
|
1277
|
-
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.
|
1278
|
-
var
|
1279
|
-
var
|
1322
|
+
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1323
|
+
var entryPriceUsdBN = _this.getEntryPriceUsdSync(side, targetPrice, targetEmaPrice, targetCustodyAccount);
|
1324
|
+
var entryPriceUsdUi = new bignumber_js_1.default(entryPriceUsdBN.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1280
1325
|
var collateralAmtMinUsdUi = new bignumber_js_1.default(collateralAmtWithFee.toString()).dividedBy(Math.pow(10, collateralToken.decimals))
|
1281
1326
|
.multipliedBy(collateralTokenMinPriceUi);
|
1282
|
-
var openPosFeeRateUi = new bignumber_js_1.default(
|
1327
|
+
var openPosFeeRateUi = new bignumber_js_1.default(targetCustodyAccount.fees.openPosition.toString()).dividedBy(Math.pow(10, constants_1.RATE_DECIMALS));
|
1328
|
+
if (!discountBps.isZero()) {
|
1329
|
+
var discountBpsUi = new bignumber_js_1.default(discountBps.toString()).dividedBy(Math.pow(10, constants_1.BPS_DECIMALS));
|
1330
|
+
openPosFeeRateUi = openPosFeeRateUi.multipliedBy(new bignumber_js_1.default(1).minus(discountBpsUi));
|
1331
|
+
}
|
1283
1332
|
var sizeUsdUi = collateralAmtMinUsdUi.multipliedBy(leverage)
|
1284
1333
|
.dividedBy(new bignumber_js_1.default(1).plus(openPosFeeRateUi.multipliedBy(leverage)));
|
1285
|
-
var sizeAmountUi = sizeUsdUi.dividedBy(
|
1334
|
+
var sizeAmountUi = sizeUsdUi.dividedBy(entryPriceUsdUi);
|
1286
1335
|
return (0, utils_1.uiDecimalsToNative)(sizeAmountUi.toFixed(marketToken.decimals, bignumber_js_1.default.ROUND_DOWN), marketToken.decimals);
|
1287
1336
|
};
|
1288
|
-
this.getSizeAmountWithSwapSync = function (amountIn, leverage, side, poolAccount, inputTokenPrice, inputTokenEmaPrice, inputTokenCustodyAccount, collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount,
|
1337
|
+
this.getSizeAmountWithSwapSync = function (amountIn, leverage, side, poolAccount, inputTokenPrice, inputTokenEmaPrice, inputTokenCustodyAccount, collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount, targetTokenPrice, targetTokenEmaPrice, targetTokenCustodyAccount, poolAumUsdMax, poolConfig, discountBps) {
|
1338
|
+
if (discountBps === void 0) { discountBps = constants_1.BN_ZERO; }
|
1289
1339
|
var finalCollateralAmount = constants_1.BN_ZERO;
|
1290
1340
|
if (inputTokenCustodyAccount.publicKey.equals(collateralTokenCustodyAccount.publicKey)) {
|
1291
1341
|
finalCollateralAmount = amountIn;
|
@@ -1296,37 +1346,46 @@ var PerpetualsClient = (function () {
|
|
1296
1346
|
finalCollateralAmount = swapAmountOut;
|
1297
1347
|
}
|
1298
1348
|
var collateralTokenMinPrice = _this.getMinAndMaxPriceSync(collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount).min;
|
1299
|
-
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.
|
1300
|
-
var
|
1301
|
-
var
|
1349
|
+
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1350
|
+
var entryPriceUsdBN = _this.getEntryPriceUsdSync(side, targetTokenPrice, targetTokenEmaPrice, targetTokenCustodyAccount);
|
1351
|
+
var entryPriceUsdUi = new bignumber_js_1.default(entryPriceUsdBN.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1302
1352
|
var collateralAmtMinUsdUi = new bignumber_js_1.default(finalCollateralAmount.toString()).dividedBy(Math.pow(10, collateralTokenCustodyAccount.decimals))
|
1303
1353
|
.multipliedBy(collateralTokenMinPriceUi);
|
1304
|
-
var openPosFeeRateUi = new bignumber_js_1.default(
|
1354
|
+
var openPosFeeRateUi = new bignumber_js_1.default(targetTokenCustodyAccount.fees.openPosition.toString()).dividedBy(Math.pow(10, constants_1.RATE_DECIMALS));
|
1355
|
+
if (!discountBps.isZero()) {
|
1356
|
+
var discountBpsUi = new bignumber_js_1.default(discountBps.toString()).dividedBy(Math.pow(10, constants_1.BPS_DECIMALS));
|
1357
|
+
openPosFeeRateUi = openPosFeeRateUi.multipliedBy(new bignumber_js_1.default(1).minus(discountBpsUi));
|
1358
|
+
}
|
1305
1359
|
var sizeUsdUi = collateralAmtMinUsdUi.multipliedBy(leverage)
|
1306
1360
|
.dividedBy(new bignumber_js_1.default(1).plus(openPosFeeRateUi.multipliedBy(leverage)));
|
1307
|
-
var sizeAmountUi = sizeUsdUi.dividedBy(
|
1308
|
-
return (0, utils_1.uiDecimalsToNative)(sizeAmountUi.toFixed(
|
1361
|
+
var sizeAmountUi = sizeUsdUi.dividedBy(entryPriceUsdUi);
|
1362
|
+
return (0, utils_1.uiDecimalsToNative)(sizeAmountUi.toFixed(targetTokenCustodyAccount.decimals, bignumber_js_1.default.ROUND_DOWN), targetTokenCustodyAccount.decimals);
|
1309
1363
|
};
|
1310
|
-
this.getCollateralAmountWithFeeFromLeverageAndSize = function (sizeAmount, leverage, marketToken, collateralToken, side,
|
1364
|
+
this.getCollateralAmountWithFeeFromLeverageAndSize = function (sizeAmount, leverage, marketToken, collateralToken, side, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, discountBps) {
|
1365
|
+
if (discountBps === void 0) { discountBps = constants_1.BN_ZERO; }
|
1311
1366
|
var collateralTokenMinPrice = _this.getMinAndMaxPriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount).min;
|
1312
|
-
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.
|
1313
|
-
var
|
1314
|
-
var
|
1315
|
-
var openPosFeeRateUi = new bignumber_js_1.default(
|
1367
|
+
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1368
|
+
var entryPriceUsdBN = _this.getEntryPriceUsdSync(side, targetPrice, targetEmaPrice, targetCustodyAccount);
|
1369
|
+
var entryPriceUsdUi = new bignumber_js_1.default(entryPriceUsdBN.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1370
|
+
var openPosFeeRateUi = new bignumber_js_1.default(targetCustodyAccount.fees.openPosition.toString()).dividedBy(Math.pow(10, constants_1.RATE_DECIMALS));
|
1371
|
+
if (!discountBps.isZero()) {
|
1372
|
+
var discountBpsUi = new bignumber_js_1.default(discountBps.toString()).dividedBy(Math.pow(10, constants_1.BPS_DECIMALS));
|
1373
|
+
openPosFeeRateUi = openPosFeeRateUi.multipliedBy(new bignumber_js_1.default(1).minus(discountBpsUi));
|
1374
|
+
}
|
1316
1375
|
var sizeAmountUi = new bignumber_js_1.default(sizeAmount.toString()).dividedBy(Math.pow(10, marketToken.decimals));
|
1317
|
-
var sizeUsdUi =
|
1376
|
+
var sizeUsdUi = entryPriceUsdUi.multipliedBy(sizeAmountUi);
|
1318
1377
|
var collateralWithFeeUsdUi = sizeUsdUi.multipliedBy(new bignumber_js_1.default(1).plus(openPosFeeRateUi.multipliedBy(leverage))).dividedBy(leverage);
|
1319
1378
|
var collateralAmtWithFeeUi = collateralWithFeeUsdUi.dividedBy(collateralTokenMinPriceUi);
|
1320
1379
|
return (0, utils_1.uiDecimalsToNative)(collateralAmtWithFeeUi.toFixed(collateralToken.decimals, bignumber_js_1.default.ROUND_DOWN), collateralToken.decimals);
|
1321
1380
|
};
|
1322
|
-
this.getCollateralAmountWithSwapSync = function (sizeAmount, leverage, side, poolAccount, inputTokenPrice, inputTokenEmaPrice, inputTokenCustodyAccount, collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount,
|
1381
|
+
this.getCollateralAmountWithSwapSync = function (sizeAmount, leverage, side, poolAccount, inputTokenPrice, inputTokenEmaPrice, inputTokenCustodyAccount, collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount, targetTokenPrice, targetTokenEmaPrice, targetTokenCustodyAccount, poolAumUsdMax, poolConfig) {
|
1323
1382
|
var collateralTokenMinPrice = _this.getMinAndMaxPriceSync(collateralTokenPrice, collateralTokenEmaPrice, collateralTokenCustodyAccount).min;
|
1324
|
-
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.
|
1325
|
-
var
|
1326
|
-
var
|
1327
|
-
var openPosFeeRateUi = new bignumber_js_1.default(
|
1328
|
-
var sizeAmountUi = new bignumber_js_1.default(sizeAmount.toString()).dividedBy(Math.pow(10,
|
1329
|
-
var sizeUsdUi =
|
1383
|
+
var collateralTokenMinPriceUi = new bignumber_js_1.default(collateralTokenMinPrice.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1384
|
+
var entryPriceUsdBN = _this.getEntryPriceUsdSync(side, targetTokenPrice, targetTokenEmaPrice, targetTokenCustodyAccount);
|
1385
|
+
var entryPriceUsdUi = new bignumber_js_1.default(entryPriceUsdBN.toString()).dividedBy(Math.pow(10, constants_1.USD_DECIMALS));
|
1386
|
+
var openPosFeeRateUi = new bignumber_js_1.default(targetTokenCustodyAccount.fees.openPosition.toString()).dividedBy(Math.pow(10, constants_1.RATE_DECIMALS));
|
1387
|
+
var sizeAmountUi = new bignumber_js_1.default(sizeAmount.toString()).dividedBy(Math.pow(10, targetTokenCustodyAccount.decimals));
|
1388
|
+
var sizeUsdUi = entryPriceUsdUi.multipliedBy(sizeAmountUi);
|
1330
1389
|
var collateralWithFeeUsdUi = sizeUsdUi.multipliedBy(new bignumber_js_1.default(1).plus(openPosFeeRateUi.multipliedBy(leverage))).dividedBy(leverage);
|
1331
1390
|
var collateralAmtWithFeeUi = collateralWithFeeUsdUi.dividedBy(collateralTokenMinPriceUi);
|
1332
1391
|
var collateralAmountWithFee = (0, utils_1.uiDecimalsToNative)(collateralAmtWithFeeUi.toFixed(collateralTokenCustodyAccount.decimals, bignumber_js_1.default.ROUND_DOWN), collateralTokenCustodyAccount.decimals);
|
@@ -1340,56 +1399,76 @@ var PerpetualsClient = (function () {
|
|
1340
1399
|
}
|
1341
1400
|
return collateralInInputToken;
|
1342
1401
|
};
|
1343
|
-
this.getDecreaseSizeCollateralAndFeeSync = function (positionAccount, sizeDeltaUsd, keepLevSame,
|
1344
|
-
if (
|
1402
|
+
this.getDecreaseSizeCollateralAndFeeSync = function (positionAccount, marketCorrelation, sizeDeltaUsd, keepLevSame, targetPrice, targetEmaPrice, marketConfig, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, side, poolConfig, discountBps) {
|
1403
|
+
if (discountBps === void 0) { discountBps = constants_1.BN_ZERO; }
|
1404
|
+
if (!marketConfig.marketAccount.equals(positionAccount.market)) {
|
1405
|
+
throw new Error("marketCustodyAccount mismatch");
|
1406
|
+
}
|
1407
|
+
if (!targetCustodyAccount.publicKey.equals(marketConfig.targetCustody)) {
|
1345
1408
|
throw new Error("marketCustodyAccount mismatch");
|
1346
1409
|
}
|
1347
|
-
if (!collateralCustodyAccount.publicKey.equals(
|
1410
|
+
if (!collateralCustodyAccount.publicKey.equals(marketConfig.collateralCustody)) {
|
1348
1411
|
throw new Error("collateralCustodyAccount mismatch");
|
1349
1412
|
}
|
1350
1413
|
var collateralMinMaxPrice = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount);
|
1351
|
-
var marketMinMaxPrice = _this.getMinAndMaxOraclePriceSync(
|
1414
|
+
var marketMinMaxPrice = _this.getMinAndMaxOraclePriceSync(targetPrice, targetEmaPrice, targetCustodyAccount);
|
1352
1415
|
var positionDelta = PositionAccount_1.PositionAccount.from(positionAccount.publicKey, __assign({}, positionAccount));
|
1353
|
-
var
|
1416
|
+
var positionEntryOraclePrice = new OraclePrice_1.OraclePrice({
|
1417
|
+
price: positionAccount.entryPrice.price, exponent: new anchor_1.BN(positionAccount.entryPrice.exponent), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO
|
1418
|
+
});
|
1419
|
+
var sizeDeltaAmount = positionEntryOraclePrice.getTokenAmount(sizeDeltaUsd, targetCustodyAccount.decimals);
|
1354
1420
|
positionDelta.sizeAmount = sizeDeltaAmount;
|
1355
|
-
var decimalPower = new anchor_1.BN(Math.pow(10,
|
1421
|
+
var decimalPower = new anchor_1.BN(Math.pow(10, targetCustodyAccount.decimals));
|
1356
1422
|
var closeRatio = (positionDelta.sizeAmount.mul(decimalPower)).div(positionAccount.sizeAmount);
|
1357
1423
|
positionDelta.sizeUsd = (positionAccount.sizeUsd.mul(closeRatio)).div(decimalPower);
|
1358
|
-
positionDelta.
|
1359
|
-
positionDelta.unrealizedLossUsd = (positionAccount.unrealizedLossUsd.mul(closeRatio)).div(decimalPower);
|
1424
|
+
positionDelta.unsettledFeesUsd = (positionAccount.unsettledFeesUsd.mul(closeRatio)).div(decimalPower);
|
1360
1425
|
positionDelta.lockedAmount = (positionAccount.lockedAmount.mul(closeRatio)).div(decimalPower);
|
1426
|
+
positionDelta.lockedUsd = (positionAccount.lockedUsd.mul(closeRatio)).div(decimalPower);
|
1361
1427
|
positionDelta.collateralAmount = (positionAccount.collateralAmount.mul(closeRatio)).div(decimalPower);
|
1362
|
-
var newPnl = _this.getPnlSync(positionDelta,
|
1428
|
+
var newPnl = _this.getPnlSync(positionDelta, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, targetCustodyAccount.pricing.delaySeconds, poolConfig);
|
1429
|
+
var exitFeeUsd = positionDelta.sizeUsd.mul(targetCustodyAccount.fees.closePosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1430
|
+
if (discountBps.gt(constants_1.BN_ZERO)) {
|
1431
|
+
var discount = exitFeeUsd.mul(discountBps).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1432
|
+
exitFeeUsd = exitFeeUsd.sub(discount);
|
1433
|
+
}
|
1434
|
+
var lockFeeUsd = _this.getLockFeeUsdForPosition(positionDelta, collateralCustodyAccount, currentTimestamp);
|
1435
|
+
var unsettledFeesUsd = (exitFeeUsd.add(lockFeeUsd)).add(positionDelta.unsettledFeesUsd);
|
1363
1436
|
var currentCollateralUsd = collateralMinMaxPrice.min.getAssetAmountUsd(positionDelta.collateralAmount, collateralCustodyAccount.decimals);
|
1364
|
-
var
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1437
|
+
var liabilityUsd = newPnl.lossUsd.add(unsettledFeesUsd);
|
1438
|
+
var assetsUsd = newPnl.profitUsd.add(currentCollateralUsd);
|
1439
|
+
var closeAmount, feesAmount;
|
1440
|
+
if (assetsUsd.gte(liabilityUsd)) {
|
1441
|
+
closeAmount = collateralMinMaxPrice.max.getTokenAmount(assetsUsd.sub(liabilityUsd), collateralCustodyAccount.decimals);
|
1442
|
+
feesAmount = collateralMinMaxPrice.min.getTokenAmount(unsettledFeesUsd, collateralCustodyAccount.decimals);
|
1370
1443
|
}
|
1371
1444
|
else {
|
1372
|
-
|
1445
|
+
closeAmount = constants_1.BN_ZERO;
|
1446
|
+
feesAmount = collateralMinMaxPrice.min.getTokenAmount(assetsUsd.sub(newPnl.lossUsd), collateralCustodyAccount.decimals);
|
1373
1447
|
}
|
1374
|
-
var closeAmount = collateralMinMaxPrice.max.getTokenAmount(availableAmountUsd, collateralCustodyAccount.decimals);
|
1375
|
-
var maxAmount = (positionDelta.lockedAmount.sub(newPnl.exitFeeAmount.add(newPnl.borrowFeeAmount))).add(positionDelta.collateralAmount);
|
1376
|
-
closeAmount = anchor_1.BN.min(closeAmount, maxAmount);
|
1377
1448
|
var newPosition = PositionAccount_1.PositionAccount.from(positionAccount.publicKey, __assign({}, positionAccount));
|
1378
1449
|
newPosition.sizeAmount = positionAccount.sizeAmount.sub(positionDelta.sizeAmount);
|
1379
1450
|
newPosition.sizeUsd = positionAccount.sizeUsd.sub(positionDelta.sizeUsd);
|
1380
|
-
newPosition.
|
1451
|
+
newPosition.lockedUsd = positionAccount.lockedUsd.sub(positionDelta.lockedUsd);
|
1381
1452
|
newPosition.lockedAmount = positionAccount.lockedAmount.sub(positionDelta.lockedAmount);
|
1382
|
-
newPosition.
|
1453
|
+
newPosition.unsettledFeesUsd = positionAccount.unsettledFeesUsd.sub(positionDelta.unsettledFeesUsd);
|
1383
1454
|
newPosition.collateralAmount = positionAccount.collateralAmount.sub(positionDelta.collateralAmount).add(closeAmount);
|
1384
1455
|
newPosition.collateralUsd = collateralMinMaxPrice.min.getAssetAmountUsd(newPosition.collateralAmount, collateralCustodyAccount.decimals);
|
1385
|
-
var
|
1456
|
+
var feeUsdWithDiscount = constants_1.BN_ZERO;
|
1457
|
+
var feeUsd = sizeDeltaUsd.mul(targetCustodyAccount.fees.closePosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1458
|
+
if (discountBps.gt(constants_1.BN_ZERO)) {
|
1459
|
+
feeUsdWithDiscount = feeUsd.mul(discountBps).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1460
|
+
feeUsdWithDiscount = exitFeeUsd.sub(feeUsdWithDiscount);
|
1461
|
+
}
|
1462
|
+
else {
|
1463
|
+
feeUsdWithDiscount = feeUsd;
|
1464
|
+
}
|
1386
1465
|
if (keepLevSame) {
|
1387
|
-
var previousPnl = _this.getPnlSync(positionAccount,
|
1466
|
+
var previousPnl = _this.getPnlSync(positionAccount, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, targetCustodyAccount.pricing.delaySeconds, poolConfig);
|
1388
1467
|
var pnlUsd = previousPnl.profitUsd.sub(previousPnl.lossUsd);
|
1389
1468
|
var currentlev = _this.getLeverageSync(positionAccount.sizeUsd, positionAccount.collateralAmount, collateralMinMaxPrice.min, collateralCustodyAccount.decimals, pnlUsd);
|
1390
1469
|
var collateralAmountRecievedUsd = newPosition.collateralUsd.sub(newPosition.sizeUsd.mul(new anchor_1.BN(constants_1.BPS_POWER)).div(currentlev));
|
1391
1470
|
var collateralAmountReceived = collateralMinMaxPrice.max.getTokenAmount(collateralAmountRecievedUsd, collateralCustodyAccount.decimals);
|
1392
|
-
var maxWithdrawableAmount = _this.getMaxWithdrawableAmountSync(newPosition,
|
1471
|
+
var maxWithdrawableAmount = _this.getMaxWithdrawableAmountSync(newPosition, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, poolConfig);
|
1393
1472
|
if (collateralAmountReceived.lt(constants_1.BN_ZERO)) {
|
1394
1473
|
collateralAmountReceived = constants_1.BN_ZERO;
|
1395
1474
|
collateralAmountRecievedUsd = constants_1.BN_ZERO;
|
@@ -1398,17 +1477,22 @@ var PerpetualsClient = (function () {
|
|
1398
1477
|
collateralAmountReceived = maxWithdrawableAmount;
|
1399
1478
|
collateralAmountRecievedUsd = collateralMinMaxPrice.min.getAssetAmountUsd(maxWithdrawableAmount, collateralCustodyAccount.decimals);
|
1400
1479
|
}
|
1401
|
-
var collateralFeeUsd = collateralAmountRecievedUsd.mul(
|
1480
|
+
var collateralFeeUsd = collateralAmountRecievedUsd.mul(targetCustodyAccount.fees.removeCollateral).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1481
|
+
if (discountBps.gt(constants_1.BN_ZERO)) {
|
1482
|
+
var discount = collateralFeeUsd.mul(discountBps).div(new anchor_1.BN(constants_1.BPS_POWER));
|
1483
|
+
collateralFeeUsd = exitFeeUsd.sub(discount);
|
1484
|
+
}
|
1402
1485
|
newPosition.collateralAmount = newPosition.collateralAmount.sub(collateralAmountReceived);
|
1403
1486
|
newPosition.collateralUsd = collateralMinMaxPrice.min.getAssetAmountUsd(newPosition.collateralAmount, collateralCustodyAccount.decimals);
|
1404
|
-
var finalInterestUsd = _this.
|
1405
|
-
var finalLiquidationPrice = _this.getLiquidationPriceSync(newPosition.collateralAmount, newPosition.sizeAmount, newPosition.price, finalInterestUsd, newPosition.
|
1406
|
-
var finalPnl = _this.getPnlSync(newPosition,
|
1487
|
+
var finalInterestUsd = _this.getLockFeeUsdForPosition(newPosition, collateralCustodyAccount, currentTimestamp);
|
1488
|
+
var finalLiquidationPrice = _this.getLiquidationPriceSync(newPosition.collateralAmount, newPosition.sizeAmount, newPosition.entryPrice.price, finalInterestUsd, newPosition.unsettledFeesUsd, marketCorrelation, side, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, newPosition);
|
1489
|
+
var finalPnl = _this.getPnlSync(newPosition, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, targetCustodyAccount.pricing.delaySeconds, poolConfig);
|
1407
1490
|
var finalPnlUsd = finalPnl.profitUsd.sub(finalPnl.lossUsd);
|
1408
1491
|
var newLev = _this.getLeverageSync(newPosition.sizeUsd, newPosition.collateralAmount, collateralMinMaxPrice.min, collateralCustodyAccount.decimals, finalPnlUsd);
|
1409
1492
|
return {
|
1410
1493
|
newSizeUsd: newPosition.sizeUsd,
|
1411
1494
|
feeUsd: feeUsd.add(collateralFeeUsd),
|
1495
|
+
feeUsdWithDiscount: feeUsdWithDiscount.add(collateralFeeUsd),
|
1412
1496
|
newLev: newLev,
|
1413
1497
|
liquidationPrice: finalLiquidationPrice,
|
1414
1498
|
collateralAmountRecieved: collateralAmountReceived,
|
@@ -1417,9 +1501,9 @@ var PerpetualsClient = (function () {
|
|
1417
1501
|
};
|
1418
1502
|
}
|
1419
1503
|
else {
|
1420
|
-
var finalInterestUsd = _this.
|
1421
|
-
var finalLiquidationPrice = _this.getLiquidationPriceSync(newPosition.collateralAmount, newPosition.sizeAmount, newPosition.price, finalInterestUsd, newPosition.
|
1422
|
-
var finalPnl = _this.getPnlSync(newPosition,
|
1504
|
+
var finalInterestUsd = _this.getLockFeeUsdForPosition(newPosition, collateralCustodyAccount, currentTimestamp);
|
1505
|
+
var finalLiquidationPrice = _this.getLiquidationPriceSync(newPosition.collateralAmount, newPosition.sizeAmount, newPosition.entryPrice.price, finalInterestUsd, newPosition.unsettledFeesUsd, marketCorrelation, side, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, newPosition);
|
1506
|
+
var finalPnl = _this.getPnlSync(newPosition, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, targetCustodyAccount.pricing.delaySeconds, poolConfig);
|
1423
1507
|
var finalPnlUsd = finalPnl.profitUsd.sub(finalPnl.lossUsd);
|
1424
1508
|
var newLev = _this.getLeverageSync(newPosition.sizeUsd, newPosition.collateralAmount, collateralMinMaxPrice.min, collateralCustodyAccount.decimals, finalPnlUsd);
|
1425
1509
|
var collateralAmountReceived = newPosition.collateralAmount.sub(positionAccount.collateralAmount);
|
@@ -1429,6 +1513,7 @@ var PerpetualsClient = (function () {
|
|
1429
1513
|
return {
|
1430
1514
|
newSizeUsd: newPosition.sizeUsd,
|
1431
1515
|
feeUsd: feeUsd,
|
1516
|
+
feeUsdWithDiscount: feeUsdWithDiscount,
|
1432
1517
|
newLev: newLev,
|
1433
1518
|
liquidationPrice: finalLiquidationPrice,
|
1434
1519
|
collateralAmountRecieved: collateralAmountReceived,
|
@@ -1437,41 +1522,38 @@ var PerpetualsClient = (function () {
|
|
1437
1522
|
};
|
1438
1523
|
}
|
1439
1524
|
};
|
1440
|
-
this.getFinalCloseAmountSync = function (positionAccount,
|
1525
|
+
this.getFinalCloseAmountSync = function (positionAccount, marketCorrelation, side, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, poolConfig) {
|
1441
1526
|
var position = PositionAccount_1.PositionAccount.from(positionAccount.publicKey, __assign({}, positionAccount));
|
1442
1527
|
var collateralMinMaxPrice = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount);
|
1443
1528
|
var collateralUsd = collateralMinMaxPrice.min.getAssetAmountUsd(position.collateralAmount, collateralCustodyAccount.decimals);
|
1444
|
-
var newPnl = _this.getPnlSync(position,
|
1445
|
-
var
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1529
|
+
var newPnl = _this.getPnlSync(position, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, targetCustodyAccount.pricing.delaySeconds, poolConfig);
|
1530
|
+
var exitPriceAndFee = _this.getExitPriceAndFeeSync(positionAccount, marketCorrelation, positionAccount.collateralAmount, positionAccount.sizeAmount, side, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp);
|
1531
|
+
var unsettledFeesUsd = (exitPriceAndFee.exitFeeUsd.add(exitPriceAndFee.borrowFeeUsd)).add(positionAccount.unsettledFeesUsd);
|
1532
|
+
var liabilityUsd = newPnl.lossUsd.add(unsettledFeesUsd);
|
1533
|
+
var assetsUsd = newPnl.profitUsd.add(collateralMinMaxPrice.min.getAssetAmountUsd(positionAccount.collateralAmount, positionAccount.collateralDecimals));
|
1534
|
+
var closeAmount, feesAmount;
|
1535
|
+
if (assetsUsd.gt(liabilityUsd)) {
|
1536
|
+
closeAmount = collateralMinMaxPrice.max.getTokenAmount(assetsUsd.sub(liabilityUsd), position.collateralDecimals);
|
1537
|
+
feesAmount = collateralMinMaxPrice.min.getTokenAmount(unsettledFeesUsd, positionAccount.collateralDecimals);
|
1451
1538
|
}
|
1452
1539
|
else {
|
1453
|
-
|
1540
|
+
closeAmount = constants_1.BN_ZERO;
|
1541
|
+
feesAmount = collateralMinMaxPrice.min.getTokenAmount(assetsUsd.sub(newPnl.lossUsd), positionAccount.collateralDecimals);
|
1454
1542
|
}
|
1455
|
-
|
1456
|
-
var finalAmount = constants_1.BN_ZERO;
|
1457
|
-
var feeUsd = newPnl.exitFeeUsd.add(newPnl.borrowFeeUsd);
|
1458
|
-
if (!finalUsd.isNeg()) {
|
1459
|
-
finalAmount = collateralMinMaxPrice.min.getTokenAmount(finalUsd, collateralCustodyAccount.decimals);
|
1460
|
-
}
|
1461
|
-
return { finalAmount: finalAmount, feeUsd: feeUsd };
|
1543
|
+
return { closeAmount: closeAmount, feesAmount: feesAmount };
|
1462
1544
|
};
|
1463
|
-
this.getMaxWithdrawableAmountSync = function (positionAccount,
|
1545
|
+
this.getMaxWithdrawableAmountSync = function (positionAccount, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, poolConfig, errorBandwidthPercentageUi) {
|
1464
1546
|
if (errorBandwidthPercentageUi === void 0) { errorBandwidthPercentageUi = 5; }
|
1465
1547
|
if (errorBandwidthPercentageUi > 100 || errorBandwidthPercentageUi < 0) {
|
1466
1548
|
throw new Error("errorBandwidthPercentageUi cannot be >100 or <0");
|
1467
1549
|
}
|
1468
|
-
var MAX_INIT_LEVERAGE =
|
1469
|
-
var maxRemoveableCollateralUsdAfterMinRequired = positionAccount.collateralUsd.sub(
|
1550
|
+
var MAX_INIT_LEVERAGE = targetCustodyAccount.pricing.maxInitialLeverage.mul(new anchor_1.BN(100 - errorBandwidthPercentageUi)).div(new anchor_1.BN(100));
|
1551
|
+
var maxRemoveableCollateralUsdAfterMinRequired = positionAccount.collateralUsd.sub(targetCustodyAccount.pricing.minCollateralUsd.mul(new anchor_1.BN(100 + errorBandwidthPercentageUi)).div(new anchor_1.BN(100)));
|
1470
1552
|
if (maxRemoveableCollateralUsdAfterMinRequired.isNeg()) {
|
1471
1553
|
console.log("THIS cannot happen but still");
|
1472
1554
|
return constants_1.BN_ZERO;
|
1473
1555
|
}
|
1474
|
-
var profitLoss = _this.getPnlSync(positionAccount,
|
1556
|
+
var profitLoss = _this.getPnlSync(positionAccount, targetPrice, targetEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, targetCustodyAccount.pricing.delaySeconds, poolConfig);
|
1475
1557
|
var _a = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount), collateralMinPrice = _a.min, collateralMaxPrice = _a.max;
|
1476
1558
|
var currentCollateralUsd = collateralMinPrice.getAssetAmountUsd(positionAccount.collateralAmount, collateralCustodyAccount.decimals);
|
1477
1559
|
var availableInitMarginUsd = constants_1.BN_ZERO;
|
@@ -1495,133 +1577,142 @@ var PerpetualsClient = (function () {
|
|
1495
1577
|
}
|
1496
1578
|
return maxWithdrawableAmount;
|
1497
1579
|
};
|
1498
|
-
this.
|
1499
|
-
var
|
1580
|
+
this.getCumulativeLockFeeSync = function (custodyAccount, currentTimestamp) {
|
1581
|
+
var cumulativeLockFee = constants_1.BN_ZERO;
|
1500
1582
|
if (currentTimestamp.gt(custodyAccount.borrowRateState.lastUpdate)) {
|
1501
|
-
|
1583
|
+
cumulativeLockFee = (currentTimestamp
|
1502
1584
|
.sub(custodyAccount.borrowRateState.lastUpdate))
|
1503
1585
|
.mul(custodyAccount.borrowRateState.currentRate)
|
1504
1586
|
.div(new anchor_1.BN(3600))
|
1505
|
-
.add(custodyAccount.borrowRateState.
|
1587
|
+
.add(custodyAccount.borrowRateState.cumulativeLockFee);
|
1506
1588
|
}
|
1507
1589
|
else {
|
1508
|
-
|
1590
|
+
cumulativeLockFee = custodyAccount.borrowRateState.cumulativeLockFee;
|
1509
1591
|
}
|
1510
|
-
return
|
1592
|
+
return cumulativeLockFee;
|
1511
1593
|
};
|
1512
|
-
this.
|
1513
|
-
var
|
1514
|
-
var
|
1515
|
-
if (
|
1516
|
-
|
1594
|
+
this.getLockFeeUsdForPosition = function (position, collateralCustodyAccount, currentTimestamp) {
|
1595
|
+
var cumulativeLockFee = _this.getCumulativeLockFeeSync(collateralCustodyAccount, currentTimestamp);
|
1596
|
+
var lockFeeUsd = constants_1.BN_ZERO;
|
1597
|
+
if (cumulativeLockFee.gt(position.cumulativeLockFeeSnapshot)) {
|
1598
|
+
lockFeeUsd = cumulativeLockFee.sub(position.cumulativeLockFeeSnapshot).mul(position.lockedUsd).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1517
1599
|
}
|
1518
|
-
return
|
1600
|
+
return lockFeeUsd;
|
1519
1601
|
};
|
1520
|
-
this.getLiquidationPriceSync = function (collateralAmount, sizeAmount,
|
1602
|
+
this.getLiquidationPriceSync = function (collateralAmount, sizeAmount, entryPriceUsd, lockFeeUsd, unsettledFeesUsd, marketCorrelation, side, custodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, positionAccount) {
|
1521
1603
|
if (collateralAmount.isZero() || sizeAmount.isZero()) {
|
1522
1604
|
return constants_1.BN_ZERO;
|
1523
1605
|
}
|
1524
|
-
var
|
1525
|
-
var
|
1526
|
-
var
|
1527
|
-
var currentUnrealisedUsd = exitFeeUsd.add(interestAmountUsd).add(unrealizedLossUsd);
|
1528
|
-
var liablityThresholdUsd = sizeUsd.mul(new anchor_1.BN(constants_1.BPS_POWER)).div(custodyAccount.pricing.maxLeverage).add(currentUnrealisedUsd);
|
1606
|
+
var exitFeeUsd = positionAccount.sizeUsd.mul(custodyAccount.fees.closePosition).div(new anchor_1.BN(constants_1.RATE_POWER));
|
1607
|
+
var unsettledLossUsd = exitFeeUsd.add(lockFeeUsd).add(unsettledFeesUsd);
|
1608
|
+
var liablityThresholdUsd = positionAccount.sizeUsd.mul(new anchor_1.BN(constants_1.BPS_POWER)).div(custodyAccount.pricing.maxLeverage).add(unsettledLossUsd);
|
1529
1609
|
var collateralMinPriceOracle = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount).min;
|
1530
1610
|
var currentCollateralUsd = collateralMinPriceOracle.getAssetAmountUsd(collateralAmount, collateralCustodyAccount.decimals);
|
1531
|
-
var
|
1532
|
-
|
1533
|
-
|
1611
|
+
var nominalSolvency;
|
1612
|
+
if (currentCollateralUsd.gt(liablityThresholdUsd)) {
|
1613
|
+
nominalSolvency = true;
|
1614
|
+
}
|
1615
|
+
else {
|
1616
|
+
nominalSolvency = false;
|
1617
|
+
}
|
1618
|
+
var remainingMarginUsd, requiredMarginUsd;
|
1619
|
+
if (nominalSolvency) {
|
1620
|
+
remainingMarginUsd = currentCollateralUsd.sub(liablityThresholdUsd);
|
1621
|
+
requiredMarginUsd = constants_1.BN_ZERO;
|
1622
|
+
}
|
1623
|
+
else {
|
1624
|
+
remainingMarginUsd = constants_1.BN_ZERO;
|
1625
|
+
requiredMarginUsd = liablityThresholdUsd.sub(currentCollateralUsd);
|
1626
|
+
}
|
1534
1627
|
var liquidationPrice = constants_1.BN_ZERO;
|
1535
1628
|
if ((0, types_1.isVariant)(side, 'long')) {
|
1536
|
-
if (
|
1537
|
-
liquidationPrice = sizeUsd.add(liablityThresholdUsd).mul(new anchor_1.BN(
|
1629
|
+
if (marketCorrelation) {
|
1630
|
+
liquidationPrice = positionAccount.sizeUsd.add(liablityThresholdUsd).mul(new anchor_1.BN(10).pow(new anchor_1.BN(positionAccount.sizeDecimals))).div(sizeAmount.add(collateralAmount));
|
1631
|
+
}
|
1632
|
+
else if (nominalSolvency) {
|
1633
|
+
var priceDiscount = (remainingMarginUsd.mul(new anchor_1.BN(10).pow(new anchor_1.BN(positionAccount.sizeDecimals)))).div(sizeAmount);
|
1634
|
+
liquidationPrice = entryPriceUsd.sub(priceDiscount);
|
1538
1635
|
}
|
1539
1636
|
else {
|
1540
|
-
var
|
1541
|
-
liquidationPrice =
|
1637
|
+
var pricePremium = (requiredMarginUsd.mul(new anchor_1.BN(10).pow(new anchor_1.BN(positionAccount.sizeDecimals)))).div(sizeAmount);
|
1638
|
+
liquidationPrice = entryPriceUsd.add(pricePremium);
|
1542
1639
|
}
|
1543
1640
|
}
|
1544
1641
|
else {
|
1545
|
-
|
1642
|
+
if (nominalSolvency) {
|
1643
|
+
var pricePremium = (remainingMarginUsd.mul(new anchor_1.BN(10).pow(new anchor_1.BN(positionAccount.sizeDecimals)))).div(sizeAmount);
|
1644
|
+
liquidationPrice = entryPriceUsd.add(pricePremium);
|
1645
|
+
}
|
1646
|
+
else {
|
1647
|
+
var priceDiscount = (requiredMarginUsd.mul(new anchor_1.BN(10).pow(new anchor_1.BN(positionAccount.sizeDecimals)))).div(sizeAmount);
|
1648
|
+
liquidationPrice = entryPriceUsd.sub(priceDiscount);
|
1649
|
+
}
|
1546
1650
|
}
|
1547
1651
|
return liquidationPrice.isNeg() ? constants_1.BN_ZERO : liquidationPrice;
|
1548
1652
|
};
|
1549
|
-
this.getPnlSync = function (positionAccount,
|
1550
|
-
if (positionAccount.sizeUsd.isZero() || positionAccount.price.isZero()) {
|
1653
|
+
this.getPnlSync = function (positionAccount, targetTokenPrice, targetTokenEmaPrice, targetCustodyAccount, collateralPrice, collateralEmaPrice, collateralCustodyAccount, currentTimestamp, delay, poolConfig) {
|
1654
|
+
if (positionAccount.sizeUsd.isZero() || positionAccount.entryPrice.price.isZero()) {
|
1551
1655
|
return {
|
1552
1656
|
profitUsd: constants_1.BN_ZERO,
|
1553
1657
|
lossUsd: constants_1.BN_ZERO,
|
1554
|
-
exitFeeUsd: constants_1.BN_ZERO,
|
1555
|
-
borrowFeeUsd: constants_1.BN_ZERO,
|
1556
|
-
exitFeeAmount: constants_1.BN_ZERO,
|
1557
|
-
borrowFeeAmount: constants_1.BN_ZERO
|
1558
1658
|
};
|
1559
1659
|
}
|
1660
|
+
var side = poolConfig.getMarketConfigByPk(positionAccount.market).side;
|
1661
|
+
var exitPrice = _this.getExitPriceSync(side, targetTokenPrice, targetTokenEmaPrice, targetCustodyAccount);
|
1560
1662
|
var collateralMinPrice = _this.getMinAndMaxOraclePriceSync(collateralPrice, collateralEmaPrice, collateralCustodyAccount).min;
|
1561
|
-
var
|
1562
|
-
var
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1663
|
+
var priceDiffProfitUsd, priceDiffLossUsd;
|
1664
|
+
var positionEntryPrice = OraclePrice_1.OraclePrice.from({
|
1665
|
+
price: positionAccount.entryPrice.price,
|
1666
|
+
exponent: new anchor_1.BN(positionAccount.entryPrice.exponent),
|
1667
|
+
confidence: constants_1.BN_ZERO,
|
1668
|
+
timestamp: constants_1.BN_ZERO
|
1669
|
+
})
|
1670
|
+
.scale_to_exponent(new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
1671
|
+
if ((0, types_1.isVariant)(side, 'long')) {
|
1672
|
+
if (exitPrice.gt(positionEntryPrice.price)) {
|
1673
|
+
if (currentTimestamp.gt(positionAccount.updateTime.add(delay))) {
|
1674
|
+
priceDiffProfitUsd = exitPrice.sub(positionEntryPrice.price);
|
1675
|
+
priceDiffLossUsd = constants_1.BN_ZERO;
|
1676
|
+
}
|
1677
|
+
else {
|
1678
|
+
priceDiffProfitUsd = constants_1.BN_ZERO;
|
1679
|
+
priceDiffLossUsd = constants_1.BN_ZERO;
|
1680
|
+
}
|
1568
1681
|
}
|
1569
1682
|
else {
|
1570
|
-
|
1571
|
-
|
1683
|
+
priceDiffProfitUsd = constants_1.BN_ZERO;
|
1684
|
+
priceDiffLossUsd = positionEntryPrice.price.sub(exitPrice);
|
1572
1685
|
}
|
1573
1686
|
}
|
1574
1687
|
else {
|
1575
|
-
if (
|
1576
|
-
|
1577
|
-
|
1688
|
+
if (exitPrice.lt(positionEntryPrice.price)) {
|
1689
|
+
if (currentTimestamp.gt(positionAccount.updateTime.add(delay))) {
|
1690
|
+
priceDiffProfitUsd = positionEntryPrice.price.sub(exitPrice);
|
1691
|
+
priceDiffLossUsd = constants_1.BN_ZERO;
|
1692
|
+
}
|
1693
|
+
else {
|
1694
|
+
priceDiffProfitUsd = constants_1.BN_ZERO;
|
1695
|
+
priceDiffLossUsd = constants_1.BN_ZERO;
|
1696
|
+
}
|
1578
1697
|
}
|
1579
1698
|
else {
|
1580
|
-
|
1581
|
-
|
1699
|
+
priceDiffProfitUsd = constants_1.BN_ZERO;
|
1700
|
+
priceDiffLossUsd = exitPrice.sub(positionEntryPrice.price);
|
1582
1701
|
}
|
1583
1702
|
}
|
1584
1703
|
;
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
profitUsd: anchor_1.BN.min(maxProfitUsd, curProfitUsd),
|
1593
|
-
lossUsd: constants_1.BN_ZERO,
|
1594
|
-
exitFeeUsd: exitPriceAndFee.exitFeeUsd,
|
1595
|
-
borrowFeeUsd: exitPriceAndFee.borrowFeeUsd,
|
1596
|
-
exitFeeAmount: exitPriceAndFee.exitFeeAmount,
|
1597
|
-
borrowFeeAmount: exitPriceAndFee.borrowFeeAmount
|
1598
|
-
};
|
1599
|
-
}
|
1600
|
-
else {
|
1601
|
-
var curLossUsd = unrealizedLossUsd.sub(potentialProfitUsd);
|
1602
|
-
var curMarginUsd = collateralMinPrice.getAssetAmountUsd(positionAccount.collateralAmount, collateralCustodyAccount.decimals);
|
1603
|
-
return {
|
1604
|
-
profitUsd: constants_1.BN_ZERO,
|
1605
|
-
lossUsd: anchor_1.BN.min(curLossUsd, curMarginUsd),
|
1606
|
-
exitFeeUsd: exitPriceAndFee.exitFeeUsd,
|
1607
|
-
borrowFeeUsd: exitPriceAndFee.borrowFeeUsd,
|
1608
|
-
exitFeeAmount: exitPriceAndFee.exitFeeAmount,
|
1609
|
-
borrowFeeAmount: exitPriceAndFee.borrowFeeAmount
|
1610
|
-
};
|
1611
|
-
}
|
1704
|
+
var priceDiffProfitOracle = new OraclePrice_1.OraclePrice({ price: priceDiffProfitUsd, exponent: new anchor_1.BN(constants_1.USD_DECIMALS).neg(), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO });
|
1705
|
+
var priceDiffLossOracle = new OraclePrice_1.OraclePrice({ price: priceDiffLossUsd, exponent: new anchor_1.BN(constants_1.USD_DECIMALS).neg(), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO });
|
1706
|
+
if (priceDiffProfitUsd.gt(constants_1.BN_ZERO)) {
|
1707
|
+
return {
|
1708
|
+
profitUsd: anchor_1.BN.min(priceDiffProfitOracle.getAssetAmountUsd(positionAccount.sizeAmount, positionAccount.sizeDecimals), collateralMinPrice.getAssetAmountUsd(positionAccount.lockedAmount, positionAccount.lockedDecimals)),
|
1709
|
+
lossUsd: constants_1.BN_ZERO,
|
1710
|
+
};
|
1612
1711
|
}
|
1613
1712
|
else {
|
1614
|
-
var priceDiffOracle = new OraclePrice_1.OraclePrice({ price: priceDiffLoss, exponent: new anchor_1.BN(constants_1.PRICE_DECIMALS).neg(), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO });
|
1615
|
-
var potentialLossUsd = priceDiffOracle.getAssetAmountUsd(positionAccount.sizeAmount, marketCustodyAccount.decimals);
|
1616
|
-
potentialLossUsd = potentialLossUsd.add(unrealizedLossUsd);
|
1617
|
-
var curMarginUsd = collateralMinPrice.getAssetAmountUsd(positionAccount.collateralAmount, collateralCustodyAccount.decimals);
|
1618
1713
|
return {
|
1619
1714
|
profitUsd: constants_1.BN_ZERO,
|
1620
|
-
lossUsd:
|
1621
|
-
exitFeeUsd: exitPriceAndFee.exitFeeUsd,
|
1622
|
-
borrowFeeUsd: exitPriceAndFee.borrowFeeUsd,
|
1623
|
-
exitFeeAmount: exitPriceAndFee.exitFeeAmount,
|
1624
|
-
borrowFeeAmount: exitPriceAndFee.borrowFeeAmount
|
1715
|
+
lossUsd: priceDiffLossOracle.getAssetAmountUsd(positionAccount.sizeAmount, positionAccount.sizeDecimals),
|
1625
1716
|
};
|
1626
1717
|
}
|
1627
1718
|
};
|
@@ -1688,7 +1779,7 @@ var PerpetualsClient = (function () {
|
|
1688
1779
|
};
|
1689
1780
|
}
|
1690
1781
|
};
|
1691
|
-
this.getAssetsUnderManagementUsdSync = function (poolAccount, tokenPrices, tokenEmaPrices, custodies,
|
1782
|
+
this.getAssetsUnderManagementUsdSync = function (poolAccount, tokenPrices, tokenEmaPrices, custodies, markets, aumCalcMode, currentTime, poolConfig) {
|
1692
1783
|
var poolAmountUsd = constants_1.BN_ZERO;
|
1693
1784
|
for (var index = 0; index < custodies.length; index++) {
|
1694
1785
|
if (custodies.length != poolAccount.custodies.length || !custodies[index].publicKey.equals(poolAccount.custodies[index])) {
|
@@ -1698,36 +1789,39 @@ var PerpetualsClient = (function () {
|
|
1698
1789
|
throw Error("token prices length incorrect");
|
1699
1790
|
}
|
1700
1791
|
var tokenMinMaxPrice = _this.getMinAndMaxOraclePriceSync(tokenPrices[index], tokenEmaPrices[index], custodies[index]);
|
1701
|
-
var
|
1702
|
-
if ((0, types_1.isVariant)(aum_calc_mode, "min")) {
|
1703
|
-
aum_token_price = tokenMinMaxPrice.min;
|
1704
|
-
}
|
1705
|
-
else if ((0, types_1.isVariant)(aum_calc_mode, "max")) {
|
1706
|
-
aum_token_price = tokenMinMaxPrice.max;
|
1707
|
-
}
|
1708
|
-
var token_amount_usd = aum_token_price.getAssetAmountUsd(custodies[index].assets.owned, custodies[index].decimals);
|
1792
|
+
var token_amount_usd = tokenMinMaxPrice.max.getAssetAmountUsd(custodies[index].assets.owned, custodies[index].decimals);
|
1709
1793
|
poolAmountUsd = poolAmountUsd.add(token_amount_usd);
|
1710
|
-
|
1711
|
-
|
1712
|
-
|
1713
|
-
|
1714
|
-
|
1715
|
-
|
1716
|
-
|
1794
|
+
}
|
1795
|
+
if ((0, types_1.isVariant)(aumCalcMode, "includePnl")) {
|
1796
|
+
var poolEquityUsd = poolAmountUsd;
|
1797
|
+
for (var index = 0; index < markets.length; index++) {
|
1798
|
+
if (markets.length != poolAccount.markets.length || !markets[index].publicKey.equals(poolAccount.markets[index])) {
|
1799
|
+
throw Error("incorrect markets");
|
1800
|
+
}
|
1801
|
+
var position = markets[index].getCollectivePosition();
|
1802
|
+
var collectivePnl = _this.getPnlSync(position, tokenPrices[markets[index].targetCustodyId.toNumber()], tokenEmaPrices[markets[index].targetCustodyId.toNumber()], custodies[markets[index].targetCustodyId.toNumber()], tokenPrices[markets[index].collateralCustodyId.toNumber()], tokenEmaPrices[markets[index].collateralCustodyId.toNumber()], custodies[markets[index].collateralCustodyId.toNumber()], currentTime, custodies[markets[index].targetCustodyId.toNumber()].pricing.delaySeconds, poolConfig);
|
1803
|
+
var collateralMinMaxPrice = _this.getMinAndMaxOraclePriceSync(tokenPrices[markets[index].collateralCustodyId.toNumber()], tokenEmaPrices[markets[index].collateralCustodyId.toNumber()], custodies[markets[index].collateralCustodyId.toNumber()]);
|
1804
|
+
var collectiveCollateralUsd = collateralMinMaxPrice.min.getAssetAmountUsd(position.collateralAmount, position.collateralDecimals);
|
1805
|
+
var collectiveLossUsd = anchor_1.BN.min(collectivePnl.lossUsd, collectiveCollateralUsd);
|
1806
|
+
poolEquityUsd = (poolEquityUsd.add(collectiveLossUsd)).sub(collectivePnl.profitUsd);
|
1717
1807
|
}
|
1808
|
+
return { poolAmountUsd: poolAmountUsd, poolEquityUsd: poolEquityUsd };
|
1809
|
+
}
|
1810
|
+
else {
|
1811
|
+
return { poolAmountUsd: poolAmountUsd, poolEquityUsd: constants_1.BN_ZERO };
|
1718
1812
|
}
|
1719
|
-
return poolAmountUsd;
|
1720
1813
|
};
|
1721
|
-
this.openPosition = function (
|
1814
|
+
this.openPosition = function (targetSymbol, collateralSymbol, priceWithSlippage, collateralWithfee, size, side, poolConfig, nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege, skipBalanceChecks) {
|
1722
1815
|
if (skipBalanceChecks === void 0) { skipBalanceChecks = false; }
|
1723
1816
|
return __awaiter(_this, void 0, void 0, function () {
|
1724
|
-
var publicKey,
|
1817
|
+
var publicKey, targetCustodyConfig, collateralCustodyConfig, marketAccount, userCollateralTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, accCreationLamports, lamports, unWrappedSolBalance, _a, tokenAccountBalance, _b, positionAccount, params, instruction;
|
1725
1818
|
return __generator(this, function (_c) {
|
1726
1819
|
switch (_c.label) {
|
1727
1820
|
case 0:
|
1728
1821
|
publicKey = this.provider.wallet.publicKey;
|
1729
|
-
|
1822
|
+
targetCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
1730
1823
|
collateralCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
1824
|
+
marketAccount = poolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
1731
1825
|
return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey, publicKey)];
|
1732
1826
|
case 1:
|
1733
1827
|
userCollateralTokenAccount = _c.sent();
|
@@ -1780,42 +1874,37 @@ var PerpetualsClient = (function () {
|
|
1780
1874
|
}
|
1781
1875
|
_c.label = 7;
|
1782
1876
|
case 7:
|
1783
|
-
positionAccount =
|
1784
|
-
Buffer.from("position"),
|
1785
|
-
publicKey.toBuffer(),
|
1786
|
-
poolConfig.poolAddress.toBuffer(),
|
1787
|
-
marketCustodyConfig.custodyAccount.toBuffer(),
|
1788
|
-
(0, types_1.isVariant)(side, 'long') ? Buffer.from([1]) : Buffer.from([2]),
|
1789
|
-
], this.programId)[0];
|
1877
|
+
positionAccount = poolConfig.getPositionFromMarketPk(publicKey, marketAccount);
|
1790
1878
|
params = {
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1879
|
+
priceWithSlippage: priceWithSlippage,
|
1880
|
+
collateralAmount: collateralWithfee,
|
1881
|
+
sizeAmount: size,
|
1882
|
+
privilege: privilege
|
1795
1883
|
};
|
1796
1884
|
return [4, this.program.methods
|
1797
1885
|
.openPosition(params)
|
1798
1886
|
.accounts({
|
1799
|
-
delegate: publicKey,
|
1800
1887
|
owner: publicKey,
|
1888
|
+
feePayer: publicKey,
|
1801
1889
|
fundingAccount: collateralSymbol == 'SOL' ? wrappedSolAccount.publicKey : userCollateralTokenAccount,
|
1802
|
-
transferAuthority: poolConfig.transferAuthority,
|
1803
1890
|
perpetuals: poolConfig.perpetuals,
|
1804
1891
|
pool: poolConfig.poolAddress,
|
1805
1892
|
position: positionAccount,
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1893
|
+
market: marketAccount,
|
1894
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
1895
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
1809
1896
|
collateralCustody: collateralCustodyConfig.custodyAccount,
|
1810
|
-
|
1811
|
-
collateralCustodyCustomOracleAccount: poolConfig.backupOracle,
|
1897
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
1812
1898
|
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
1813
|
-
eventAuthority: this.eventAuthority.publicKey,
|
1814
1899
|
systemProgram: web3_js_1.SystemProgram.programId,
|
1815
1900
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
1901
|
+
eventAuthority: this.eventAuthority.publicKey,
|
1816
1902
|
program: this.programId,
|
1903
|
+
transferAuthority: this.authority.publicKey,
|
1817
1904
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
1818
|
-
})
|
1905
|
+
})
|
1906
|
+
.remainingAccounts(__spreadArray([], (0, getNftAccounts_1.getNftAccounts)(nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege), true))
|
1907
|
+
.instruction()];
|
1819
1908
|
case 8:
|
1820
1909
|
instruction = _c.sent();
|
1821
1910
|
instructions.push(instruction);
|
@@ -1827,17 +1916,18 @@ var PerpetualsClient = (function () {
|
|
1827
1916
|
});
|
1828
1917
|
});
|
1829
1918
|
};
|
1830
|
-
this.openPositionWithSwap = function (
|
1919
|
+
this.openPositionWithSwap = function (targetSymbol, collateralSymbol, inputSymbol, amountIn, minAmountOut, priceWithSlippage, size, side, swapPoolConfig, positionPoolConfig, nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege, skipBalanceChecks) {
|
1831
1920
|
if (skipBalanceChecks === void 0) { skipBalanceChecks = false; }
|
1832
1921
|
return __awaiter(_this, void 0, void 0, function () {
|
1833
|
-
var publicKey,
|
1922
|
+
var publicKey, targetCustodyConfig, collateralCustodyConfig, outputCustodyConfig, inputCustodyConfig, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userInputTokenAccount, accCreationLamports, lamports, unWrappedSolBalance, _a, tokenAccountBalance, _b, userOutputTokenAccount, marketAccount, positionAccount, custodyAccountMetas, custodyOracleAccountMetas, _i, _c, custody, instruction;
|
1834
1923
|
return __generator(this, function (_d) {
|
1835
1924
|
switch (_d.label) {
|
1836
1925
|
case 0:
|
1837
1926
|
publicKey = this.provider.wallet.publicKey;
|
1838
|
-
|
1839
|
-
collateralCustodyConfig =
|
1840
|
-
|
1927
|
+
targetCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
1928
|
+
collateralCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
1929
|
+
outputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
1930
|
+
inputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(inputSymbol).mintKey); });
|
1841
1931
|
if (inputCustodyConfig.mintKey.equals(collateralCustodyConfig.mintKey)) {
|
1842
1932
|
throw "Don't use Swap, just call Open position";
|
1843
1933
|
}
|
@@ -1876,7 +1966,7 @@ var PerpetualsClient = (function () {
|
|
1876
1966
|
additionalSigners.push(wrappedSolAccount);
|
1877
1967
|
return [3, 6];
|
1878
1968
|
case 3:
|
1879
|
-
userInputTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(
|
1969
|
+
userInputTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(swapPoolConfig.getTokenFromSymbol(inputSymbol).mintKey, publicKey);
|
1880
1970
|
return [4, (0, utils_1.checkIfAccountExists)(userInputTokenAccount, this.provider.connection)];
|
1881
1971
|
case 4:
|
1882
1972
|
if (!(_d.sent())) {
|
@@ -1892,23 +1982,17 @@ var PerpetualsClient = (function () {
|
|
1892
1982
|
}
|
1893
1983
|
_d.label = 6;
|
1894
1984
|
case 6:
|
1895
|
-
|
1896
|
-
return [4, (0, utils_1.checkIfAccountExists)(
|
1985
|
+
userOutputTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(swapPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey, publicKey);
|
1986
|
+
return [4, (0, utils_1.checkIfAccountExists)(userOutputTokenAccount, this.provider.connection)];
|
1897
1987
|
case 7:
|
1898
1988
|
if (!(_d.sent())) {
|
1899
|
-
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey,
|
1989
|
+
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userOutputTokenAccount, publicKey, swapPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey));
|
1900
1990
|
}
|
1901
|
-
|
1902
|
-
|
1903
|
-
publicKey.toBuffer(),
|
1904
|
-
poolConfig.poolAddress.toBuffer(),
|
1905
|
-
marketCustodyConfig.custodyAccount.toBuffer(),
|
1906
|
-
(0, types_1.isVariant)(side, 'long') ? Buffer.from([1]) : Buffer.from([2]),
|
1907
|
-
], this.programId)[0];
|
1991
|
+
marketAccount = positionPoolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
1992
|
+
positionAccount = positionPoolConfig.getPositionFromMarketPk(publicKey, marketAccount);
|
1908
1993
|
custodyAccountMetas = [];
|
1909
1994
|
custodyOracleAccountMetas = [];
|
1910
|
-
|
1911
|
-
for (_i = 0, _c = poolConfig.custodies; _i < _c.length; _i++) {
|
1995
|
+
for (_i = 0, _c = swapPoolConfig.custodies; _i < _c.length; _i++) {
|
1912
1996
|
custody = _c[_i];
|
1913
1997
|
custodyAccountMetas.push({
|
1914
1998
|
pubkey: custody.custodyAccount,
|
@@ -1920,61 +2004,45 @@ var PerpetualsClient = (function () {
|
|
1920
2004
|
isSigner: false,
|
1921
2005
|
isWritable: false,
|
1922
2006
|
});
|
1923
|
-
custodyCustomOracles.push({
|
1924
|
-
pubkey: poolConfig.backupOracle,
|
1925
|
-
isSigner: false,
|
1926
|
-
isWritable: false,
|
1927
|
-
});
|
1928
2007
|
}
|
1929
|
-
return [4, this.program.methods
|
1930
|
-
.updatePoolAum()
|
1931
|
-
.accounts({
|
1932
|
-
payer: publicKey,
|
1933
|
-
perpetuals: poolConfig.perpetuals,
|
1934
|
-
pool: poolConfig.poolAddress,
|
1935
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
1936
|
-
})
|
1937
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), custodyCustomOracles, true))
|
1938
|
-
.instruction()];
|
1939
|
-
case 8:
|
1940
|
-
poolAumInstruction = _d.sent();
|
1941
|
-
preInstructions.push(poolAumInstruction);
|
1942
2008
|
return [4, this.programPerpComposability.methods
|
1943
2009
|
.swapAndOpen({
|
1944
2010
|
amountIn: amountIn,
|
1945
2011
|
minAmountOut: minAmountOut,
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
2012
|
+
openPriceWithSlippage: priceWithSlippage,
|
2013
|
+
openSizeAmount: size,
|
2014
|
+
privilege: privilege
|
1949
2015
|
})
|
1950
2016
|
.accounts({
|
1951
|
-
|
2017
|
+
perpProgram: this.programId,
|
1952
2018
|
owner: publicKey,
|
1953
2019
|
fundingAccount: inputSymbol == 'SOL' ? wrappedSolAccount.publicKey : userInputTokenAccount,
|
1954
|
-
receivingAccount:
|
1955
|
-
transferAuthority:
|
1956
|
-
perpetuals:
|
1957
|
-
|
2020
|
+
receivingAccount: userOutputTokenAccount,
|
2021
|
+
transferAuthority: swapPoolConfig.transferAuthority,
|
2022
|
+
perpetuals: swapPoolConfig.perpetuals,
|
2023
|
+
swapPool: swapPoolConfig.poolAddress,
|
1958
2024
|
receivingCustody: inputCustodyConfig.custodyAccount,
|
1959
2025
|
receivingCustodyOracleAccount: inputCustodyConfig.oracleAddress,
|
1960
|
-
receivingCustodyCustomOracleAccount: poolConfig.backupOracle,
|
1961
2026
|
receivingCustodyTokenAccount: inputCustodyConfig.tokenAccount,
|
1962
|
-
dispensingCustody:
|
1963
|
-
dispensingCustodyOracleAccount:
|
1964
|
-
|
1965
|
-
|
2027
|
+
dispensingCustody: outputCustodyConfig.custodyAccount,
|
2028
|
+
dispensingCustodyOracleAccount: outputCustodyConfig.oracleAddress,
|
2029
|
+
dispensingCustodyTokenAccount: outputCustodyConfig.tokenAccount,
|
2030
|
+
positionPool: positionPoolConfig.poolAddress,
|
1966
2031
|
position: positionAccount,
|
1967
|
-
|
1968
|
-
|
1969
|
-
|
2032
|
+
market: marketAccount,
|
2033
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2034
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2035
|
+
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2036
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2037
|
+
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
1970
2038
|
eventAuthority: this.eventAuthority.publicKey,
|
1971
2039
|
systemProgram: web3_js_1.SystemProgram.programId,
|
1972
2040
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
1973
|
-
|
1974
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2041
|
+
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
1975
2042
|
})
|
2043
|
+
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], (0, getNftAccounts_1.getNftAccounts)(nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege), true), custodyAccountMetas, true), custodyOracleAccountMetas, true))
|
1976
2044
|
.instruction()];
|
1977
|
-
case
|
2045
|
+
case 8:
|
1978
2046
|
instruction = _d.sent();
|
1979
2047
|
instructions.push(instruction);
|
1980
2048
|
return [2, {
|
@@ -1985,11 +2053,11 @@ var PerpetualsClient = (function () {
|
|
1985
2053
|
});
|
1986
2054
|
});
|
1987
2055
|
};
|
1988
|
-
this.closePosition = function (marketSymbol, collateralSymbol,
|
2056
|
+
this.closePosition = function (marketSymbol, collateralSymbol, priceWithSlippage, side, poolConfig, nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege, createUserATA, closeUsersWSOLATA) {
|
1989
2057
|
if (createUserATA === void 0) { createUserATA = true; }
|
1990
2058
|
if (closeUsersWSOLATA === void 0) { closeUsersWSOLATA = false; }
|
1991
2059
|
return __awaiter(_this, void 0, void 0, function () {
|
1992
|
-
var publicKey, userReceivingTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, lamports, _a, collateralCustodyConfig,
|
2060
|
+
var publicKey, userReceivingTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, lamports, _a, collateralCustodyConfig, targetCustodyConfig, marketAccount, positionAccount, instruction, closeWsolATAIns, error_2;
|
1993
2061
|
return __generator(this, function (_b) {
|
1994
2062
|
switch (_b.label) {
|
1995
2063
|
case 0:
|
@@ -2038,39 +2106,35 @@ var PerpetualsClient = (function () {
|
|
2038
2106
|
_b.label = 7;
|
2039
2107
|
case 7:
|
2040
2108
|
collateralCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
publicKey.toBuffer(),
|
2045
|
-
poolConfig.poolAddress.toBuffer(),
|
2046
|
-
marketCustodyConfig.custodyAccount.toBuffer(),
|
2047
|
-
(0, types_1.isVariant)(side, 'long') ? Buffer.from([1]) : Buffer.from([2]),
|
2048
|
-
], this.programId)[0];
|
2049
|
-
params = {
|
2050
|
-
price: priceAfterSlippage,
|
2051
|
-
};
|
2109
|
+
targetCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(marketSymbol).mintKey); });
|
2110
|
+
marketAccount = poolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2111
|
+
positionAccount = poolConfig.getPositionFromMarketPk(publicKey, marketAccount);
|
2052
2112
|
return [4, this.program.methods
|
2053
|
-
.closePosition(
|
2113
|
+
.closePosition({
|
2114
|
+
priceWithSlippage: priceWithSlippage,
|
2115
|
+
privilege: privilege
|
2116
|
+
})
|
2054
2117
|
.accounts({
|
2055
|
-
|
2118
|
+
feePayer: publicKey,
|
2056
2119
|
owner: publicKey,
|
2057
2120
|
receivingAccount: collateralSymbol == 'SOL' ? wrappedSolAccount.publicKey : userReceivingTokenAccount,
|
2058
2121
|
transferAuthority: poolConfig.transferAuthority,
|
2059
2122
|
perpetuals: poolConfig.perpetuals,
|
2060
2123
|
pool: poolConfig.poolAddress,
|
2061
2124
|
position: positionAccount,
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2125
|
+
market: marketAccount,
|
2126
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2127
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2065
2128
|
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2066
|
-
|
2067
|
-
collateralCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2129
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2068
2130
|
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2069
2131
|
eventAuthority: this.eventAuthority.publicKey,
|
2070
2132
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2071
2133
|
program: this.programId,
|
2072
2134
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2073
|
-
})
|
2135
|
+
})
|
2136
|
+
.remainingAccounts(__spreadArray([], (0, getNftAccounts_1.getNftAccounts)(nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege), true))
|
2137
|
+
.instruction()];
|
2074
2138
|
case 8:
|
2075
2139
|
instruction = _b.sent();
|
2076
2140
|
instructions.push(instruction);
|
@@ -2091,15 +2155,16 @@ var PerpetualsClient = (function () {
|
|
2091
2155
|
});
|
2092
2156
|
});
|
2093
2157
|
};
|
2094
|
-
this.closePositionWithSwap = function (
|
2095
|
-
var publicKey,
|
2158
|
+
this.closePositionWithSwap = function (targetSymbol, outputSymbol, collateralSymbol, minAmountOut, priceAfterSlippage, side, swapPoolConfig, positionPoolConfig, nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege) { return __awaiter(_this, void 0, void 0, function () {
|
2159
|
+
var publicKey, targetCustodyConfig, collateralCustodyConfig, inputCustodyConfig, outputCustodyConfig, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userReceivingTokenAccount, lamports, userCollateralTokenAccount, marketAccount, positionAccount, custodyAccountMetas, custodyOracleAccountMetas, _i, _a, custody, instruction;
|
2096
2160
|
return __generator(this, function (_b) {
|
2097
2161
|
switch (_b.label) {
|
2098
2162
|
case 0:
|
2099
2163
|
publicKey = this.provider.wallet.publicKey;
|
2100
|
-
|
2101
|
-
collateralCustodyConfig =
|
2102
|
-
|
2164
|
+
targetCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
2165
|
+
collateralCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2166
|
+
inputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2167
|
+
outputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(outputSymbol).mintKey); });
|
2103
2168
|
if (outputCustodyConfig.mintKey.equals(collateralCustodyConfig.mintKey)) {
|
2104
2169
|
throw "Dont use swap, just call close position";
|
2105
2170
|
}
|
@@ -2128,33 +2193,27 @@ var PerpetualsClient = (function () {
|
|
2128
2193
|
];
|
2129
2194
|
additionalSigners.push(wrappedSolAccount);
|
2130
2195
|
return [3, 5];
|
2131
|
-
case 2: return [4, (0, spl_token_1.getAssociatedTokenAddress)(
|
2196
|
+
case 2: return [4, (0, spl_token_1.getAssociatedTokenAddress)(swapPoolConfig.getTokenFromSymbol(outputSymbol).mintKey, publicKey)];
|
2132
2197
|
case 3:
|
2133
2198
|
userReceivingTokenAccount = _b.sent();
|
2134
2199
|
return [4, (0, utils_1.checkIfAccountExists)(userReceivingTokenAccount, this.provider.connection)];
|
2135
2200
|
case 4:
|
2136
2201
|
if (!(_b.sent())) {
|
2137
|
-
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userReceivingTokenAccount, publicKey,
|
2202
|
+
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userReceivingTokenAccount, publicKey, swapPoolConfig.getTokenFromSymbol(outputSymbol).mintKey));
|
2138
2203
|
}
|
2139
2204
|
_b.label = 5;
|
2140
2205
|
case 5:
|
2141
|
-
userCollateralTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(
|
2206
|
+
userCollateralTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey, publicKey);
|
2142
2207
|
return [4, (0, utils_1.checkIfAccountExists)(userCollateralTokenAccount, this.provider.connection)];
|
2143
2208
|
case 6:
|
2144
2209
|
if (!(_b.sent())) {
|
2145
|
-
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userCollateralTokenAccount, publicKey,
|
2210
|
+
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userCollateralTokenAccount, publicKey, positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey));
|
2146
2211
|
}
|
2147
|
-
|
2148
|
-
|
2149
|
-
publicKey.toBuffer(),
|
2150
|
-
poolConfig.poolAddress.toBuffer(),
|
2151
|
-
marketCustodyConfig.custodyAccount.toBuffer(),
|
2152
|
-
(0, types_1.isVariant)(side, 'long') ? Buffer.from([1]) : Buffer.from([2]),
|
2153
|
-
], this.programId)[0];
|
2212
|
+
marketAccount = positionPoolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2213
|
+
positionAccount = positionPoolConfig.getPositionFromMarketPk(publicKey, marketAccount);
|
2154
2214
|
custodyAccountMetas = [];
|
2155
2215
|
custodyOracleAccountMetas = [];
|
2156
|
-
|
2157
|
-
for (_i = 0, _a = poolConfig.custodies; _i < _a.length; _i++) {
|
2216
|
+
for (_i = 0, _a = swapPoolConfig.custodies; _i < _a.length; _i++) {
|
2158
2217
|
custody = _a[_i];
|
2159
2218
|
custodyAccountMetas.push({
|
2160
2219
|
pubkey: custody.custodyAccount,
|
@@ -2166,57 +2225,41 @@ var PerpetualsClient = (function () {
|
|
2166
2225
|
isSigner: false,
|
2167
2226
|
isWritable: false,
|
2168
2227
|
});
|
2169
|
-
custodyCustomOracles.push({
|
2170
|
-
pubkey: poolConfig.backupOracle,
|
2171
|
-
isSigner: false,
|
2172
|
-
isWritable: false,
|
2173
|
-
});
|
2174
2228
|
}
|
2175
|
-
return [4, this.program.methods
|
2176
|
-
.updatePoolAum()
|
2177
|
-
.accounts({
|
2178
|
-
payer: publicKey,
|
2179
|
-
perpetuals: poolConfig.perpetuals,
|
2180
|
-
pool: poolConfig.poolAddress,
|
2181
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
2182
|
-
})
|
2183
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), custodyCustomOracles, true))
|
2184
|
-
.instruction()];
|
2185
|
-
case 7:
|
2186
|
-
poolAumInstruction = _b.sent();
|
2187
|
-
preInstructions.push(poolAumInstruction);
|
2188
2229
|
return [4, this.programPerpComposability.methods
|
2189
2230
|
.closeAndSwap({
|
2190
2231
|
minAmountOut: minAmountOut,
|
2191
2232
|
closePrice: priceAfterSlippage,
|
2192
2233
|
})
|
2193
2234
|
.accounts({
|
2194
|
-
|
2235
|
+
perpProgram: this.programId,
|
2195
2236
|
owner: publicKey,
|
2196
2237
|
fundingAccount: userCollateralTokenAccount,
|
2197
2238
|
receivingAccount: outputSymbol == 'SOL' ? wrappedSolAccount.publicKey : userReceivingTokenAccount,
|
2198
|
-
transferAuthority:
|
2199
|
-
perpetuals:
|
2200
|
-
|
2201
|
-
receivingCustody:
|
2202
|
-
receivingCustodyOracleAccount:
|
2203
|
-
|
2204
|
-
receivingCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2239
|
+
transferAuthority: swapPoolConfig.transferAuthority,
|
2240
|
+
perpetuals: swapPoolConfig.perpetuals,
|
2241
|
+
swapPool: swapPoolConfig.poolAddress,
|
2242
|
+
receivingCustody: inputCustodyConfig.custodyAccount,
|
2243
|
+
receivingCustodyOracleAccount: inputCustodyConfig.oracleAddress,
|
2244
|
+
receivingCustodyTokenAccount: inputCustodyConfig.tokenAccount,
|
2205
2245
|
dispensingCustody: outputCustodyConfig.custodyAccount,
|
2206
2246
|
dispensingCustodyOracleAccount: outputCustodyConfig.oracleAddress,
|
2207
|
-
dispensingCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2208
2247
|
dispensingCustodyTokenAccount: outputCustodyConfig.tokenAccount,
|
2248
|
+
positionPool: positionPoolConfig.poolAddress,
|
2209
2249
|
position: positionAccount,
|
2210
|
-
|
2211
|
-
|
2212
|
-
|
2250
|
+
market: marketAccount,
|
2251
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2252
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2253
|
+
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2254
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2255
|
+
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2213
2256
|
eventAuthority: this.eventAuthority.publicKey,
|
2214
2257
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2215
|
-
perpProgram: this.programId,
|
2216
2258
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2217
2259
|
})
|
2260
|
+
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], (0, getNftAccounts_1.getNftAccounts)(nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege), true), custodyAccountMetas, true), custodyOracleAccountMetas, true))
|
2218
2261
|
.instruction()];
|
2219
|
-
case
|
2262
|
+
case 7:
|
2220
2263
|
instruction = _b.sent();
|
2221
2264
|
instructions.push(instruction);
|
2222
2265
|
return [2, {
|
@@ -2226,12 +2269,13 @@ var PerpetualsClient = (function () {
|
|
2226
2269
|
}
|
2227
2270
|
});
|
2228
2271
|
}); };
|
2229
|
-
this.swap = function (userInputTokenSymbol, userOutputTokenSymbol, amountIn, minAmountOut, poolConfig, createUserATA, unWrapSol, skipBalanceChecks) {
|
2272
|
+
this.swap = function (userInputTokenSymbol, userOutputTokenSymbol, amountIn, minAmountOut, poolConfig, useFeesPool, createUserATA, unWrapSol, skipBalanceChecks) {
|
2273
|
+
if (useFeesPool === void 0) { useFeesPool = false; }
|
2230
2274
|
if (createUserATA === void 0) { createUserATA = true; }
|
2231
2275
|
if (unWrapSol === void 0) { unWrapSol = false; }
|
2232
2276
|
if (skipBalanceChecks === void 0) { skipBalanceChecks = false; }
|
2233
2277
|
return __awaiter(_this, void 0, void 0, function () {
|
2234
|
-
var userInputCustodyConfig, userOutputCustodyConfig, publicKey, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userOutputTokenAccount, userInputTokenAccount, wsolAssociatedTokenAccount, wsolATAExist, unWrappedSolBalance, _a, wsolAssociatedTokenAccount, closeWsolATAIns, accCreationLamports, lamports, unWrappedSolBalance, _b, tokenAccountBalance, _c, lamports, _d, custodyAccountMetas, custodyOracleAccountMetas,
|
2278
|
+
var userInputCustodyConfig, userOutputCustodyConfig, publicKey, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userOutputTokenAccount, userInputTokenAccount, wsolAssociatedTokenAccount, wsolATAExist, unWrappedSolBalance, _a, wsolAssociatedTokenAccount, closeWsolATAIns, accCreationLamports, lamports, unWrappedSolBalance, _b, tokenAccountBalance, _c, lamports, _d, custodyAccountMetas, custodyOracleAccountMetas, _i, _e, custody, params, inx, closeWsolATAIns, err_2;
|
2235
2279
|
return __generator(this, function (_f) {
|
2236
2280
|
switch (_f.label) {
|
2237
2281
|
case 0:
|
@@ -2287,7 +2331,7 @@ var PerpetualsClient = (function () {
|
|
2287
2331
|
additionalSigners: additionalSigners
|
2288
2332
|
}];
|
2289
2333
|
case 6:
|
2290
|
-
_f.trys.push([6,
|
2334
|
+
_f.trys.push([6, 21, , 22]);
|
2291
2335
|
if (!(userInputTokenSymbol == 'SOL')) return [3, 9];
|
2292
2336
|
console.log("userInputTokenSymbol === sol", userInputTokenSymbol);
|
2293
2337
|
wrappedSolAccount = new web3_js_1.Keypair();
|
@@ -2373,7 +2417,6 @@ var PerpetualsClient = (function () {
|
|
2373
2417
|
case 19:
|
2374
2418
|
custodyAccountMetas = [];
|
2375
2419
|
custodyOracleAccountMetas = [];
|
2376
|
-
custodyCustomOracles = [];
|
2377
2420
|
for (_i = 0, _e = poolConfig.custodies; _i < _e.length; _i++) {
|
2378
2421
|
custody = _e[_i];
|
2379
2422
|
custodyAccountMetas.push({
|
@@ -2386,33 +2429,15 @@ var PerpetualsClient = (function () {
|
|
2386
2429
|
isSigner: false,
|
2387
2430
|
isWritable: false,
|
2388
2431
|
});
|
2389
|
-
custodyCustomOracles.push({
|
2390
|
-
pubkey: poolConfig.backupOracle,
|
2391
|
-
isSigner: false,
|
2392
|
-
isWritable: false,
|
2393
|
-
});
|
2394
2432
|
}
|
2395
|
-
return [4, this.program.methods
|
2396
|
-
.updatePoolAum()
|
2397
|
-
.accounts({
|
2398
|
-
payer: publicKey,
|
2399
|
-
perpetuals: poolConfig.perpetuals,
|
2400
|
-
pool: poolConfig.poolAddress,
|
2401
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
2402
|
-
})
|
2403
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), custodyCustomOracles, true))
|
2404
|
-
.instruction()];
|
2405
|
-
case 20:
|
2406
|
-
poolAumInstruction = _f.sent();
|
2407
|
-
preInstructions.push(poolAumInstruction);
|
2408
2433
|
params = {
|
2409
2434
|
amountIn: amountIn,
|
2410
2435
|
minAmountOut: minAmountOut,
|
2436
|
+
useFeesPool: useFeesPool
|
2411
2437
|
};
|
2412
2438
|
return [4, this.program.methods
|
2413
2439
|
.swap(params)
|
2414
2440
|
.accounts({
|
2415
|
-
delegate: publicKey,
|
2416
2441
|
owner: publicKey,
|
2417
2442
|
fundingAccount: userInputTokenSymbol == 'SOL' ? wrappedSolAccount.publicKey : userInputTokenAccount,
|
2418
2443
|
receivingAccount: userOutputTokenSymbol == 'SOL' ? wrappedSolAccount.publicKey : userOutputTokenAccount,
|
@@ -2421,31 +2446,30 @@ var PerpetualsClient = (function () {
|
|
2421
2446
|
pool: poolConfig.poolAddress,
|
2422
2447
|
receivingCustody: userInputCustodyConfig.custodyAccount,
|
2423
2448
|
receivingCustodyOracleAccount: userInputCustodyConfig.oracleAddress,
|
2424
|
-
receivingCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2425
2449
|
receivingCustodyTokenAccount: userInputCustodyConfig.tokenAccount,
|
2426
2450
|
dispensingCustody: userOutputCustodyConfig.custodyAccount,
|
2427
2451
|
dispensingCustodyOracleAccount: userOutputCustodyConfig.oracleAddress,
|
2428
|
-
dispensingCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2429
2452
|
dispensingCustodyTokenAccount: userOutputCustodyConfig.tokenAccount,
|
2430
2453
|
eventAuthority: this.eventAuthority.publicKey,
|
2431
2454
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2432
2455
|
program: this.programId,
|
2433
2456
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2434
2457
|
})
|
2458
|
+
.remainingAccounts(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true))
|
2435
2459
|
.instruction()];
|
2436
|
-
case
|
2460
|
+
case 20:
|
2437
2461
|
inx = _f.sent();
|
2438
2462
|
instructions.push(inx);
|
2439
2463
|
if (userOutputTokenSymbol == 'SOL' && unWrapSol) {
|
2440
2464
|
closeWsolATAIns = (0, spl_token_1.createCloseAccountInstruction)(userOutputTokenAccount, publicKey, publicKey);
|
2441
2465
|
instructions.push(closeWsolATAIns);
|
2442
2466
|
}
|
2443
|
-
return [3,
|
2444
|
-
case
|
2467
|
+
return [3, 22];
|
2468
|
+
case 21:
|
2445
2469
|
err_2 = _f.sent();
|
2446
2470
|
console.error("perpClient Swap error:: ", err_2);
|
2447
2471
|
throw err_2;
|
2448
|
-
case
|
2472
|
+
case 22: return [2, {
|
2449
2473
|
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
2450
2474
|
additionalSigners: additionalSigners
|
2451
2475
|
}];
|
@@ -2453,17 +2477,18 @@ var PerpetualsClient = (function () {
|
|
2453
2477
|
});
|
2454
2478
|
});
|
2455
2479
|
};
|
2456
|
-
this.addCollateral = function (collateralWithFee,
|
2480
|
+
this.addCollateral = function (collateralWithFee, targetSymbol, collateralSymbol, side, positionPubKey, poolConfig, skipBalanceChecks) {
|
2457
2481
|
if (skipBalanceChecks === void 0) { skipBalanceChecks = false; }
|
2458
2482
|
return __awaiter(_this, void 0, void 0, function () {
|
2459
|
-
var publicKey, collateralCustodyConfig,
|
2483
|
+
var publicKey, collateralCustodyConfig, targetCustodyConfig, marketAccount, userPayingTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, accCreationLamports, lamports, unWrappedSolBalance, _a, solBal, tokenAccountBalance, _b, instruction;
|
2460
2484
|
return __generator(this, function (_c) {
|
2461
2485
|
switch (_c.label) {
|
2462
2486
|
case 0:
|
2463
2487
|
publicKey = this.provider.wallet.publicKey;
|
2464
2488
|
collateralCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2465
|
-
|
2466
|
-
|
2489
|
+
targetCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
2490
|
+
marketAccount = poolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2491
|
+
if (!collateralCustodyConfig || !targetCustodyConfig) {
|
2467
2492
|
throw "payTokenCustody not found";
|
2468
2493
|
}
|
2469
2494
|
userPayingTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(collateralCustodyConfig.mintKey, publicKey);
|
@@ -2523,19 +2548,16 @@ var PerpetualsClient = (function () {
|
|
2523
2548
|
case 7: return [4, this.program.methods.addCollateral({
|
2524
2549
|
collateralDelta: collateralWithFee
|
2525
2550
|
}).accounts({
|
2526
|
-
delegate: publicKey,
|
2527
2551
|
owner: publicKey,
|
2528
2552
|
position: positionPubKey,
|
2553
|
+
market: marketAccount,
|
2529
2554
|
fundingAccount: collateralSymbol == 'SOL' ? wrappedSolAccount.publicKey : userPayingTokenAccount,
|
2530
|
-
transferAuthority: poolConfig.transferAuthority,
|
2531
2555
|
perpetuals: poolConfig.perpetuals,
|
2532
2556
|
pool: poolConfig.poolAddress,
|
2533
|
-
|
2534
|
-
|
2535
|
-
custodyCustomOracleAccount: poolConfig.backupOracle,
|
2557
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2558
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2536
2559
|
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2537
|
-
|
2538
|
-
collateralCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2560
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2539
2561
|
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2540
2562
|
eventAuthority: this.eventAuthority.publicKey,
|
2541
2563
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
@@ -2554,18 +2576,19 @@ var PerpetualsClient = (function () {
|
|
2554
2576
|
});
|
2555
2577
|
});
|
2556
2578
|
};
|
2557
|
-
this.addCollateralWithSwap = function (
|
2579
|
+
this.addCollateralWithSwap = function (targetSymbol, inputSymbol, collateralSymbol, amountIn, minAmountOut, side, positionPubKey, swapPoolConfig, positionPoolConfig, skipBalanceChecks) {
|
2558
2580
|
if (skipBalanceChecks === void 0) { skipBalanceChecks = false; }
|
2559
2581
|
return __awaiter(_this, void 0, void 0, function () {
|
2560
|
-
var publicKey, collateralCustodyConfig,
|
2582
|
+
var publicKey, collateralCustodyConfig, targetCustodyConfig, outputCustodyConfig, inputCustodyConfig, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userInputTokenAccount, accCreationLamports, lamports, unWrappedSolBalance, _a, tokenAccountBalance, _b, userCollateralTokenAccount, custodyAccountMetas, custodyOracleAccountMetas, _i, _c, custody, marketAccount, instruction;
|
2561
2583
|
return __generator(this, function (_d) {
|
2562
2584
|
switch (_d.label) {
|
2563
2585
|
case 0:
|
2564
2586
|
publicKey = this.provider.wallet.publicKey;
|
2565
|
-
collateralCustodyConfig =
|
2566
|
-
|
2567
|
-
|
2568
|
-
|
2587
|
+
collateralCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2588
|
+
targetCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
2589
|
+
outputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
2590
|
+
inputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(inputSymbol).mintKey); });
|
2591
|
+
if (!collateralCustodyConfig || !targetCustodyConfig || !inputCustodyConfig) {
|
2569
2592
|
throw "payTokenCustody not found";
|
2570
2593
|
}
|
2571
2594
|
if (inputCustodyConfig.mintKey.equals(collateralCustodyConfig.mintKey)) {
|
@@ -2631,8 +2654,7 @@ var PerpetualsClient = (function () {
|
|
2631
2654
|
}
|
2632
2655
|
custodyAccountMetas = [];
|
2633
2656
|
custodyOracleAccountMetas = [];
|
2634
|
-
|
2635
|
-
for (_i = 0, _c = poolConfig.custodies; _i < _c.length; _i++) {
|
2657
|
+
for (_i = 0, _c = swapPoolConfig.custodies; _i < _c.length; _i++) {
|
2636
2658
|
custody = _c[_i];
|
2637
2659
|
custodyAccountMetas.push({
|
2638
2660
|
pubkey: custody.custodyAccount,
|
@@ -2644,55 +2666,40 @@ var PerpetualsClient = (function () {
|
|
2644
2666
|
isSigner: false,
|
2645
2667
|
isWritable: false,
|
2646
2668
|
});
|
2647
|
-
custodyCustomOracles.push({
|
2648
|
-
pubkey: poolConfig.backupOracle,
|
2649
|
-
isSigner: false,
|
2650
|
-
isWritable: false,
|
2651
|
-
});
|
2652
2669
|
}
|
2653
|
-
|
2654
|
-
.updatePoolAum()
|
2655
|
-
.accounts({
|
2656
|
-
payer: publicKey,
|
2657
|
-
perpetuals: poolConfig.perpetuals,
|
2658
|
-
pool: poolConfig.poolAddress,
|
2659
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
2660
|
-
})
|
2661
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), custodyCustomOracles, true))
|
2662
|
-
.instruction()];
|
2663
|
-
case 8:
|
2664
|
-
poolAumInstruction = _d.sent();
|
2665
|
-
preInstructions.push(poolAumInstruction);
|
2670
|
+
marketAccount = positionPoolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2666
2671
|
return [4, this.programPerpComposability.methods.swapAndAddCollateral({
|
2667
2672
|
amountIn: amountIn,
|
2668
2673
|
minAmountOut: minAmountOut,
|
2669
2674
|
}).accounts({
|
2670
|
-
|
2675
|
+
perpProgram: this.programId,
|
2671
2676
|
owner: publicKey,
|
2672
|
-
position: positionPubKey,
|
2673
2677
|
fundingAccount: inputSymbol == 'SOL' ? wrappedSolAccount.publicKey : userInputTokenAccount,
|
2674
2678
|
receivingAccount: userCollateralTokenAccount,
|
2675
|
-
transferAuthority:
|
2676
|
-
perpetuals:
|
2677
|
-
|
2679
|
+
transferAuthority: swapPoolConfig.transferAuthority,
|
2680
|
+
perpetuals: swapPoolConfig.perpetuals,
|
2681
|
+
swapPool: swapPoolConfig.poolAddress,
|
2678
2682
|
receivingCustody: inputCustodyConfig.custodyAccount,
|
2679
2683
|
receivingCustodyOracleAccount: inputCustodyConfig.oracleAddress,
|
2680
|
-
receivingCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2681
2684
|
receivingCustodyTokenAccount: inputCustodyConfig.tokenAccount,
|
2682
|
-
dispensingCustody:
|
2683
|
-
dispensingCustodyOracleAccount:
|
2684
|
-
|
2685
|
-
|
2686
|
-
|
2687
|
-
|
2688
|
-
|
2685
|
+
dispensingCustody: outputCustodyConfig.custodyAccount,
|
2686
|
+
dispensingCustodyOracleAccount: outputCustodyConfig.oracleAddress,
|
2687
|
+
dispensingCustodyTokenAccount: outputCustodyConfig.tokenAccount,
|
2688
|
+
positionPool: positionPoolConfig.poolAddress,
|
2689
|
+
position: positionPubKey,
|
2690
|
+
market: marketAccount,
|
2691
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2692
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2693
|
+
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2694
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2695
|
+
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2689
2696
|
eventAuthority: this.eventAuthority.publicKey,
|
2690
2697
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2691
|
-
perpProgram: this.programId,
|
2692
2698
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2693
2699
|
})
|
2700
|
+
.remainingAccounts(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true))
|
2694
2701
|
.instruction()];
|
2695
|
-
case
|
2702
|
+
case 8:
|
2696
2703
|
instruction = _d.sent();
|
2697
2704
|
instructions.push(instruction);
|
2698
2705
|
return [2, {
|
@@ -2703,11 +2710,11 @@ var PerpetualsClient = (function () {
|
|
2703
2710
|
});
|
2704
2711
|
});
|
2705
2712
|
};
|
2706
|
-
this.removeCollateral = function (collateralWithFee, marketSymbol, collateralSymbol, positionPubKey, poolConfig, createUserATA, closeUsersWSOLATA) {
|
2713
|
+
this.removeCollateral = function (collateralWithFee, marketSymbol, collateralSymbol, side, positionPubKey, poolConfig, createUserATA, closeUsersWSOLATA) {
|
2707
2714
|
if (createUserATA === void 0) { createUserATA = true; }
|
2708
2715
|
if (closeUsersWSOLATA === void 0) { closeUsersWSOLATA = false; }
|
2709
2716
|
return __awaiter(_this, void 0, void 0, function () {
|
2710
|
-
var publicKey, collateralCustodyConfig,
|
2717
|
+
var publicKey, collateralCustodyConfig, targetCustodyConfig, userReceivingTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, lamports, _a, marketAccount, instruction, closeWsolATAIns, error_3;
|
2711
2718
|
return __generator(this, function (_b) {
|
2712
2719
|
switch (_b.label) {
|
2713
2720
|
case 0:
|
@@ -2715,10 +2722,10 @@ var PerpetualsClient = (function () {
|
|
2715
2722
|
collateralCustodyConfig = poolConfig.custodies.find(function (i) {
|
2716
2723
|
return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey);
|
2717
2724
|
});
|
2718
|
-
|
2725
|
+
targetCustodyConfig = poolConfig.custodies.find(function (i) {
|
2719
2726
|
return i.mintKey.equals(poolConfig.getTokenFromSymbol(marketSymbol).mintKey);
|
2720
2727
|
});
|
2721
|
-
if (!collateralCustodyConfig || !
|
2728
|
+
if (!collateralCustodyConfig || !targetCustodyConfig) {
|
2722
2729
|
throw "collateralCustodyConfig/marketCustodyConfig not found";
|
2723
2730
|
}
|
2724
2731
|
preInstructions = [];
|
@@ -2765,31 +2772,31 @@ var PerpetualsClient = (function () {
|
|
2765
2772
|
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userReceivingTokenAccount, publicKey, poolConfig.getTokenFromSymbol(collateralSymbol).mintKey));
|
2766
2773
|
}
|
2767
2774
|
_b.label = 7;
|
2768
|
-
case 7:
|
2769
|
-
|
2770
|
-
|
2771
|
-
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2777
|
-
|
2778
|
-
|
2779
|
-
|
2780
|
-
|
2781
|
-
|
2782
|
-
|
2783
|
-
|
2784
|
-
|
2785
|
-
|
2786
|
-
|
2787
|
-
|
2788
|
-
|
2789
|
-
|
2790
|
-
|
2791
|
-
|
2792
|
-
|
2775
|
+
case 7:
|
2776
|
+
marketAccount = poolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2777
|
+
return [4, this.program.methods
|
2778
|
+
.removeCollateral({
|
2779
|
+
collateralDelta: collateralWithFee,
|
2780
|
+
})
|
2781
|
+
.accounts({
|
2782
|
+
owner: publicKey,
|
2783
|
+
receivingAccount: collateralSymbol == 'SOL' ? wrappedSolAccount.publicKey : userReceivingTokenAccount,
|
2784
|
+
transferAuthority: poolConfig.transferAuthority,
|
2785
|
+
perpetuals: poolConfig.perpetuals,
|
2786
|
+
pool: poolConfig.poolAddress,
|
2787
|
+
position: positionPubKey,
|
2788
|
+
market: marketAccount,
|
2789
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2790
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2791
|
+
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2792
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2793
|
+
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2794
|
+
eventAuthority: this.eventAuthority.publicKey,
|
2795
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2796
|
+
program: this.programId,
|
2797
|
+
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2798
|
+
})
|
2799
|
+
.instruction()];
|
2793
2800
|
case 8:
|
2794
2801
|
instruction = _b.sent();
|
2795
2802
|
instructions.push(instruction);
|
@@ -2810,15 +2817,16 @@ var PerpetualsClient = (function () {
|
|
2810
2817
|
});
|
2811
2818
|
});
|
2812
2819
|
};
|
2813
|
-
this.
|
2814
|
-
var publicKey,
|
2820
|
+
this.removeCollateralWithSwap = function (targetSymbol, collateralSymbol, outputSymbol, minAmountOut, collateralDelta, side, swapPoolConfig, positionPoolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
2821
|
+
var publicKey, targetCustodyConfig, collateralCustodyConfig, inputCusotdyConfig, outputCustodyConfig, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userReceivingTokenAccount, lamports, userCollateralTokenAccount, marketAccount, positionAccount, custodyAccountMetas, custodyOracleAccountMetas, _i, _a, custody, instruction;
|
2815
2822
|
return __generator(this, function (_b) {
|
2816
2823
|
switch (_b.label) {
|
2817
2824
|
case 0:
|
2818
2825
|
publicKey = this.provider.wallet.publicKey;
|
2819
|
-
|
2820
|
-
collateralCustodyConfig =
|
2821
|
-
|
2826
|
+
targetCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(targetSymbol).mintKey); });
|
2827
|
+
collateralCustodyConfig = positionPoolConfig.custodies.find(function (i) { return i.mintKey.equals(positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2828
|
+
inputCusotdyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey); });
|
2829
|
+
outputCustodyConfig = swapPoolConfig.custodies.find(function (i) { return i.mintKey.equals(swapPoolConfig.getTokenFromSymbol(outputSymbol).mintKey); });
|
2822
2830
|
if (outputCustodyConfig.mintKey.equals(collateralCustodyConfig.mintKey)) {
|
2823
2831
|
throw "Dont use swap, just call remove collateral";
|
2824
2832
|
}
|
@@ -2847,33 +2855,27 @@ var PerpetualsClient = (function () {
|
|
2847
2855
|
];
|
2848
2856
|
additionalSigners.push(wrappedSolAccount);
|
2849
2857
|
return [3, 5];
|
2850
|
-
case 2: return [4, (0, spl_token_1.getAssociatedTokenAddress)(
|
2858
|
+
case 2: return [4, (0, spl_token_1.getAssociatedTokenAddress)(swapPoolConfig.getTokenFromSymbol(outputSymbol).mintKey, publicKey)];
|
2851
2859
|
case 3:
|
2852
2860
|
userReceivingTokenAccount = _b.sent();
|
2853
2861
|
return [4, (0, utils_1.checkIfAccountExists)(userReceivingTokenAccount, this.provider.connection)];
|
2854
2862
|
case 4:
|
2855
2863
|
if (!(_b.sent())) {
|
2856
|
-
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userReceivingTokenAccount, publicKey,
|
2864
|
+
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userReceivingTokenAccount, publicKey, swapPoolConfig.getTokenFromSymbol(outputSymbol).mintKey));
|
2857
2865
|
}
|
2858
2866
|
_b.label = 5;
|
2859
2867
|
case 5:
|
2860
|
-
userCollateralTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(
|
2868
|
+
userCollateralTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey, publicKey);
|
2861
2869
|
return [4, (0, utils_1.checkIfAccountExists)(userCollateralTokenAccount, this.provider.connection)];
|
2862
2870
|
case 6:
|
2863
2871
|
if (!(_b.sent())) {
|
2864
|
-
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userCollateralTokenAccount, publicKey,
|
2872
|
+
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userCollateralTokenAccount, publicKey, positionPoolConfig.getTokenFromSymbol(collateralSymbol).mintKey));
|
2865
2873
|
}
|
2866
|
-
|
2867
|
-
|
2868
|
-
publicKey.toBuffer(),
|
2869
|
-
poolConfig.poolAddress.toBuffer(),
|
2870
|
-
marketCustodyConfig.custodyAccount.toBuffer(),
|
2871
|
-
(0, types_1.isVariant)(side, 'long') ? Buffer.from([1]) : Buffer.from([2]),
|
2872
|
-
], this.programId)[0];
|
2874
|
+
marketAccount = positionPoolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2875
|
+
positionAccount = positionPoolConfig.getPositionFromMarketPk(publicKey, marketAccount);
|
2873
2876
|
custodyAccountMetas = [];
|
2874
2877
|
custodyOracleAccountMetas = [];
|
2875
|
-
|
2876
|
-
for (_i = 0, _a = poolConfig.custodies; _i < _a.length; _i++) {
|
2878
|
+
for (_i = 0, _a = swapPoolConfig.custodies; _i < _a.length; _i++) {
|
2877
2879
|
custody = _a[_i];
|
2878
2880
|
custodyAccountMetas.push({
|
2879
2881
|
pubkey: custody.custodyAccount,
|
@@ -2885,57 +2887,41 @@ var PerpetualsClient = (function () {
|
|
2885
2887
|
isSigner: false,
|
2886
2888
|
isWritable: false,
|
2887
2889
|
});
|
2888
|
-
custodyCustomOracles.push({
|
2889
|
-
pubkey: poolConfig.backupOracle,
|
2890
|
-
isSigner: false,
|
2891
|
-
isWritable: false,
|
2892
|
-
});
|
2893
2890
|
}
|
2894
|
-
return [4, this.program.methods
|
2895
|
-
.updatePoolAum()
|
2896
|
-
.accounts({
|
2897
|
-
payer: publicKey,
|
2898
|
-
perpetuals: poolConfig.perpetuals,
|
2899
|
-
pool: poolConfig.poolAddress,
|
2900
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2901
|
-
})
|
2902
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), custodyCustomOracles, true))
|
2903
|
-
.instruction()];
|
2904
|
-
case 7:
|
2905
|
-
poolAumInstruction = _b.sent();
|
2906
|
-
preInstructions.push(poolAumInstruction);
|
2907
2891
|
return [4, this.programPerpComposability.methods
|
2908
2892
|
.removeCollateralAndSwap({
|
2909
2893
|
minAmountOut: minAmountOut,
|
2910
2894
|
collateralDelta: collateralDelta,
|
2911
2895
|
})
|
2912
2896
|
.accounts({
|
2913
|
-
|
2897
|
+
perpProgram: this.programId,
|
2914
2898
|
owner: publicKey,
|
2915
2899
|
fundingAccount: userCollateralTokenAccount,
|
2916
2900
|
receivingAccount: outputSymbol == 'SOL' ? wrappedSolAccount.publicKey : userReceivingTokenAccount,
|
2917
|
-
transferAuthority:
|
2918
|
-
perpetuals:
|
2919
|
-
|
2920
|
-
receivingCustody:
|
2921
|
-
receivingCustodyOracleAccount:
|
2922
|
-
|
2923
|
-
receivingCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2901
|
+
transferAuthority: swapPoolConfig.transferAuthority,
|
2902
|
+
perpetuals: swapPoolConfig.perpetuals,
|
2903
|
+
swapPool: swapPoolConfig.poolAddress,
|
2904
|
+
receivingCustody: inputCusotdyConfig.custodyAccount,
|
2905
|
+
receivingCustodyOracleAccount: inputCusotdyConfig.oracleAddress,
|
2906
|
+
receivingCustodyTokenAccount: inputCusotdyConfig.tokenAccount,
|
2924
2907
|
dispensingCustody: outputCustodyConfig.custodyAccount,
|
2925
2908
|
dispensingCustodyOracleAccount: outputCustodyConfig.oracleAddress,
|
2926
|
-
dispensingCustodyCustomOracleAccount: poolConfig.backupOracle,
|
2927
2909
|
dispensingCustodyTokenAccount: outputCustodyConfig.tokenAccount,
|
2910
|
+
positionPool: positionPoolConfig.poolAddress,
|
2928
2911
|
position: positionAccount,
|
2929
|
-
|
2930
|
-
|
2931
|
-
|
2912
|
+
market: marketAccount,
|
2913
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2914
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2915
|
+
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2916
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2917
|
+
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2932
2918
|
eventAuthority: this.eventAuthority.publicKey,
|
2933
2919
|
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2934
|
-
perpProgram: this.programId,
|
2935
2920
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2936
2921
|
})
|
2922
|
+
.remainingAccounts(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true))
|
2937
2923
|
.instruction()];
|
2938
|
-
case
|
2924
|
+
case 7:
|
2939
2925
|
instruction = _b.sent();
|
2940
2926
|
instructions.push(instruction);
|
2941
2927
|
return [2, {
|
@@ -2945,8 +2931,8 @@ var PerpetualsClient = (function () {
|
|
2945
2931
|
}
|
2946
2932
|
});
|
2947
2933
|
}); };
|
2948
|
-
this.increaseSize = function (
|
2949
|
-
var publicKey, collateralCustodyConfig,
|
2934
|
+
this.increaseSize = function (targetSymbol, collateralSymbol, positionPubKey, side, poolConfig, priceWithSlippage, sizeDelta, nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege) { return __awaiter(_this, void 0, void 0, function () {
|
2935
|
+
var publicKey, collateralCustodyConfig, targetCustodyConfig, marketAccount, preInstructions, instructions, postInstructions, additionalSigners, instruction;
|
2950
2936
|
return __generator(this, function (_a) {
|
2951
2937
|
switch (_a.label) {
|
2952
2938
|
case 0:
|
@@ -2954,38 +2940,41 @@ var PerpetualsClient = (function () {
|
|
2954
2940
|
collateralCustodyConfig = poolConfig.custodies.find(function (i) {
|
2955
2941
|
return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey);
|
2956
2942
|
});
|
2957
|
-
|
2958
|
-
return i.mintKey.equals(poolConfig.getTokenFromSymbol(
|
2943
|
+
targetCustodyConfig = poolConfig.custodies.find(function (i) {
|
2944
|
+
return i.mintKey.equals(poolConfig.getTokenFromSymbol(targetSymbol).mintKey);
|
2959
2945
|
});
|
2960
|
-
|
2946
|
+
marketAccount = poolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
2947
|
+
if (!collateralCustodyConfig || !targetCustodyConfig) {
|
2961
2948
|
throw "collateralCustodyConfig/marketCustodyConfig not found";
|
2962
2949
|
}
|
2963
2950
|
preInstructions = [];
|
2964
2951
|
instructions = [];
|
2965
2952
|
postInstructions = [];
|
2966
2953
|
additionalSigners = [];
|
2967
|
-
params = {
|
2968
|
-
price: price,
|
2969
|
-
sizeDelta: sizeDelta
|
2970
|
-
};
|
2971
2954
|
return [4, this.program.methods
|
2972
|
-
.increaseSize(
|
2955
|
+
.increaseSize({
|
2956
|
+
priceWithSlippage: priceWithSlippage,
|
2957
|
+
sizeDelta: sizeDelta,
|
2958
|
+
privilege: privilege
|
2959
|
+
})
|
2973
2960
|
.accounts({
|
2974
|
-
delegate: publicKey,
|
2975
2961
|
owner: publicKey,
|
2962
|
+
transferAuthority: poolConfig.transferAuthority,
|
2976
2963
|
perpetuals: poolConfig.perpetuals,
|
2977
2964
|
pool: poolConfig.poolAddress,
|
2978
2965
|
position: positionPubKey,
|
2979
|
-
|
2980
|
-
|
2981
|
-
|
2966
|
+
market: marketAccount,
|
2967
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
2968
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
2982
2969
|
collateralCustody: collateralCustodyConfig.custodyAccount,
|
2983
|
-
|
2984
|
-
|
2970
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
2971
|
+
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
2972
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
2985
2973
|
eventAuthority: this.eventAuthority.publicKey,
|
2986
2974
|
program: this.programId,
|
2987
2975
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
2988
2976
|
})
|
2977
|
+
.remainingAccounts(__spreadArray([], (0, getNftAccounts_1.getNftAccounts)(nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege), true))
|
2989
2978
|
.instruction()];
|
2990
2979
|
case 1:
|
2991
2980
|
instruction = _a.sent();
|
@@ -2997,8 +2986,8 @@ var PerpetualsClient = (function () {
|
|
2997
2986
|
}
|
2998
2987
|
});
|
2999
2988
|
}); };
|
3000
|
-
this.decreaseSize = function (
|
3001
|
-
var publicKey, collateralCustodyConfig,
|
2989
|
+
this.decreaseSize = function (targetSymbol, collateralSymbol, side, positionPubKey, poolConfig, priceWithSlippage, sizeDelta, nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege) { return __awaiter(_this, void 0, void 0, function () {
|
2990
|
+
var publicKey, collateralCustodyConfig, targetCustodyConfig, marketAccount, preInstructions, instructions, postInstructions, additionalSigners, instruction;
|
3002
2991
|
return __generator(this, function (_a) {
|
3003
2992
|
switch (_a.label) {
|
3004
2993
|
case 0:
|
@@ -3006,39 +2995,41 @@ var PerpetualsClient = (function () {
|
|
3006
2995
|
collateralCustodyConfig = poolConfig.custodies.find(function (i) {
|
3007
2996
|
return i.mintKey.equals(poolConfig.getTokenFromSymbol(collateralSymbol).mintKey);
|
3008
2997
|
});
|
3009
|
-
|
3010
|
-
return i.mintKey.equals(poolConfig.getTokenFromSymbol(
|
2998
|
+
targetCustodyConfig = poolConfig.custodies.find(function (i) {
|
2999
|
+
return i.mintKey.equals(poolConfig.getTokenFromSymbol(targetSymbol).mintKey);
|
3011
3000
|
});
|
3012
|
-
|
3001
|
+
marketAccount = poolConfig.getMarketPk(targetCustodyConfig.custodyAccount, collateralCustodyConfig.custodyAccount, side);
|
3002
|
+
if (!collateralCustodyConfig || !targetCustodyConfig) {
|
3013
3003
|
throw "collateralCustodyConfig/marketCustodyConfig not found";
|
3014
3004
|
}
|
3015
3005
|
preInstructions = [];
|
3016
3006
|
instructions = [];
|
3017
3007
|
postInstructions = [];
|
3018
3008
|
additionalSigners = [];
|
3019
|
-
params = {
|
3020
|
-
price: priceAfterSlippage,
|
3021
|
-
sizeDelta: sizeDelta
|
3022
|
-
};
|
3023
3009
|
return [4, this.program.methods
|
3024
|
-
.decreaseSize(
|
3010
|
+
.decreaseSize({
|
3011
|
+
priceWithSlippage: priceWithSlippage,
|
3012
|
+
sizeDelta: sizeDelta,
|
3013
|
+
privilege: privilege
|
3014
|
+
})
|
3025
3015
|
.accounts({
|
3026
|
-
delegate: publicKey,
|
3027
3016
|
owner: publicKey,
|
3017
|
+
transferAuthority: poolConfig.transferAuthority,
|
3028
3018
|
perpetuals: poolConfig.perpetuals,
|
3029
3019
|
pool: poolConfig.poolAddress,
|
3030
3020
|
position: positionPubKey,
|
3031
|
-
|
3032
|
-
|
3033
|
-
|
3021
|
+
market: marketAccount,
|
3022
|
+
targetCustody: targetCustodyConfig.custodyAccount,
|
3023
|
+
targetOracleAccount: targetCustodyConfig.oracleAddress,
|
3034
3024
|
collateralCustody: collateralCustodyConfig.custodyAccount,
|
3035
|
-
|
3036
|
-
collateralCustodyCustomOracleAccount: poolConfig.backupOracle,
|
3025
|
+
collateralOracleAccount: collateralCustodyConfig.oracleAddress,
|
3037
3026
|
collateralCustodyTokenAccount: collateralCustodyConfig.tokenAccount,
|
3027
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3038
3028
|
eventAuthority: this.eventAuthority.publicKey,
|
3039
3029
|
program: this.programId,
|
3040
3030
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
3041
3031
|
})
|
3032
|
+
.remainingAccounts(__spreadArray([], (0, getNftAccounts_1.getNftAccounts)(nftTradingAccount, nftReferralAccount, nftRebateTokenAccount, privilege), true))
|
3042
3033
|
.instruction()];
|
3043
3034
|
case 1:
|
3044
3035
|
instruction = _a.sent();
|
@@ -3053,9 +3044,9 @@ var PerpetualsClient = (function () {
|
|
3053
3044
|
this.addLiquidity = function (payTokenSymbol, tokenAmountIn, minLpAmountOut, poolConfig, skipBalanceChecks) {
|
3054
3045
|
if (skipBalanceChecks === void 0) { skipBalanceChecks = false; }
|
3055
3046
|
return __awaiter(_this, void 0, void 0, function () {
|
3056
|
-
var publicKey, payTokenCustodyConfig, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userPayingTokenAccount, lpTokenAccount, custodyAccountMetas, custodyOracleAccountMetas,
|
3057
|
-
return __generator(this, function (
|
3058
|
-
switch (
|
3047
|
+
var publicKey, payTokenCustodyConfig, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, userPayingTokenAccount, lpTokenAccount, custodyAccountMetas, custodyOracleAccountMetas, markets, _i, _a, custody, _b, _c, market, accCreationLamports, lamports, unWrappedSolBalance, _d, tokenAccountBalance, _e, instruction, err_3;
|
3048
|
+
return __generator(this, function (_f) {
|
3049
|
+
switch (_f.label) {
|
3059
3050
|
case 0:
|
3060
3051
|
publicKey = this.provider.wallet.publicKey;
|
3061
3052
|
payTokenCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(payTokenSymbol).mintKey); });
|
@@ -3066,18 +3057,18 @@ var PerpetualsClient = (function () {
|
|
3066
3057
|
instructions = [];
|
3067
3058
|
postInstructions = [];
|
3068
3059
|
additionalSigners = [];
|
3069
|
-
|
3060
|
+
_f.label = 1;
|
3070
3061
|
case 1:
|
3071
|
-
|
3062
|
+
_f.trys.push([1, 12, , 13]);
|
3072
3063
|
return [4, (0, spl_token_1.getAssociatedTokenAddress)(payTokenCustodyConfig.mintKey, publicKey)];
|
3073
3064
|
case 2:
|
3074
|
-
userPayingTokenAccount =
|
3065
|
+
userPayingTokenAccount = _f.sent();
|
3075
3066
|
return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.lpTokenMint, publicKey)];
|
3076
3067
|
case 3:
|
3077
|
-
lpTokenAccount =
|
3068
|
+
lpTokenAccount = _f.sent();
|
3078
3069
|
custodyAccountMetas = [];
|
3079
3070
|
custodyOracleAccountMetas = [];
|
3080
|
-
|
3071
|
+
markets = [];
|
3081
3072
|
for (_i = 0, _a = poolConfig.custodies; _i < _a.length; _i++) {
|
3082
3073
|
custody = _a[_i];
|
3083
3074
|
custodyAccountMetas.push({
|
@@ -3090,15 +3081,18 @@ var PerpetualsClient = (function () {
|
|
3090
3081
|
isSigner: false,
|
3091
3082
|
isWritable: false,
|
3092
3083
|
});
|
3093
|
-
|
3094
|
-
|
3084
|
+
}
|
3085
|
+
for (_b = 0, _c = poolConfig.markets; _b < _c.length; _b++) {
|
3086
|
+
market = _c[_b];
|
3087
|
+
markets.push({
|
3088
|
+
pubkey: market.marketAccount,
|
3095
3089
|
isSigner: false,
|
3096
3090
|
isWritable: false,
|
3097
3091
|
});
|
3098
3092
|
}
|
3099
3093
|
return [4, (0, utils_1.checkIfAccountExists)(lpTokenAccount, this.provider.connection)];
|
3100
3094
|
case 4:
|
3101
|
-
if (!(
|
3095
|
+
if (!(_f.sent())) {
|
3102
3096
|
instructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, lpTokenAccount, publicKey, poolConfig.lpTokenMint));
|
3103
3097
|
}
|
3104
3098
|
if (!(payTokenSymbol == 'SOL')) return [3, 7];
|
@@ -3106,13 +3100,13 @@ var PerpetualsClient = (function () {
|
|
3106
3100
|
wrappedSolAccount = new web3_js_1.Keypair();
|
3107
3101
|
return [4, (0, spl_token_1.getMinimumBalanceForRentExemptAccount)(this.provider.connection)];
|
3108
3102
|
case 5:
|
3109
|
-
accCreationLamports = (
|
3103
|
+
accCreationLamports = (_f.sent());
|
3110
3104
|
console.log("accCreationLamports:", accCreationLamports);
|
3111
3105
|
lamports = tokenAmountIn.add(new anchor_1.BN(accCreationLamports));
|
3112
|
-
|
3106
|
+
_d = anchor_1.BN.bind;
|
3113
3107
|
return [4, this.provider.connection.getBalance(publicKey)];
|
3114
3108
|
case 6:
|
3115
|
-
unWrappedSolBalance = new (
|
3109
|
+
unWrappedSolBalance = new (_d.apply(anchor_1.BN, [void 0, _f.sent()]))();
|
3116
3110
|
if (unWrappedSolBalance.lt(lamports)) {
|
3117
3111
|
throw "Insufficient SOL Funds";
|
3118
3112
|
}
|
@@ -3133,64 +3127,50 @@ var PerpetualsClient = (function () {
|
|
3133
3127
|
return [3, 10];
|
3134
3128
|
case 7: return [4, (0, utils_1.checkIfAccountExists)(userPayingTokenAccount, this.provider.connection)];
|
3135
3129
|
case 8:
|
3136
|
-
if (!(
|
3130
|
+
if (!(_f.sent())) {
|
3137
3131
|
throw "Insufficient Funds , token Account doesn't exist";
|
3138
3132
|
}
|
3139
3133
|
if (!!skipBalanceChecks) return [3, 10];
|
3140
|
-
|
3134
|
+
_e = anchor_1.BN.bind;
|
3141
3135
|
return [4, this.provider.connection.getTokenAccountBalance(userPayingTokenAccount)];
|
3142
3136
|
case 9:
|
3143
|
-
tokenAccountBalance = new (
|
3137
|
+
tokenAccountBalance = new (_e.apply(anchor_1.BN, [void 0, (_f.sent()).value.amount]))();
|
3144
3138
|
if (tokenAccountBalance.lt(tokenAmountIn)) {
|
3145
3139
|
throw "Insufficient Funds need more ".concat(tokenAmountIn.sub(tokenAccountBalance), " tokens");
|
3146
3140
|
}
|
3147
|
-
|
3141
|
+
_f.label = 10;
|
3148
3142
|
case 10: return [4, this.program.methods
|
3149
|
-
.
|
3143
|
+
.addLiquidity({
|
3144
|
+
amountIn: tokenAmountIn,
|
3145
|
+
minLpAmountOut: minLpAmountOut
|
3146
|
+
})
|
3150
3147
|
.accounts({
|
3151
|
-
|
3148
|
+
owner: publicKey,
|
3149
|
+
fundingAccount: payTokenSymbol == 'SOL' ? wrappedSolAccount.publicKey : userPayingTokenAccount,
|
3150
|
+
lpTokenAccount: lpTokenAccount,
|
3151
|
+
transferAuthority: poolConfig.transferAuthority,
|
3152
3152
|
perpetuals: poolConfig.perpetuals,
|
3153
3153
|
pool: poolConfig.poolAddress,
|
3154
|
-
|
3154
|
+
custody: payTokenCustodyConfig.custodyAccount,
|
3155
|
+
custodyOracleAccount: payTokenCustodyConfig.oracleAddress,
|
3156
|
+
custodyTokenAccount: payTokenCustodyConfig.tokenAccount,
|
3157
|
+
lpTokenMint: poolConfig.lpTokenMint,
|
3158
|
+
eventAuthority: this.eventAuthority.publicKey,
|
3159
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3160
|
+
program: this.programId,
|
3161
|
+
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
3155
3162
|
})
|
3156
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true),
|
3163
|
+
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), markets, true))
|
3157
3164
|
.instruction()];
|
3158
3165
|
case 11:
|
3159
|
-
|
3160
|
-
preInstructions.push(poolAumInstruction);
|
3161
|
-
return [4, this.program.methods
|
3162
|
-
.addLiquidity({
|
3163
|
-
amountIn: tokenAmountIn,
|
3164
|
-
minLpAmountOut: minLpAmountOut
|
3165
|
-
})
|
3166
|
-
.accounts({
|
3167
|
-
delegate: publicKey,
|
3168
|
-
owner: publicKey,
|
3169
|
-
fundingAccount: payTokenSymbol == 'SOL' ? wrappedSolAccount.publicKey : userPayingTokenAccount,
|
3170
|
-
lpTokenAccount: lpTokenAccount,
|
3171
|
-
transferAuthority: poolConfig.transferAuthority,
|
3172
|
-
perpetuals: poolConfig.perpetuals,
|
3173
|
-
pool: poolConfig.poolAddress,
|
3174
|
-
custody: payTokenCustodyConfig.custodyAccount,
|
3175
|
-
custodyOracleAccount: payTokenCustodyConfig.oracleAddress,
|
3176
|
-
custodyCustomOracleAccount: poolConfig.backupOracle,
|
3177
|
-
custodyTokenAccount: payTokenCustodyConfig.tokenAccount,
|
3178
|
-
lpTokenMint: poolConfig.lpTokenMint,
|
3179
|
-
eventAuthority: this.eventAuthority.publicKey,
|
3180
|
-
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3181
|
-
program: this.programId,
|
3182
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
3183
|
-
})
|
3184
|
-
.instruction()];
|
3185
|
-
case 12:
|
3186
|
-
instruction = _d.sent();
|
3166
|
+
instruction = _f.sent();
|
3187
3167
|
instructions.push(instruction);
|
3188
|
-
return [3,
|
3189
|
-
case
|
3190
|
-
err_3 =
|
3168
|
+
return [3, 13];
|
3169
|
+
case 12:
|
3170
|
+
err_3 = _f.sent();
|
3191
3171
|
console.error("perpClient addLiquidity error:: ", err_3);
|
3192
3172
|
throw err_3;
|
3193
|
-
case
|
3173
|
+
case 13: return [2, {
|
3194
3174
|
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3195
3175
|
additionalSigners: additionalSigners
|
3196
3176
|
}];
|
@@ -3203,9 +3183,9 @@ var PerpetualsClient = (function () {
|
|
3203
3183
|
if (createUserATA === void 0) { createUserATA = true; }
|
3204
3184
|
if (closeUsersWSOLATA === void 0) { closeUsersWSOLATA = false; }
|
3205
3185
|
return __awaiter(_this, void 0, void 0, function () {
|
3206
|
-
var recieveTokenCustodyConfig, publicKey, userReceivingTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, lpTokenAccount, custodyAccountMetas, custodyOracleAccountMetas,
|
3207
|
-
return __generator(this, function (
|
3208
|
-
switch (
|
3186
|
+
var recieveTokenCustodyConfig, publicKey, userReceivingTokenAccount, wrappedSolAccount, preInstructions, instructions, postInstructions, additionalSigners, lpTokenAccount, custodyAccountMetas, custodyOracleAccountMetas, markets, _i, _a, custody, _b, _c, market, lamports, _d, removeLiquidityTx, closeInx, closeWsolATAIns, err_4;
|
3187
|
+
return __generator(this, function (_e) {
|
3188
|
+
switch (_e.label) {
|
3209
3189
|
case 0:
|
3210
3190
|
recieveTokenCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(recieveTokenSymbol).mintKey); });
|
3211
3191
|
if (!recieveTokenCustodyConfig) {
|
@@ -3216,15 +3196,15 @@ var PerpetualsClient = (function () {
|
|
3216
3196
|
instructions = [];
|
3217
3197
|
postInstructions = [];
|
3218
3198
|
additionalSigners = [];
|
3219
|
-
|
3199
|
+
_e.label = 1;
|
3220
3200
|
case 1:
|
3221
|
-
|
3201
|
+
_e.trys.push([1, 10, , 11]);
|
3222
3202
|
return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.lpTokenMint, publicKey)];
|
3223
3203
|
case 2:
|
3224
|
-
lpTokenAccount =
|
3204
|
+
lpTokenAccount = _e.sent();
|
3225
3205
|
custodyAccountMetas = [];
|
3226
3206
|
custodyOracleAccountMetas = [];
|
3227
|
-
|
3207
|
+
markets = [];
|
3228
3208
|
for (_i = 0, _a = poolConfig.custodies; _i < _a.length; _i++) {
|
3229
3209
|
custody = _a[_i];
|
3230
3210
|
custodyAccountMetas.push({
|
@@ -3237,8 +3217,11 @@ var PerpetualsClient = (function () {
|
|
3237
3217
|
isSigner: false,
|
3238
3218
|
isWritable: false,
|
3239
3219
|
});
|
3240
|
-
|
3241
|
-
|
3220
|
+
}
|
3221
|
+
for (_b = 0, _c = poolConfig.markets; _b < _c.length; _b++) {
|
3222
|
+
market = _c[_b];
|
3223
|
+
markets.push({
|
3224
|
+
pubkey: market.marketAccount,
|
3242
3225
|
isSigner: false,
|
3243
3226
|
isWritable: false,
|
3244
3227
|
});
|
@@ -3248,7 +3231,7 @@ var PerpetualsClient = (function () {
|
|
3248
3231
|
userReceivingTokenAccount = wrappedSolAccount.publicKey;
|
3249
3232
|
return [4, (0, spl_token_1.getMinimumBalanceForRentExemptAccount)(this.provider.connection)];
|
3250
3233
|
case 3:
|
3251
|
-
lamports = (
|
3234
|
+
lamports = (_e.sent());
|
3252
3235
|
preInstructions = [
|
3253
3236
|
web3_js_1.SystemProgram.createAccount({
|
3254
3237
|
fromPubkey: publicKey,
|
@@ -3266,31 +3249,19 @@ var PerpetualsClient = (function () {
|
|
3266
3249
|
return [3, 8];
|
3267
3250
|
case 4: return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.getTokenFromSymbol(recieveTokenSymbol).mintKey, publicKey)];
|
3268
3251
|
case 5:
|
3269
|
-
userReceivingTokenAccount =
|
3270
|
-
|
3271
|
-
if (!
|
3252
|
+
userReceivingTokenAccount = _e.sent();
|
3253
|
+
_d = createUserATA;
|
3254
|
+
if (!_d) return [3, 7];
|
3272
3255
|
return [4, (0, utils_1.checkIfAccountExists)(userReceivingTokenAccount, this.provider.connection)];
|
3273
3256
|
case 6:
|
3274
|
-
|
3275
|
-
|
3257
|
+
_d = !(_e.sent());
|
3258
|
+
_e.label = 7;
|
3276
3259
|
case 7:
|
3277
|
-
if (
|
3260
|
+
if (_d) {
|
3278
3261
|
preInstructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, userReceivingTokenAccount, publicKey, poolConfig.getTokenFromSymbol(recieveTokenSymbol).mintKey));
|
3279
3262
|
}
|
3280
|
-
|
3281
|
-
case 8:
|
3282
|
-
.updatePoolAum()
|
3283
|
-
.accounts({
|
3284
|
-
payer: publicKey,
|
3285
|
-
perpetuals: poolConfig.perpetuals,
|
3286
|
-
pool: poolConfig.poolAddress,
|
3287
|
-
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
|
3288
|
-
})
|
3289
|
-
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), custodyCustomOracles, true))
|
3290
|
-
.instruction()];
|
3291
|
-
case 9:
|
3292
|
-
poolAumInstruction = _c.sent();
|
3293
|
-
preInstructions.push(poolAumInstruction);
|
3263
|
+
_e.label = 8;
|
3264
|
+
case 8:
|
3294
3265
|
console.log("liquidityAmountIn", liquidityAmountIn.toString());
|
3295
3266
|
return [4, this.program.methods
|
3296
3267
|
.removeLiquidity({
|
@@ -3298,7 +3269,6 @@ var PerpetualsClient = (function () {
|
|
3298
3269
|
minAmountOut: minTokenAmountOut
|
3299
3270
|
})
|
3300
3271
|
.accounts({
|
3301
|
-
delegate: publicKey,
|
3302
3272
|
owner: publicKey,
|
3303
3273
|
receivingAccount: recieveTokenSymbol == 'SOL' ? wrappedSolAccount.publicKey : userReceivingTokenAccount,
|
3304
3274
|
lpTokenAccount: lpTokenAccount,
|
@@ -3307,7 +3277,6 @@ var PerpetualsClient = (function () {
|
|
3307
3277
|
pool: poolConfig.poolAddress,
|
3308
3278
|
custody: recieveTokenCustodyConfig.custodyAccount,
|
3309
3279
|
custodyOracleAccount: recieveTokenCustodyConfig.oracleAddress,
|
3310
|
-
custodyCustomOracleAccount: poolConfig.backupOracle,
|
3311
3280
|
custodyTokenAccount: recieveTokenCustodyConfig.tokenAccount,
|
3312
3281
|
lpTokenMint: poolConfig.lpTokenMint,
|
3313
3282
|
eventAuthority: this.eventAuthority.publicKey,
|
@@ -3315,9 +3284,10 @@ var PerpetualsClient = (function () {
|
|
3315
3284
|
program: this.programId,
|
3316
3285
|
ixSysvar: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY
|
3317
3286
|
})
|
3287
|
+
.remainingAccounts(__spreadArray(__spreadArray(__spreadArray([], custodyAccountMetas, true), custodyOracleAccountMetas, true), markets, true))
|
3318
3288
|
.instruction()];
|
3319
|
-
case
|
3320
|
-
removeLiquidityTx =
|
3289
|
+
case 9:
|
3290
|
+
removeLiquidityTx = _e.sent();
|
3321
3291
|
instructions.push(removeLiquidityTx);
|
3322
3292
|
if (closeLpATA) {
|
3323
3293
|
closeInx = (0, spl_token_1.createCloseAccountInstruction)(lpTokenAccount, publicKey, publicKey);
|
@@ -3327,12 +3297,12 @@ var PerpetualsClient = (function () {
|
|
3327
3297
|
closeWsolATAIns = (0, spl_token_1.createCloseAccountInstruction)(userReceivingTokenAccount, publicKey, publicKey);
|
3328
3298
|
postInstructions.push(closeWsolATAIns);
|
3329
3299
|
}
|
3330
|
-
return [3,
|
3331
|
-
case
|
3332
|
-
err_4 =
|
3300
|
+
return [3, 11];
|
3301
|
+
case 10:
|
3302
|
+
err_4 = _e.sent();
|
3333
3303
|
console.log("perpClient removeLiquidity error:: ", err_4);
|
3334
3304
|
throw err_4;
|
3335
|
-
case
|
3305
|
+
case 11: return [2, {
|
3336
3306
|
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3337
3307
|
additionalSigners: additionalSigners
|
3338
3308
|
}];
|
@@ -3340,6 +3310,574 @@ var PerpetualsClient = (function () {
|
|
3340
3310
|
});
|
3341
3311
|
});
|
3342
3312
|
};
|
3313
|
+
this.addReferral = function (nftTradingAccount, nftReferralAccount) { return __awaiter(_this, void 0, void 0, function () {
|
3314
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, addReferralInstruction, err_5;
|
3315
|
+
return __generator(this, function (_a) {
|
3316
|
+
switch (_a.label) {
|
3317
|
+
case 0:
|
3318
|
+
publicKey = this.provider.wallet.publicKey;
|
3319
|
+
preInstructions = [];
|
3320
|
+
instructions = [];
|
3321
|
+
postInstructions = [];
|
3322
|
+
additionalSigners = [];
|
3323
|
+
_a.label = 1;
|
3324
|
+
case 1:
|
3325
|
+
_a.trys.push([1, 3, , 4]);
|
3326
|
+
return [4, this.program.methods
|
3327
|
+
.createReferral({})
|
3328
|
+
.accounts({
|
3329
|
+
owner: publicKey,
|
3330
|
+
feePayer: publicKey,
|
3331
|
+
referralAccount: nftReferralAccount,
|
3332
|
+
tradingAccount: nftTradingAccount,
|
3333
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
3334
|
+
})
|
3335
|
+
.instruction()];
|
3336
|
+
case 2:
|
3337
|
+
addReferralInstruction = _a.sent();
|
3338
|
+
instructions.push(addReferralInstruction);
|
3339
|
+
return [3, 4];
|
3340
|
+
case 3:
|
3341
|
+
err_5 = _a.sent();
|
3342
|
+
console.log("perpClient addReferral error:: ", err_5);
|
3343
|
+
throw err_5;
|
3344
|
+
case 4: return [2, {
|
3345
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3346
|
+
additionalSigners: additionalSigners
|
3347
|
+
}];
|
3348
|
+
}
|
3349
|
+
});
|
3350
|
+
}); };
|
3351
|
+
this.createNftTradingAccount = function (nftMint, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3352
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, nftTradingAccount, metadataAccount, nftTokenAccount, createNftTradingAccountInstruction, err_6;
|
3353
|
+
return __generator(this, function (_a) {
|
3354
|
+
switch (_a.label) {
|
3355
|
+
case 0:
|
3356
|
+
publicKey = this.provider.wallet.publicKey;
|
3357
|
+
preInstructions = [];
|
3358
|
+
instructions = [];
|
3359
|
+
postInstructions = [];
|
3360
|
+
additionalSigners = [];
|
3361
|
+
_a.label = 1;
|
3362
|
+
case 1:
|
3363
|
+
_a.trys.push([1, 4, , 5]);
|
3364
|
+
nftTradingAccount = web3_js_1.PublicKey.findProgramAddressSync([
|
3365
|
+
Buffer.from("trading"),
|
3366
|
+
nftMint.toBuffer(),
|
3367
|
+
], this.programId)[0];
|
3368
|
+
metadataAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("metadata"), constants_1.METAPLEX_PROGRAM_ID.toBuffer(), nftMint.toBuffer()], constants_1.METAPLEX_PROGRAM_ID)[0];
|
3369
|
+
return [4, (0, spl_token_1.getAssociatedTokenAddress)(nftMint, publicKey)];
|
3370
|
+
case 2:
|
3371
|
+
nftTokenAccount = _a.sent();
|
3372
|
+
return [4, this.program.methods
|
3373
|
+
.createTradingAccount({
|
3374
|
+
collectionIndex: 0
|
3375
|
+
})
|
3376
|
+
.accounts({
|
3377
|
+
feePayer: publicKey,
|
3378
|
+
perpetuals: poolConfig.perpetuals,
|
3379
|
+
nftMint: nftMint,
|
3380
|
+
nftTokenAccount: nftTokenAccount,
|
3381
|
+
tradingAccount: nftTradingAccount,
|
3382
|
+
metadataAccount: metadataAccount,
|
3383
|
+
systemProgram: web3_js_1.SystemProgram.programId
|
3384
|
+
})
|
3385
|
+
.instruction()];
|
3386
|
+
case 3:
|
3387
|
+
createNftTradingAccountInstruction = _a.sent();
|
3388
|
+
instructions.push(createNftTradingAccountInstruction);
|
3389
|
+
return [3, 5];
|
3390
|
+
case 4:
|
3391
|
+
err_6 = _a.sent();
|
3392
|
+
console.log("perpClient createNftAccount error:: ", err_6);
|
3393
|
+
throw err_6;
|
3394
|
+
case 5: return [2, {
|
3395
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3396
|
+
additionalSigners: additionalSigners
|
3397
|
+
}];
|
3398
|
+
}
|
3399
|
+
});
|
3400
|
+
}); };
|
3401
|
+
this.updateNftAccount = function (nftMint) { return __awaiter(_this, void 0, void 0, function () {
|
3402
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, nftTradingAccount, nftReferralAccount, nftTokenAccount, updateNftTradingAccountInstruction, err_7;
|
3403
|
+
return __generator(this, function (_a) {
|
3404
|
+
switch (_a.label) {
|
3405
|
+
case 0:
|
3406
|
+
publicKey = this.provider.wallet.publicKey;
|
3407
|
+
preInstructions = [];
|
3408
|
+
instructions = [];
|
3409
|
+
postInstructions = [];
|
3410
|
+
additionalSigners = [];
|
3411
|
+
_a.label = 1;
|
3412
|
+
case 1:
|
3413
|
+
_a.trys.push([1, 4, , 5]);
|
3414
|
+
nftTradingAccount = web3_js_1.PublicKey.findProgramAddressSync([
|
3415
|
+
Buffer.from("trading"),
|
3416
|
+
nftMint.toBuffer(),
|
3417
|
+
], this.programId)[0];
|
3418
|
+
nftReferralAccount = web3_js_1.PublicKey.findProgramAddressSync([
|
3419
|
+
Buffer.from("referral"),
|
3420
|
+
publicKey.toBuffer(),
|
3421
|
+
], this.programId)[0];
|
3422
|
+
return [4, (0, spl_token_1.getAssociatedTokenAddress)(nftMint, publicKey)];
|
3423
|
+
case 2:
|
3424
|
+
nftTokenAccount = _a.sent();
|
3425
|
+
return [4, this.program.methods
|
3426
|
+
.updateTradingAccount({})
|
3427
|
+
.accounts({
|
3428
|
+
owner: publicKey,
|
3429
|
+
feePayer: publicKey,
|
3430
|
+
nftTokenAccount: nftTokenAccount,
|
3431
|
+
referralAccount: nftReferralAccount,
|
3432
|
+
tradingAccount: nftTradingAccount
|
3433
|
+
})
|
3434
|
+
.instruction()];
|
3435
|
+
case 3:
|
3436
|
+
updateNftTradingAccountInstruction = _a.sent();
|
3437
|
+
instructions.push(updateNftTradingAccountInstruction);
|
3438
|
+
return [3, 5];
|
3439
|
+
case 4:
|
3440
|
+
err_7 = _a.sent();
|
3441
|
+
console.log("perpClient updateNftAccount error:: ", err_7);
|
3442
|
+
throw err_7;
|
3443
|
+
case 5: return [2, {
|
3444
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3445
|
+
additionalSigners: additionalSigners
|
3446
|
+
}];
|
3447
|
+
}
|
3448
|
+
});
|
3449
|
+
}); };
|
3450
|
+
this.levelUp = function (poolConfig, nftMint) { return __awaiter(_this, void 0, void 0, function () {
|
3451
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, nftTradingAccount, metadataAccount, levelUpInstruction, err_8;
|
3452
|
+
return __generator(this, function (_a) {
|
3453
|
+
switch (_a.label) {
|
3454
|
+
case 0:
|
3455
|
+
publicKey = this.provider.wallet.publicKey;
|
3456
|
+
preInstructions = [];
|
3457
|
+
instructions = [];
|
3458
|
+
postInstructions = [];
|
3459
|
+
additionalSigners = [];
|
3460
|
+
_a.label = 1;
|
3461
|
+
case 1:
|
3462
|
+
_a.trys.push([1, 3, , 4]);
|
3463
|
+
nftTradingAccount = web3_js_1.PublicKey.findProgramAddressSync([
|
3464
|
+
Buffer.from("trading"),
|
3465
|
+
nftMint.toBuffer(),
|
3466
|
+
], this.programId)[0];
|
3467
|
+
metadataAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("metadata"), constants_1.METAPLEX_PROGRAM_ID.toBuffer(), nftMint.toBuffer()], constants_1.METAPLEX_PROGRAM_ID)[0];
|
3468
|
+
return [4, this.program.methods
|
3469
|
+
.levelUp({})
|
3470
|
+
.accounts({
|
3471
|
+
owner: publicKey,
|
3472
|
+
perpetuals: this.perpetuals.publicKey,
|
3473
|
+
pool: poolConfig.poolAddress,
|
3474
|
+
metadataAccount: metadataAccount,
|
3475
|
+
metadataProgram: constants_1.METAPLEX_PROGRAM_ID,
|
3476
|
+
tradingAccount: nftTradingAccount,
|
3477
|
+
transferAuthority: this.authority.publicKey,
|
3478
|
+
})
|
3479
|
+
.instruction()];
|
3480
|
+
case 2:
|
3481
|
+
levelUpInstruction = _a.sent();
|
3482
|
+
instructions.push(levelUpInstruction);
|
3483
|
+
return [3, 4];
|
3484
|
+
case 3:
|
3485
|
+
err_8 = _a.sent();
|
3486
|
+
console.log("perpClient levelUp error:: ", err_8);
|
3487
|
+
throw err_8;
|
3488
|
+
case 4: return [2, {
|
3489
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3490
|
+
additionalSigners: additionalSigners
|
3491
|
+
}];
|
3492
|
+
}
|
3493
|
+
});
|
3494
|
+
}); };
|
3495
|
+
this.initStake = function (rewardSymbol, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3496
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, lpTokenMint, stakedLpTokenAccount, rewardCustodyConfig, initStakeInstruction, err_9;
|
3497
|
+
return __generator(this, function (_a) {
|
3498
|
+
switch (_a.label) {
|
3499
|
+
case 0:
|
3500
|
+
publicKey = this.provider.wallet.publicKey;
|
3501
|
+
preInstructions = [];
|
3502
|
+
instructions = [];
|
3503
|
+
postInstructions = [];
|
3504
|
+
additionalSigners = [];
|
3505
|
+
_a.label = 1;
|
3506
|
+
case 1:
|
3507
|
+
_a.trys.push([1, 3, , 4]);
|
3508
|
+
lpTokenMint = poolConfig.lpTokenMint;
|
3509
|
+
stakedLpTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("staked_lp_token_account"), poolConfig.poolAddress.toBuffer(), lpTokenMint.toBuffer()], this.programId)[0];
|
3510
|
+
rewardCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(rewardSymbol).mintKey); });
|
3511
|
+
return [4, this.program.methods
|
3512
|
+
.initStaking({})
|
3513
|
+
.accounts({
|
3514
|
+
admin: publicKey,
|
3515
|
+
multisig: this.multisig.publicKey,
|
3516
|
+
transferAuthority: poolConfig.transferAuthority,
|
3517
|
+
perpetuals: this.perpetuals.publicKey,
|
3518
|
+
pool: poolConfig.poolAddress,
|
3519
|
+
custody: rewardCustodyConfig.custodyAccount,
|
3520
|
+
lpTokenMint: lpTokenMint,
|
3521
|
+
stakedLpTokenAccount: stakedLpTokenAccount,
|
3522
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
3523
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3524
|
+
rent: web3_js_1.SYSVAR_RENT_PUBKEY
|
3525
|
+
})
|
3526
|
+
.instruction()];
|
3527
|
+
case 2:
|
3528
|
+
initStakeInstruction = _a.sent();
|
3529
|
+
instructions.push(initStakeInstruction);
|
3530
|
+
return [3, 4];
|
3531
|
+
case 3:
|
3532
|
+
err_9 = _a.sent();
|
3533
|
+
console.log("perpClient InitStaking error:: ", err_9);
|
3534
|
+
throw err_9;
|
3535
|
+
case 4: return [2, {
|
3536
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3537
|
+
additionalSigners: additionalSigners
|
3538
|
+
}];
|
3539
|
+
}
|
3540
|
+
});
|
3541
|
+
}); };
|
3542
|
+
this.depositStake = function (depositAmount, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3543
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, lpTokenMint, poolFlpTokenAccount, flpStakeAccount, userLpTokenAccount, depositStakeInstruction, err_10;
|
3544
|
+
return __generator(this, function (_a) {
|
3545
|
+
switch (_a.label) {
|
3546
|
+
case 0:
|
3547
|
+
publicKey = this.provider.wallet.publicKey;
|
3548
|
+
preInstructions = [];
|
3549
|
+
instructions = [];
|
3550
|
+
postInstructions = [];
|
3551
|
+
additionalSigners = [];
|
3552
|
+
_a.label = 1;
|
3553
|
+
case 1:
|
3554
|
+
_a.trys.push([1, 4, , 5]);
|
3555
|
+
lpTokenMint = poolConfig.lpTokenMint;
|
3556
|
+
poolFlpTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("staked_lp_token_account"), poolConfig.poolAddress.toBuffer(), lpTokenMint.toBuffer()], this.programId)[0];
|
3557
|
+
flpStakeAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("stake"), publicKey.toBuffer(), poolConfig.poolAddress.toBuffer()], this.programId)[0];
|
3558
|
+
return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.lpTokenMint, publicKey)];
|
3559
|
+
case 2:
|
3560
|
+
userLpTokenAccount = _a.sent();
|
3561
|
+
return [4, this.program.methods
|
3562
|
+
.depositStake({
|
3563
|
+
depositAmount: depositAmount
|
3564
|
+
})
|
3565
|
+
.accounts({
|
3566
|
+
owner: publicKey,
|
3567
|
+
feePayer: publicKey,
|
3568
|
+
fundingFlpTokenAccount: userLpTokenAccount,
|
3569
|
+
transferAuthority: poolConfig.transferAuthority,
|
3570
|
+
perpetuals: this.perpetuals.publicKey,
|
3571
|
+
pool: poolConfig.poolAddress,
|
3572
|
+
flpStakeAccount: flpStakeAccount,
|
3573
|
+
poolFlpTokenAccount: poolFlpTokenAccount,
|
3574
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
3575
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3576
|
+
eventAuthority: this.eventAuthority.publicKey,
|
3577
|
+
})
|
3578
|
+
.instruction()];
|
3579
|
+
case 3:
|
3580
|
+
depositStakeInstruction = _a.sent();
|
3581
|
+
instructions.push(depositStakeInstruction);
|
3582
|
+
return [3, 5];
|
3583
|
+
case 4:
|
3584
|
+
err_10 = _a.sent();
|
3585
|
+
console.log("perpClient depositStaking error:: ", err_10);
|
3586
|
+
throw err_10;
|
3587
|
+
case 5: return [2, {
|
3588
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3589
|
+
additionalSigners: additionalSigners
|
3590
|
+
}];
|
3591
|
+
}
|
3592
|
+
});
|
3593
|
+
}); };
|
3594
|
+
this.activeStake = function (rewardSymbol, poolName, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3595
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, rewardCustodyMint, rewardCustodyConfig, pool, feeDistributionTokenAccount, custodyAccountMetas, flpStakeAccountMetas, _i, _a, custody, activateStakeInstruction, err_11;
|
3596
|
+
return __generator(this, function (_b) {
|
3597
|
+
switch (_b.label) {
|
3598
|
+
case 0:
|
3599
|
+
publicKey = this.provider.wallet.publicKey;
|
3600
|
+
preInstructions = [];
|
3601
|
+
instructions = [];
|
3602
|
+
postInstructions = [];
|
3603
|
+
additionalSigners = [];
|
3604
|
+
_b.label = 1;
|
3605
|
+
case 1:
|
3606
|
+
_b.trys.push([1, 3, , 4]);
|
3607
|
+
rewardCustodyMint = poolConfig.getTokenFromSymbol(rewardSymbol).mintKey;
|
3608
|
+
rewardCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(rewardSymbol).mintKey); });
|
3609
|
+
pool = this.getPoolKey(poolName);
|
3610
|
+
feeDistributionTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("custody_token_account"), pool.toBuffer(), rewardCustodyMint.toBuffer()], this.programId)[0];
|
3611
|
+
custodyAccountMetas = [];
|
3612
|
+
flpStakeAccountMetas = [];
|
3613
|
+
for (_i = 0, _a = poolConfig.custodies; _i < _a.length; _i++) {
|
3614
|
+
custody = _a[_i];
|
3615
|
+
custodyAccountMetas.push({
|
3616
|
+
pubkey: custody.custodyAccount,
|
3617
|
+
isSigner: false,
|
3618
|
+
isWritable: false,
|
3619
|
+
});
|
3620
|
+
}
|
3621
|
+
return [4, this.program.methods
|
3622
|
+
.activateStake({})
|
3623
|
+
.accounts({
|
3624
|
+
perpetuals: this.perpetuals.publicKey,
|
3625
|
+
pool: pool,
|
3626
|
+
rewardCustody: rewardCustodyConfig.custodyAccount,
|
3627
|
+
feeDistributionTokenAccount: feeDistributionTokenAccount,
|
3628
|
+
})
|
3629
|
+
.remainingAccounts(__spreadArray(__spreadArray([], custodyAccountMetas, true), flpStakeAccountMetas, true))
|
3630
|
+
.instruction()];
|
3631
|
+
case 2:
|
3632
|
+
activateStakeInstruction = _b.sent();
|
3633
|
+
instructions.push(activateStakeInstruction);
|
3634
|
+
return [3, 4];
|
3635
|
+
case 3:
|
3636
|
+
err_11 = _b.sent();
|
3637
|
+
console.log("perpClient activateStaking error:: ", err_11);
|
3638
|
+
throw err_11;
|
3639
|
+
case 4: return [2, {
|
3640
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3641
|
+
additionalSigners: additionalSigners
|
3642
|
+
}];
|
3643
|
+
}
|
3644
|
+
});
|
3645
|
+
}); };
|
3646
|
+
this.unstakeRequest = function (unstakeAmount, poolName, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3647
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, lpTokenMint, pool, poolFlpTokenAccount, flpStakeAccount, userLpTokenAccount, unstakeRequestInstruction, err_12;
|
3648
|
+
return __generator(this, function (_a) {
|
3649
|
+
switch (_a.label) {
|
3650
|
+
case 0:
|
3651
|
+
publicKey = this.provider.wallet.publicKey;
|
3652
|
+
preInstructions = [];
|
3653
|
+
instructions = [];
|
3654
|
+
postInstructions = [];
|
3655
|
+
additionalSigners = [];
|
3656
|
+
_a.label = 1;
|
3657
|
+
case 1:
|
3658
|
+
_a.trys.push([1, 4, , 5]);
|
3659
|
+
lpTokenMint = poolConfig.lpTokenMint;
|
3660
|
+
pool = this.getPoolKey(poolName);
|
3661
|
+
poolFlpTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("staked_lp_token_account"), pool.toBuffer(), lpTokenMint.toBuffer()], this.programId)[0];
|
3662
|
+
flpStakeAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("stake"), publicKey.toBuffer(), pool.toBuffer()], this.programId)[0];
|
3663
|
+
return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.lpTokenMint, publicKey)];
|
3664
|
+
case 2:
|
3665
|
+
userLpTokenAccount = _a.sent();
|
3666
|
+
return [4, this.program.methods
|
3667
|
+
.unstakeRequest({
|
3668
|
+
unstakeAmount: unstakeAmount
|
3669
|
+
})
|
3670
|
+
.accounts({
|
3671
|
+
owner: publicKey,
|
3672
|
+
fundingFlpTokenAccount: userLpTokenAccount,
|
3673
|
+
transferAuthority: poolConfig.transferAuthority,
|
3674
|
+
perpetuals: this.perpetuals.publicKey,
|
3675
|
+
pool: pool,
|
3676
|
+
flpStakeAccount: flpStakeAccount,
|
3677
|
+
poolFlpTokenAccount: poolFlpTokenAccount,
|
3678
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
3679
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3680
|
+
eventAuthority: this.eventAuthority.publicKey,
|
3681
|
+
})
|
3682
|
+
.instruction()];
|
3683
|
+
case 3:
|
3684
|
+
unstakeRequestInstruction = _a.sent();
|
3685
|
+
instructions.push(unstakeRequestInstruction);
|
3686
|
+
return [3, 5];
|
3687
|
+
case 4:
|
3688
|
+
err_12 = _a.sent();
|
3689
|
+
console.log("perpClient unstakeRequest error:: ", err_12);
|
3690
|
+
throw err_12;
|
3691
|
+
case 5: return [2, {
|
3692
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3693
|
+
additionalSigners: additionalSigners
|
3694
|
+
}];
|
3695
|
+
}
|
3696
|
+
});
|
3697
|
+
}); };
|
3698
|
+
this.deactiveStake = function (rewardSymbol, poolName, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3699
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, rewardCustodyMint, rewardCustodyConfig, pool, feeDistributionTokenAccount, custodyAccountMetas, flpStakeAccountMetas, _i, _a, custody, deactivateStakeInstruction, err_13;
|
3700
|
+
return __generator(this, function (_b) {
|
3701
|
+
switch (_b.label) {
|
3702
|
+
case 0:
|
3703
|
+
publicKey = this.provider.wallet.publicKey;
|
3704
|
+
preInstructions = [];
|
3705
|
+
instructions = [];
|
3706
|
+
postInstructions = [];
|
3707
|
+
additionalSigners = [];
|
3708
|
+
_b.label = 1;
|
3709
|
+
case 1:
|
3710
|
+
_b.trys.push([1, 3, , 4]);
|
3711
|
+
rewardCustodyMint = poolConfig.getTokenFromSymbol(rewardSymbol).mintKey;
|
3712
|
+
rewardCustodyConfig = poolConfig.custodies.find(function (i) { return i.mintKey.equals(poolConfig.getTokenFromSymbol(rewardSymbol).mintKey); });
|
3713
|
+
pool = this.getPoolKey(poolName);
|
3714
|
+
feeDistributionTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("custody_token_account"), pool.toBuffer(), rewardCustodyMint.toBuffer()], this.programId)[0];
|
3715
|
+
custodyAccountMetas = [];
|
3716
|
+
flpStakeAccountMetas = [];
|
3717
|
+
for (_i = 0, _a = poolConfig.custodies; _i < _a.length; _i++) {
|
3718
|
+
custody = _a[_i];
|
3719
|
+
custodyAccountMetas.push({
|
3720
|
+
pubkey: custody.custodyAccount,
|
3721
|
+
isSigner: false,
|
3722
|
+
isWritable: false,
|
3723
|
+
});
|
3724
|
+
}
|
3725
|
+
return [4, this.program.methods
|
3726
|
+
.deactivateStake({})
|
3727
|
+
.accounts({
|
3728
|
+
perpetuals: this.perpetuals.publicKey,
|
3729
|
+
pool: pool,
|
3730
|
+
rewardCustody: rewardCustodyConfig.custodyAccount,
|
3731
|
+
feeDistributionTokenAccount: feeDistributionTokenAccount,
|
3732
|
+
})
|
3733
|
+
.remainingAccounts(__spreadArray(__spreadArray([], custodyAccountMetas, true), flpStakeAccountMetas, true))
|
3734
|
+
.instruction()];
|
3735
|
+
case 2:
|
3736
|
+
deactivateStakeInstruction = _b.sent();
|
3737
|
+
instructions.push(deactivateStakeInstruction);
|
3738
|
+
return [3, 4];
|
3739
|
+
case 3:
|
3740
|
+
err_13 = _b.sent();
|
3741
|
+
console.log("perpClient deactivateStaking error:: ", err_13);
|
3742
|
+
throw err_13;
|
3743
|
+
case 4: return [2, {
|
3744
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3745
|
+
additionalSigners: additionalSigners
|
3746
|
+
}];
|
3747
|
+
}
|
3748
|
+
});
|
3749
|
+
}); };
|
3750
|
+
this.withdrawStake = function (withdrawAmount, poolName, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3751
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, lpTokenMint, pool, poolFlpTokenAccount, flpStakeAccount, userLpTokenAccount, withdrawStakeInstruction, err_14;
|
3752
|
+
return __generator(this, function (_a) {
|
3753
|
+
switch (_a.label) {
|
3754
|
+
case 0:
|
3755
|
+
publicKey = this.provider.wallet.publicKey;
|
3756
|
+
preInstructions = [];
|
3757
|
+
instructions = [];
|
3758
|
+
postInstructions = [];
|
3759
|
+
additionalSigners = [];
|
3760
|
+
_a.label = 1;
|
3761
|
+
case 1:
|
3762
|
+
_a.trys.push([1, 4, , 5]);
|
3763
|
+
lpTokenMint = poolConfig.lpTokenMint;
|
3764
|
+
pool = this.getPoolKey(poolName);
|
3765
|
+
poolFlpTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("staked_lp_token_account"), pool.toBuffer(), lpTokenMint.toBuffer()], constants_1.METAPLEX_PROGRAM_ID)[0];
|
3766
|
+
flpStakeAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("stake"), publicKey.toBuffer(), pool.toBuffer()], constants_1.METAPLEX_PROGRAM_ID)[0];
|
3767
|
+
return [4, (0, spl_token_1.getAssociatedTokenAddress)(poolConfig.lpTokenMint, publicKey)];
|
3768
|
+
case 2:
|
3769
|
+
userLpTokenAccount = _a.sent();
|
3770
|
+
return [4, this.program.methods
|
3771
|
+
.withdrawStake({
|
3772
|
+
withdrawAmount: withdrawAmount
|
3773
|
+
})
|
3774
|
+
.accounts({
|
3775
|
+
owner: publicKey,
|
3776
|
+
receivingFlpTokenAccount: userLpTokenAccount,
|
3777
|
+
transferAuthority: poolConfig.transferAuthority,
|
3778
|
+
perpetuals: this.perpetuals.publicKey,
|
3779
|
+
pool: pool,
|
3780
|
+
flpStakeAccount: flpStakeAccount,
|
3781
|
+
poolFlpTokenAccount: poolFlpTokenAccount,
|
3782
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
3783
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
3784
|
+
eventAuthority: this.eventAuthority.publicKey,
|
3785
|
+
})
|
3786
|
+
.instruction()];
|
3787
|
+
case 3:
|
3788
|
+
withdrawStakeInstruction = _a.sent();
|
3789
|
+
instructions.push(withdrawStakeInstruction);
|
3790
|
+
return [3, 5];
|
3791
|
+
case 4:
|
3792
|
+
err_14 = _a.sent();
|
3793
|
+
console.log("perpClient withdrawStake error:: ", err_14);
|
3794
|
+
throw err_14;
|
3795
|
+
case 5: return [2, {
|
3796
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3797
|
+
additionalSigners: additionalSigners
|
3798
|
+
}];
|
3799
|
+
}
|
3800
|
+
});
|
3801
|
+
}); };
|
3802
|
+
this.setPoolConfig = function (permissions, oracleAuthority, maxAumUsd, stakingFeeShareBps, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
|
3803
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, setPoolConfigInstruction, err_15;
|
3804
|
+
return __generator(this, function (_a) {
|
3805
|
+
switch (_a.label) {
|
3806
|
+
case 0:
|
3807
|
+
publicKey = this.provider.wallet.publicKey;
|
3808
|
+
preInstructions = [];
|
3809
|
+
instructions = [];
|
3810
|
+
postInstructions = [];
|
3811
|
+
additionalSigners = [];
|
3812
|
+
_a.label = 1;
|
3813
|
+
case 1:
|
3814
|
+
_a.trys.push([1, 3, , 4]);
|
3815
|
+
return [4, this.program.methods
|
3816
|
+
.setPoolConfig({
|
3817
|
+
permissions: permissions,
|
3818
|
+
oracleAuthority: oracleAuthority,
|
3819
|
+
maxAumUsd: maxAumUsd,
|
3820
|
+
stakingFeeShareBps: stakingFeeShareBps
|
3821
|
+
})
|
3822
|
+
.accounts({
|
3823
|
+
admin: publicKey,
|
3824
|
+
multisig: this.multisig.publicKey,
|
3825
|
+
pool: poolConfig.poolAddress
|
3826
|
+
})
|
3827
|
+
.instruction()];
|
3828
|
+
case 2:
|
3829
|
+
setPoolConfigInstruction = _a.sent();
|
3830
|
+
instructions.push(setPoolConfigInstruction);
|
3831
|
+
return [3, 4];
|
3832
|
+
case 3:
|
3833
|
+
err_15 = _a.sent();
|
3834
|
+
console.log("perpClient setPool error:: ", err_15);
|
3835
|
+
throw err_15;
|
3836
|
+
case 4: return [2, {
|
3837
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3838
|
+
additionalSigners: additionalSigners
|
3839
|
+
}];
|
3840
|
+
}
|
3841
|
+
});
|
3842
|
+
}); };
|
3843
|
+
this.setPermissions = function (permissions) { return __awaiter(_this, void 0, void 0, function () {
|
3844
|
+
var publicKey, preInstructions, instructions, postInstructions, additionalSigners, setPermissionsInstruction, err_16;
|
3845
|
+
return __generator(this, function (_a) {
|
3846
|
+
switch (_a.label) {
|
3847
|
+
case 0:
|
3848
|
+
publicKey = this.provider.wallet.publicKey;
|
3849
|
+
preInstructions = [];
|
3850
|
+
instructions = [];
|
3851
|
+
postInstructions = [];
|
3852
|
+
additionalSigners = [];
|
3853
|
+
_a.label = 1;
|
3854
|
+
case 1:
|
3855
|
+
_a.trys.push([1, 3, , 4]);
|
3856
|
+
return [4, this.program.methods
|
3857
|
+
.setPermissions({
|
3858
|
+
permissions: permissions,
|
3859
|
+
})
|
3860
|
+
.accounts({
|
3861
|
+
admin: publicKey,
|
3862
|
+
multisig: this.multisig.publicKey,
|
3863
|
+
perpetuals: this.perpetuals.publicKey
|
3864
|
+
})
|
3865
|
+
.instruction()];
|
3866
|
+
case 2:
|
3867
|
+
setPermissionsInstruction = _a.sent();
|
3868
|
+
instructions.push(setPermissionsInstruction);
|
3869
|
+
return [3, 4];
|
3870
|
+
case 3:
|
3871
|
+
err_16 = _a.sent();
|
3872
|
+
console.log("perpClient setPool error:: ", err_16);
|
3873
|
+
throw err_16;
|
3874
|
+
case 4: return [2, {
|
3875
|
+
instructions: __spreadArray(__spreadArray(__spreadArray([], preInstructions, true), instructions, true), postInstructions, true),
|
3876
|
+
additionalSigners: additionalSigners
|
3877
|
+
}];
|
3878
|
+
}
|
3879
|
+
});
|
3880
|
+
}); };
|
3343
3881
|
this.provider = provider;
|
3344
3882
|
(0, anchor_1.setProvider)(provider);
|
3345
3883
|
this.program = new anchor_1.Program(perpetuals_1.IDL, programId);
|
@@ -3358,6 +3896,19 @@ var PerpetualsClient = (function () {
|
|
3358
3896
|
return this.toString(10);
|
3359
3897
|
};
|
3360
3898
|
}
|
3899
|
+
PerpetualsClient.prototype.getMarketPk = function (targetCustody, collateralCustody, side) {
|
3900
|
+
return this.findProgramAddress("market", [
|
3901
|
+
targetCustody,
|
3902
|
+
collateralCustody,
|
3903
|
+
side === 'long' ? [1] : [2],
|
3904
|
+
]).publicKey;
|
3905
|
+
};
|
3906
|
+
PerpetualsClient.prototype.getPositionKey = function (owner, targetCustody, collateralCustody, side) {
|
3907
|
+
return this.findProgramAddress("position", [
|
3908
|
+
owner,
|
3909
|
+
this.getMarketPk(targetCustody, collateralCustody, side),
|
3910
|
+
]).publicKey;
|
3911
|
+
};
|
3361
3912
|
PerpetualsClient.prototype.getNewRatioHelper = function (amountAdd, amountRemove, custodyAccount, maxPrice, poolAumUsdMax) {
|
3362
3913
|
var newRatio = constants_1.BN_ZERO;
|
3363
3914
|
var maxPriceOracle = OraclePrice_1.OraclePrice.from({ price: new anchor_1.BN(maxPrice), exponent: new anchor_1.BN(-8), confidence: constants_1.BN_ZERO, timestamp: constants_1.BN_ZERO });
|
@@ -3383,37 +3934,71 @@ var PerpetualsClient = (function () {
|
|
3383
3934
|
}
|
3384
3935
|
return newRatio;
|
3385
3936
|
};
|
3386
|
-
PerpetualsClient.prototype.
|
3937
|
+
PerpetualsClient.prototype.getPriceAfterSlippageOld = function (isEntry, slippageBps, targetPrice, targetEmaPrice, side, custody) {
|
3938
|
+
if (isEntry) {
|
3939
|
+
var current_price_usd = this.getEntryPriceUsdSync(side, targetPrice, targetEmaPrice, custody);
|
3940
|
+
var spread_i = (0, utils_1.checkedDecimalCeilMul)(current_price_usd, new anchor_1.BN(-1 * constants_1.USD_DECIMALS), slippageBps, new anchor_1.BN(-1 * constants_1.BPS_DECIMALS), new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
3941
|
+
if ((0, types_1.isVariant)(side, 'long')) {
|
3942
|
+
return { price: current_price_usd.add(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3943
|
+
}
|
3944
|
+
else {
|
3945
|
+
if (spread_i.lt(current_price_usd)) {
|
3946
|
+
return { price: current_price_usd.sub(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3947
|
+
}
|
3948
|
+
else {
|
3949
|
+
return { price: constants_1.BN_ZERO, exponent: targetPrice.exponent.toNumber() };
|
3950
|
+
}
|
3951
|
+
;
|
3952
|
+
}
|
3953
|
+
}
|
3954
|
+
else {
|
3955
|
+
var current_price = this.getExitPriceSync(side, targetPrice, targetEmaPrice, custody);
|
3956
|
+
var spread_i = (0, utils_1.checkedDecimalCeilMul)(current_price, new anchor_1.BN(-1 * constants_1.USD_DECIMALS), slippageBps, new anchor_1.BN(-1 * constants_1.BPS_DECIMALS), new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
3957
|
+
if ((0, types_1.isVariant)(side, 'long')) {
|
3958
|
+
if (spread_i.lt(current_price)) {
|
3959
|
+
return { price: current_price.sub(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3960
|
+
}
|
3961
|
+
else {
|
3962
|
+
return { price: constants_1.BN_ZERO, exponent: targetPrice.exponent.toNumber() };
|
3963
|
+
}
|
3964
|
+
;
|
3965
|
+
}
|
3966
|
+
else {
|
3967
|
+
return { price: current_price.add(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3968
|
+
}
|
3969
|
+
}
|
3970
|
+
};
|
3971
|
+
PerpetualsClient.prototype.getPriceAfterSlippage = function (isEntry, slippageBps, targetPrice, side) {
|
3387
3972
|
if (isEntry) {
|
3388
|
-
var current_price =
|
3389
|
-
var spread_i = (0, utils_1.checkedDecimalCeilMul)(current_price, new anchor_1.BN(-1 * constants_1.
|
3973
|
+
var current_price = targetPrice.price;
|
3974
|
+
var spread_i = (0, utils_1.checkedDecimalCeilMul)(current_price, new anchor_1.BN(-1 * constants_1.USD_DECIMALS), slippageBps, new anchor_1.BN(-1 * constants_1.BPS_DECIMALS), new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
3390
3975
|
if ((0, types_1.isVariant)(side, 'long')) {
|
3391
|
-
return current_price.add(spread_i);
|
3976
|
+
return { price: current_price.add(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3392
3977
|
}
|
3393
3978
|
else {
|
3394
3979
|
if (spread_i.lt(current_price)) {
|
3395
|
-
return current_price.sub(spread_i);
|
3980
|
+
return { price: current_price.sub(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3396
3981
|
}
|
3397
3982
|
else {
|
3398
|
-
return constants_1.BN_ZERO;
|
3983
|
+
return { price: constants_1.BN_ZERO, exponent: targetPrice.exponent.toNumber() };
|
3399
3984
|
}
|
3400
3985
|
;
|
3401
3986
|
}
|
3402
3987
|
}
|
3403
3988
|
else {
|
3404
|
-
var current_price =
|
3405
|
-
var spread_i = (0, utils_1.checkedDecimalCeilMul)(current_price, new anchor_1.BN(-1 * constants_1.
|
3989
|
+
var current_price = targetPrice.price;
|
3990
|
+
var spread_i = (0, utils_1.checkedDecimalCeilMul)(current_price, new anchor_1.BN(-1 * constants_1.USD_DECIMALS), slippageBps, new anchor_1.BN(-1 * constants_1.BPS_DECIMALS), new anchor_1.BN(-1 * constants_1.USD_DECIMALS));
|
3406
3991
|
if ((0, types_1.isVariant)(side, 'long')) {
|
3407
3992
|
if (spread_i.lt(current_price)) {
|
3408
|
-
return current_price.sub(spread_i);
|
3993
|
+
return { price: current_price.sub(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3409
3994
|
}
|
3410
3995
|
else {
|
3411
|
-
return constants_1.BN_ZERO;
|
3996
|
+
return { price: constants_1.BN_ZERO, exponent: targetPrice.exponent.toNumber() };
|
3412
3997
|
}
|
3413
3998
|
;
|
3414
3999
|
}
|
3415
4000
|
else {
|
3416
|
-
return current_price.add(spread_i);
|
4001
|
+
return { price: current_price.add(spread_i), exponent: targetPrice.exponent.toNumber() };
|
3417
4002
|
}
|
3418
4003
|
}
|
3419
4004
|
};
|