@haven-fi/solauto-sdk 1.0.13 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clients/solautoClient.d.ts +4 -4
- package/dist/clients/solautoClient.d.ts.map +1 -1
- package/dist/clients/solautoClient.js +22 -21
- package/dist/clients/solautoMarginfiClient.js +9 -9
- package/dist/constants/tokenConstants.d.ts +4 -0
- package/dist/constants/tokenConstants.d.ts.map +1 -1
- package/dist/constants/tokenConstants.js +5 -1
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +10 -10
- package/dist/utils/deleteme.js +1 -1
- package/dist/utils/generalUtils.js +1 -1
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +2 -3
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +3 -3
- package/dist/utils/numberUtils.d.ts +3 -0
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/numberUtils.js +14 -1
- package/dist/utils/solanaUtils.js +1 -1
- package/dist/utils/solauto/generalUtils.d.ts +0 -3
- package/dist/utils/solauto/generalUtils.d.ts.map +1 -1
- package/dist/utils/solauto/generalUtils.js +2 -15
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +11 -10
- package/package.json +1 -1
- package/src/clients/solautoClient.ts +27 -28
- package/src/clients/solautoMarginfiClient.ts +10 -10
- package/src/constants/tokenConstants.ts +6 -1
- package/src/transactions/transactionUtils.ts +10 -11
- package/src/utils/deleteme.ts +2 -2
- package/src/utils/generalUtils.ts +1 -1
- package/src/utils/jupiterUtils.ts +10 -8
- package/src/utils/marginfiUtils.ts +4 -5
- package/src/utils/numberUtils.ts +23 -0
- package/src/utils/solanaUtils.ts +1 -1
- package/src/utils/solauto/generalUtils.ts +1 -25
- package/src/utils/solauto/rebalanceUtils.ts +13 -12
- package/tests/unit/rebalanceCalculations.ts +6 -4
@@ -11,8 +11,8 @@ export interface SolautoClientArgs {
|
|
11
11
|
positionId: number;
|
12
12
|
signer?: Signer;
|
13
13
|
wallet?: WalletAdapter;
|
14
|
-
|
15
|
-
|
14
|
+
supplyMint?: PublicKey;
|
15
|
+
debtMint?: PublicKey;
|
16
16
|
referralFeesDestMint?: PublicKey;
|
17
17
|
referredByAuthority?: PublicKey;
|
18
18
|
}
|
@@ -29,10 +29,10 @@ export declare abstract class SolautoClient {
|
|
29
29
|
solautoPosition: PublicKey;
|
30
30
|
solautoPositionData: SolautoPosition | null;
|
31
31
|
solautoPositionState: PositionState | undefined;
|
32
|
-
|
32
|
+
supplyMint: PublicKey;
|
33
33
|
positionSupplyLiquidityTa: PublicKey;
|
34
34
|
signerSupplyLiquidityTa: PublicKey;
|
35
|
-
|
35
|
+
debtMint: PublicKey;
|
36
36
|
positionDebtLiquidityTa: PublicKey;
|
37
37
|
signerDebtLiquidityTa: PublicKey;
|
38
38
|
authorityReferralState: PublicKey;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAEL,UAAU,EACV,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAQJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,aAAa,EAEd,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,sBAAsB,EASvB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAInE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,
|
1
|
+
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAEL,UAAU,EACV,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAQJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,aAAa,EAEd,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,sBAAsB,EASvB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAInE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,8BAAsB,aAAa;IAwC/B,OAAO,CAAC,YAAY;IACb,SAAS,CAAC;IAxCZ,GAAG,EAAG,GAAG,CAAC;IACV,UAAU,EAAG,UAAU,CAAC;IACxB,eAAe,EAAG,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IACtB,MAAM,EAAG,MAAM,CAAC;IAEhB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,UAAU,EAAG,SAAS,CAAC;IACvB,yBAAyB,EAAG,SAAS,CAAC;IACtC,uBAAuB,EAAG,SAAS,CAAC;IAEpC,QAAQ,EAAG,SAAS,CAAC;IACrB,uBAAuB,EAAG,SAAS,CAAC;IACpC,qBAAqB,EAAG,SAAS,CAAC;IAElC,sBAAsB,EAAG,SAAS,CAAC;IACnC,0BAA0B,EAAG,aAAa,GAAG,IAAI,CAAC;IAClD,6BAA6B,EAAG,SAAS,CAAC;IAC1C,uBAAuB,EAAG,SAAS,CAAC;IAEpC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAE/B,iBAAiB,EAAG,SAAS,CAAC;IAC9B,mBAAmB,EAAG,SAAS,CAAC;IAEhC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,mBAAmB,EAAG,SAAS,EAAE,CAAC;IAElC,mBAAmB,EAAE,mBAAmB,CAA6B;gBAGlE,YAAY,EAAE,MAAM,EACrB,SAAS,CAAC,qBAAS;IAatB,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe;IAsH1E,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMnB,wBAAwB;IAoB9B,mBAAmB,IAAI,MAAM,EAAE;IAK/B,gBAAgB,IAAI,SAAS,EAAE;IAiBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAChC;QAAE,WAAW,EAAE,kBAAkB,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAC5E;IAwDD,uBAAuB,IAAI,yBAAyB,GAAG,SAAS;IAOhE,wBAAwB,IAAI,WAAW,GAAG,SAAS;IAOnD,sBAAsB,IAAI,kBAAkB;IAiB5C,mBAAmB,IAAI,kBAAkB;IAmBzC,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAuBrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IA2DlE,eAAe,IAAI,kBAAkB;IAWrC,WAAW,IAAI,kBAAkB;IA4BjC,QAAQ,CAAC,OAAO,IAAI,kBAAkB;IAEtC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAuFhE,QAAQ,CAAC,WAAW,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IAErB,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAE3E,QAAQ,CAAC,SAAS,CAChB,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IAEf,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAYlE"}
|
@@ -43,16 +43,16 @@ class SolautoClient {
|
|
43
43
|
this.solautoPosition = await (0, accountUtils_1.getSolautoPositionAccount)(this.authority, this.positionId);
|
44
44
|
this.solautoPositionData = await (0, generated_1.safeFetchSolautoPosition)(this.umi, (0, umi_1.publicKey)(this.solautoPosition));
|
45
45
|
this.solautoPositionState = this.solautoPositionData?.state;
|
46
|
-
this.
|
47
|
-
args.
|
46
|
+
this.supplyMint =
|
47
|
+
args.supplyMint ??
|
48
48
|
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.position.supplyMint);
|
49
|
-
this.positionSupplyLiquidityTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.
|
50
|
-
this.signerSupplyLiquidityTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.
|
51
|
-
this.
|
52
|
-
args.
|
49
|
+
this.positionSupplyLiquidityTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.supplyMint);
|
50
|
+
this.signerSupplyLiquidityTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.supplyMint);
|
51
|
+
this.debtMint =
|
52
|
+
args.debtMint ??
|
53
53
|
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.position.debtMint);
|
54
|
-
this.positionDebtLiquidityTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.
|
55
|
-
this.signerDebtLiquidityTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.
|
54
|
+
this.positionDebtLiquidityTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.debtMint);
|
55
|
+
this.signerDebtLiquidityTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.debtMint);
|
56
56
|
this.authorityReferralState = await (0, accountUtils_1.getReferralState)(this.authority);
|
57
57
|
this.authorityReferralStateData = await (0, generated_1.safeFetchReferralState)(this.umi, (0, umi_1.publicKey)(this.authorityReferralState));
|
58
58
|
this.authorityReferralFeesDestMint = args.referralFeesDestMint
|
@@ -61,24 +61,25 @@ class SolautoClient {
|
|
61
61
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.authorityReferralStateData?.destFeesMint)
|
62
62
|
: spl_token_1.NATIVE_MINT;
|
63
63
|
this.authorityReferralDestTa = (0, accountUtils_1.getTokenAccount)(this.authorityReferralState, this.authorityReferralFeesDestMint);
|
64
|
-
const
|
64
|
+
const hasReferredBy = this.authorityReferralStateData &&
|
65
|
+
this.authorityReferralStateData.referredByState !==
|
66
|
+
(0, umi_1.publicKey)(web3_js_1.PublicKey.default);
|
67
|
+
const referredByAuthority = !hasReferredBy &&
|
68
|
+
args.referredByAuthority &&
|
65
69
|
!args.referredByAuthority.equals((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey))
|
66
70
|
? args.referredByAuthority
|
67
71
|
: undefined;
|
68
|
-
this.referredByState =
|
69
|
-
this.authorityReferralStateData
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
: referredByAuthority
|
74
|
-
? await (0, accountUtils_1.getReferralState)(referredByAuthority)
|
75
|
-
: undefined;
|
72
|
+
this.referredByState = hasReferredBy
|
73
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.authorityReferralStateData.referredByState)
|
74
|
+
: referredByAuthority
|
75
|
+
? await (0, accountUtils_1.getReferralState)(referredByAuthority)
|
76
|
+
: undefined;
|
76
77
|
this.referredByAuthority = referredByAuthority;
|
77
78
|
if (this.referredByState !== undefined) {
|
78
|
-
this.referredBySupplyTa = (0, accountUtils_1.getTokenAccount)(this.referredByState, this.
|
79
|
+
this.referredBySupplyTa = (0, accountUtils_1.getTokenAccount)(this.referredByState, this.supplyMint);
|
79
80
|
}
|
80
81
|
this.solautoFeesWallet = generalAccounts_1.SOLAUTO_FEES_WALLET;
|
81
|
-
this.solautoFeesSupplyTa = (0, accountUtils_1.getTokenAccount)(this.solautoFeesWallet, this.
|
82
|
+
this.solautoFeesSupplyTa = (0, accountUtils_1.getTokenAccount)(this.solautoFeesWallet, this.supplyMint);
|
82
83
|
this.authorityLutAddress = this.authorityReferralStateData?.lookupTable
|
83
84
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.authorityReferralStateData?.lookupTable)
|
84
85
|
: undefined;
|
@@ -241,7 +242,7 @@ class SolautoClient {
|
|
241
242
|
let positionDebtTa = undefined;
|
242
243
|
let signerDebtTa = undefined;
|
243
244
|
if ((0, umi_1.isOption)(args.dca) && (0, umi_1.isSome)(args.dca)) {
|
244
|
-
debtMint = (0, umi_1.publicKey)(this.
|
245
|
+
debtMint = (0, umi_1.publicKey)(this.debtMint);
|
245
246
|
positionDebtTa = (0, umi_1.publicKey)(this.positionDebtLiquidityTa);
|
246
247
|
signerDebtTa = (0, umi_1.publicKey)(this.signerDebtLiquidityTa);
|
247
248
|
let addingToPos = false;
|
@@ -301,7 +302,7 @@ class SolautoClient {
|
|
301
302
|
if (this.solautoPositionData !== null && !this.selfManaged) {
|
302
303
|
const positionData = this.solautoPositionData.position;
|
303
304
|
if (positionData.dca.debtToAddBaseUnit) {
|
304
|
-
debtMint = (0, umi_1.publicKey)(this.
|
305
|
+
debtMint = (0, umi_1.publicKey)(this.debtMint);
|
305
306
|
positionDebtTa = (0, umi_1.publicKey)(this.positionDebtLiquidityTa);
|
306
307
|
signerDebtTa = (0, umi_1.publicKey)(this.signerDebtLiquidityTa);
|
307
308
|
this.livePositionUpdates.new({
|
@@ -18,8 +18,8 @@ function newMarginfiSolautoManagedPositionArgs(positionId, signer, wallet, suppl
|
|
18
18
|
signer,
|
19
19
|
wallet,
|
20
20
|
marginfiAccountSeedIdx: positionId > 0 ? (0, generalUtils_1.generateRandomU64)() : undefined,
|
21
|
-
|
22
|
-
|
21
|
+
supplyMint: supplyMint,
|
22
|
+
debtMint: debtMint,
|
23
23
|
referredByAuthority,
|
24
24
|
};
|
25
25
|
}
|
@@ -45,10 +45,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
45
45
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(marginfiAccountData.group)
|
46
46
|
: args.marginfiGroup ?? new web3_js_1.PublicKey(marginfiAccounts_1.DEFAULT_MARGINFI_GROUP);
|
47
47
|
this.marginfiSupplyBankAccounts = (0, marginfiUtils_1.findMarginfiBankAccounts)({
|
48
|
-
mint: this.
|
48
|
+
mint: this.supplyMint.toString(),
|
49
49
|
});
|
50
50
|
this.marginfiDebtBankAccounts = (0, marginfiUtils_1.findMarginfiBankAccounts)({
|
51
|
-
mint: this.
|
51
|
+
mint: this.debtMint.toString(),
|
52
52
|
});
|
53
53
|
const existingMarginfiAccounts = await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(this.umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), false);
|
54
54
|
const emptyMarginfiAccounts = (await (0, marginfi_sdk_1.safeFetchAllMarginfiAccount)(this.umi, existingMarginfiAccounts.map((x) => (0, umi_1.publicKey)(x)))).filter((x) => x.lendingAccount.balances.find((y) => y.bankPk.toString() !== web3_js_1.PublicKey.default.toString() &&
|
@@ -102,10 +102,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
102
102
|
marginfiAccount: this.marginfiAccountSeedIdx !== undefined
|
103
103
|
? (0, umi_1.publicKey)(this.marginfiAccount)
|
104
104
|
: this.marginfiAccount,
|
105
|
-
supplyMint: (0, umi_1.publicKey)(this.
|
105
|
+
supplyMint: (0, umi_1.publicKey)(this.supplyMint),
|
106
106
|
supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyBankAccounts.bank),
|
107
107
|
positionSupplyTa: (0, umi_1.publicKey)(this.positionSupplyLiquidityTa),
|
108
|
-
debtMint: (0, umi_1.publicKey)(this.
|
108
|
+
debtMint: (0, umi_1.publicKey)(this.debtMint),
|
109
109
|
debtBank: (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.bank),
|
110
110
|
positionDebtTa: (0, umi_1.publicKey)(this.positionDebtLiquidityTa),
|
111
111
|
signerDebtTa: signerDebtLiquidityTa,
|
@@ -213,7 +213,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
213
213
|
});
|
214
214
|
}
|
215
215
|
flashBorrow(flashLoanDetails, destinationTokenAccount) {
|
216
|
-
const bank = flashLoanDetails.mint.equals(this.
|
216
|
+
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
217
217
|
? this.marginfiSupplyBankAccounts
|
218
218
|
: this.marginfiDebtBankAccounts;
|
219
219
|
return (0, umi_1.transactionBuilder)()
|
@@ -235,7 +235,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
235
235
|
}));
|
236
236
|
}
|
237
237
|
flashRepay(flashLoanDetails) {
|
238
|
-
const bank = flashLoanDetails.mint.equals(this.
|
238
|
+
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
239
239
|
? this.marginfiSupplyBankAccounts
|
240
240
|
: this.marginfiDebtBankAccounts;
|
241
241
|
const remainingAccounts = [];
|
@@ -305,7 +305,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
305
305
|
if (state) {
|
306
306
|
return state;
|
307
307
|
}
|
308
|
-
const freshState = await (0, marginfiUtils_1.getMarginfiAccountPositionState)(this.umi, this.marginfiAccountPk, this.
|
308
|
+
const freshState = await (0, marginfiUtils_1.getMarginfiAccountPositionState)(this.umi, this.marginfiAccountPk, this.supplyMint, this.debtMint, this.livePositionUpdates);
|
309
309
|
this.log(freshState);
|
310
310
|
return freshState;
|
311
311
|
}
|
@@ -1,3 +1,7 @@
|
|
1
1
|
export declare const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
2
2
|
export declare const ALL_SUPPORTED_TOKENS: string[];
|
3
|
+
export declare const TOKEN_DECIMALS: {
|
4
|
+
[x: string]: number;
|
5
|
+
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: number;
|
6
|
+
};
|
3
7
|
//# sourceMappingURL=tokenConstants.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,iDAAiD,CAAC;AAGxE,eAAO,MAAM,oBAAoB,UAGhC,CAAC"}
|
1
|
+
{"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,iDAAiD,CAAC;AAGxE,eAAO,MAAM,oBAAoB,UAGhC,CAAC;AAEF,eAAO,MAAM,cAAc;;;CAG1B,CAAC"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.ALL_SUPPORTED_TOKENS = exports.USDC_MINT = void 0;
|
3
|
+
exports.TOKEN_DECIMALS = exports.ALL_SUPPORTED_TOKENS = exports.USDC_MINT = void 0;
|
4
4
|
const spl_token_1 = require("@solana/spl-token");
|
5
5
|
exports.USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
6
6
|
// When adding token ensure a price feed is provided in pythConstants.ts
|
@@ -8,3 +8,7 @@ exports.ALL_SUPPORTED_TOKENS = [
|
|
8
8
|
spl_token_1.NATIVE_MINT.toString(),
|
9
9
|
exports.USDC_MINT,
|
10
10
|
];
|
11
|
+
exports.TOKEN_DECIMALS = {
|
12
|
+
[spl_token_1.NATIVE_MINT.toString()]: 9,
|
13
|
+
[exports.USDC_MINT]: 6
|
14
|
+
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,aAAa,EAQd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,aAAa,EAQd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAgLzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAsE7B;AA0DD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CA2GA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CA8BzC"}
|
@@ -14,8 +14,8 @@ const numberUtils_1 = require("../utils/numberUtils");
|
|
14
14
|
const generalUtils_2 = require("../utils/solauto/generalUtils");
|
15
15
|
const accountUtils_1 = require("../utils/accountUtils");
|
16
16
|
function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn) {
|
17
|
-
const supplyIsWsol = client.
|
18
|
-
const debtIsWsol = client.
|
17
|
+
const supplyIsWsol = client.supplyMint.equals(spl_token_1.NATIVE_MINT);
|
18
|
+
const debtIsWsol = client.debtMint.equals(spl_token_1.NATIVE_MINT);
|
19
19
|
if (!supplyIsWsol && !debtIsWsol) {
|
20
20
|
return undefined;
|
21
21
|
}
|
@@ -70,7 +70,7 @@ async function transactionChoresBefore(client, solautoActions, initiatingDcaIn)
|
|
70
70
|
amountToTransfer += BigInt(wSolUsage.solautoAction.fields[0].fields[0]);
|
71
71
|
}
|
72
72
|
else if (initiatingDcaIn &&
|
73
|
-
client.
|
73
|
+
client.debtMint.toString() === spl_token_1.NATIVE_MINT.toString()) {
|
74
74
|
amountToTransfer += initiatingDcaIn;
|
75
75
|
}
|
76
76
|
if (amountToTransfer > 0) {
|
@@ -96,8 +96,8 @@ async function transactionChoresBefore(client, solautoActions, initiatingDcaIn)
|
|
96
96
|
}
|
97
97
|
if (!(0, generalUtils_1.getSolanaAccountCreated)(client.umi, tokenAccount)) {
|
98
98
|
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), (0, generated_1.isSolautoAction)("Withdraw", solautoAction)
|
99
|
-
? client.
|
100
|
-
: client.
|
99
|
+
? client.supplyMint
|
100
|
+
: client.debtMint));
|
101
101
|
accountsGettingCreated.push(tokenAccount.toString());
|
102
102
|
}
|
103
103
|
}
|
@@ -123,12 +123,12 @@ async function rebalanceChoresBefore(client, tx) {
|
|
123
123
|
const [referredBySupplyTa, solautoFeesSupplyTa, intermediaryMarginfiAccount] = await client.umi.rpc.getAccounts(accountsNeeded.map((x) => (0, umi_1.publicKey)(x ?? web3_js_1.PublicKey.default)));
|
124
124
|
let chores = (0, umi_1.transactionBuilder)();
|
125
125
|
if (checkReferralSupplyTa && !(0, generalUtils_1.rpcAccountCreated)(referredBySupplyTa)) {
|
126
|
-
client.log("Creating referred-by TA for ", client.
|
127
|
-
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.
|
126
|
+
client.log("Creating referred-by TA for ", client.supplyMint.toString());
|
127
|
+
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.supplyMint));
|
128
128
|
}
|
129
129
|
if (checkSolautoFeesTa && !(0, generalUtils_1.rpcAccountCreated)(solautoFeesSupplyTa)) {
|
130
|
-
client.log("Creating Solauto fees TA for ", client.
|
131
|
-
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.solautoFeesWallet, client.
|
130
|
+
client.log("Creating Solauto fees TA for ", client.supplyMint.toString());
|
131
|
+
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.solautoFeesWallet, client.supplyMint));
|
132
132
|
}
|
133
133
|
if (checkIntermediaryMfiAccount &&
|
134
134
|
!(0, generalUtils_1.rpcAccountCreated)(intermediaryMarginfiAccount)) {
|
@@ -228,7 +228,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
228
228
|
]);
|
229
229
|
}
|
230
230
|
if (client.solautoPositionState.liqUtilizationRateBps >
|
231
|
-
(0,
|
231
|
+
(0, numberUtils_1.getMaxLiqUtilizationRate)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps)) {
|
232
232
|
tx = tx.prepend(client.refresh());
|
233
233
|
}
|
234
234
|
return {
|
package/dist/utils/deleteme.js
CHANGED
@@ -45,7 +45,7 @@ function arraysAreEqual(arrayA, arrayB) {
|
|
45
45
|
exports.arraysAreEqual = arraysAreEqual;
|
46
46
|
async function getTokenPrices(mints) {
|
47
47
|
const currentTime = currentUnixSeconds();
|
48
|
-
if (!mints.some(mint => !(mint.toString() in solautoConstants_1.PRICES) || currentTime - solautoConstants_1.PRICES[mint.toString()].time >
|
48
|
+
if (!mints.some(mint => !(mint.toString() in solautoConstants_1.PRICES) || currentTime - solautoConstants_1.PRICES[mint.toString()].time > 3)) {
|
49
49
|
console.log("Accessing price cache");
|
50
50
|
return mints.map(mint => solautoConstants_1.PRICES[mint.toString()].price);
|
51
51
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,kBAAkB,CAAC,
|
1
|
+
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAiE7B"}
|
@@ -31,9 +31,8 @@ async function getJupSwapTransaction(signer, swapDetails) {
|
|
31
31
|
? "ExactIn"
|
32
32
|
: undefined,
|
33
33
|
});
|
34
|
-
|
35
|
-
|
36
|
-
(1 + (swapDetails.slippageBpsIncFactor ?? 0))));
|
34
|
+
const finalPriceSlippageBps = Math.round(Math.max(quoteResponse.slippageBps ?? 10, Math.round((0, numberUtils_1.toBps)(parseFloat(quoteResponse.priceImpactPct)))) *
|
35
|
+
(1 + (swapDetails.slippageBpsIncFactor ?? 0)));
|
37
36
|
quoteResponse.slippageBps = finalPriceSlippageBps;
|
38
37
|
console.log(quoteResponse);
|
39
38
|
console.log("Getting jup instructions...");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAOL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,qBAAqB,CAWxB;AAED,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAOL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,qBAAqB,CAWxB;AAED,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CAuCtB;AAoDD,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA4IpC;AA+DD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B3B"}
|
@@ -64,11 +64,11 @@ async function getAllMarginfiAccountsByAuthority(umi, authority, compatibleWithS
|
|
64
64
|
],
|
65
65
|
});
|
66
66
|
if (compatibleWithSolauto) {
|
67
|
-
const
|
67
|
+
const positionStates = await Promise.all(marginfiAccounts.map(async (x) => ({
|
68
68
|
publicKey: x.publicKey,
|
69
|
-
state: getMarginfiAccountPositionState(umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey)),
|
69
|
+
state: await getMarginfiAccountPositionState(umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey)),
|
70
70
|
})));
|
71
|
-
return
|
71
|
+
return positionStates
|
72
72
|
.filter((x) => x.state !== undefined)
|
73
73
|
.map((x) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey));
|
74
74
|
}
|
@@ -6,4 +6,7 @@ export declare function toBps(value: number): number;
|
|
6
6
|
export declare function bytesToI80F48(bytes: number[]): number;
|
7
7
|
export declare function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint;
|
8
8
|
export declare function getDebtAdjustmentUsd(liqThresholdBps: number, supplyUsd: number, debtUsd: number, targetLiqUtilizationRateBps: number, adjustmentFeeBps?: number): number;
|
9
|
+
export declare function getMaxLiqUtilizationRate(maxLtvBps: number, liqThresholdBps: number): number;
|
10
|
+
export declare function maxRepayFrom(maxLtvBps: number, liqThresholdBps: number): number;
|
11
|
+
export declare function maxRepayTo(maxLtvBps: number, liqThresholdBps: number): number;
|
9
12
|
//# sourceMappingURL=numberUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAM3G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAEH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAajE;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,2BAA2B,EAAE,MAAM,EACnC,gBAAgB,CAAC,EAAE,MAAM,UAQ1B;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,MAAM,CAER;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKtE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKpE"}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getDebtAdjustmentUsd = exports.uint8ArrayToBigInt = exports.bytesToI80F48 = exports.toBps = exports.fromBps = exports.fromBaseUnit = exports.toBaseUnit = exports.getLiqUtilzationRateBps = void 0;
|
3
|
+
exports.maxRepayTo = exports.maxRepayFrom = exports.getMaxLiqUtilizationRate = exports.getDebtAdjustmentUsd = exports.uint8ArrayToBigInt = exports.bytesToI80F48 = exports.toBps = exports.fromBps = exports.fromBaseUnit = exports.toBaseUnit = exports.getLiqUtilzationRateBps = void 0;
|
4
|
+
const constants_1 = require("../constants");
|
4
5
|
function getLiqUtilzationRateBps(supplyUsd, debtUsd, liqThresholdBps) {
|
5
6
|
if (supplyUsd === 0) {
|
6
7
|
return 0;
|
@@ -60,3 +61,15 @@ function getDebtAdjustmentUsd(liqThresholdBps, supplyUsd, debtUsd, targetLiqUtil
|
|
60
61
|
return debtAdjustmentUsd;
|
61
62
|
}
|
62
63
|
exports.getDebtAdjustmentUsd = getDebtAdjustmentUsd;
|
64
|
+
function getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps) {
|
65
|
+
return toBps((fromBps(maxLtvBps) - 0.01) / fromBps(liqThresholdBps)) - 1;
|
66
|
+
}
|
67
|
+
exports.getMaxLiqUtilizationRate = getMaxLiqUtilizationRate;
|
68
|
+
function maxRepayFrom(maxLtvBps, liqThresholdBps) {
|
69
|
+
return Math.min(9000, getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps - 1000));
|
70
|
+
}
|
71
|
+
exports.maxRepayFrom = maxRepayFrom;
|
72
|
+
function maxRepayTo(maxLtvBps, liqThresholdBps) {
|
73
|
+
return Math.min(maxRepayFrom(maxLtvBps, liqThresholdBps) - constants_1.MAX_REPAY_GAP_BPS, getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps));
|
74
|
+
}
|
75
|
+
exports.maxRepayTo = maxRepayTo;
|
@@ -150,7 +150,7 @@ async function sendSingleOptimizedTransaction(umi, connection, tx, simulateOnly,
|
|
150
150
|
const feeEstimate = await getComputeUnitPriceEstimate(umi, tx, attemptNum);
|
151
151
|
console.log("Compute unit price: ", feeEstimate);
|
152
152
|
const simulationResult = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await simulateTransaction(connection, (0, umi_web3js_adapters_1.toWeb3JsTransaction)(await (await assembleFinalTransaction(umi.identity, tx, feeEstimate, 1400000).setLatestBlockhash(umi)).buildAndSign(umi))));
|
153
|
-
const computeUnitLimit = Math.round(simulationResult.value.unitsConsumed * 1.
|
153
|
+
const computeUnitLimit = Math.round(simulationResult.value.unitsConsumed * 1.1);
|
154
154
|
console.log("Compute unit limit: ", computeUnitLimit);
|
155
155
|
if (!simulateOnly) {
|
156
156
|
const result = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await assembleFinalTransaction(umi.identity, tx, feeEstimate, computeUnitLimit).sendAndConfirm(umi, {
|
@@ -10,9 +10,6 @@ export declare function getSolautoFeesBps(isReferred: boolean, feeType: FeeType)
|
|
10
10
|
referrer: number;
|
11
11
|
total: number;
|
12
12
|
};
|
13
|
-
export declare function getMaxLiqUtilizationRate(maxLtvBps: number, liqThresholdBps: number): number;
|
14
|
-
export declare function maxRepayFrom(maxLtvBps: number, liqThresholdBps: number): number;
|
15
|
-
export declare function maxRepayTo(maxLtvBps: number, liqThresholdBps: number): number;
|
16
13
|
export declare function eligibileForRebalance(positionState: PositionState, positionSettings: SolautoSettingsParameters, positionDca: DCASettings): boolean;
|
17
14
|
export declare function eligibleForRefresh(positionState: PositionState, positionSettings: SolautoSettingsParameters): boolean;
|
18
15
|
export declare function getSolautoManagedPositions(umi: Umi, authority?: PublicKey): Promise<{
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAoB,GAAG,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,eAAe,EACf,aAAa,EAEb,yBAAyB,EACzB,gCAAgC,EAIjC,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
|
@@ -1,11 +1,10 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.LivePositionUpdates = exports.getAllPositionsByAuthority = exports.getReferralsByUser = exports.getAllReferralStates = exports.getSolautoManagedPositions = exports.eligibleForRefresh = exports.eligibileForRebalance = exports.
|
3
|
+
exports.LivePositionUpdates = exports.getAllPositionsByAuthority = exports.getReferralsByUser = exports.getAllReferralStates = exports.getSolautoManagedPositions = exports.eligibleForRefresh = exports.eligibileForRebalance = exports.getSolautoFeesBps = exports.getAdjustedSettingsFromAutomation = exports.getUpdatedValueFromAutomation = exports.eligibleForNextAutomationPeriod = exports.nextAutomationPeriodTimestamp = void 0;
|
4
4
|
const umi_1 = require("@metaplex-foundation/umi");
|
5
5
|
const generated_1 = require("../../generated");
|
6
6
|
const generalUtils_1 = require("../generalUtils");
|
7
7
|
const numberUtils_1 = require("../numberUtils");
|
8
|
-
const solautoConstants_1 = require("../../constants/solautoConstants");
|
9
8
|
const accountUtils_1 = require("../accountUtils");
|
10
9
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
11
10
|
const constants_1 = require("../../constants");
|
@@ -59,18 +58,6 @@ function getSolautoFeesBps(isReferred, feeType) {
|
|
59
58
|
};
|
60
59
|
}
|
61
60
|
exports.getSolautoFeesBps = getSolautoFeesBps;
|
62
|
-
function getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps) {
|
63
|
-
return (0, numberUtils_1.toBps)(((0, numberUtils_1.fromBps)(maxLtvBps) - 0.015) / (0, numberUtils_1.fromBps)(liqThresholdBps)) - 1;
|
64
|
-
}
|
65
|
-
exports.getMaxLiqUtilizationRate = getMaxLiqUtilizationRate;
|
66
|
-
function maxRepayFrom(maxLtvBps, liqThresholdBps) {
|
67
|
-
return Math.min(9000, getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps - 1000));
|
68
|
-
}
|
69
|
-
exports.maxRepayFrom = maxRepayFrom;
|
70
|
-
function maxRepayTo(maxLtvBps, liqThresholdBps) {
|
71
|
-
return Math.min(maxRepayFrom(maxLtvBps, liqThresholdBps) - solautoConstants_1.MAX_REPAY_GAP_BPS, getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps));
|
72
|
-
}
|
73
|
-
exports.maxRepayTo = maxRepayTo;
|
74
61
|
function eligibileForRebalance(positionState, positionSettings, positionDca) {
|
75
62
|
if (positionDca.automation.targetPeriods > 0 &&
|
76
63
|
eligibleForNextAutomationPeriod(positionDca.automation)) {
|
@@ -207,7 +194,7 @@ async function getAllPositionsByAuthority(umi, user) {
|
|
207
194
|
protocolAccount: pubkey,
|
208
195
|
})));
|
209
196
|
// TODO support other platforms
|
210
|
-
return
|
197
|
+
return allPositions;
|
211
198
|
}
|
212
199
|
exports.getAllPositionsByAuthority = getAllPositionsByAuthority;
|
213
200
|
async function positionStateWithLatestPrices(umi, state, protocolAccount, lendingPlatform) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
1
|
+
{"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAS5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA4IjD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CA+EjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAkE9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAmChB"}
|
@@ -93,7 +93,7 @@ function getRebalanceValues(client, targetLiqUtilizationRateBps, limitGapBps) {
|
|
93
93
|
throw new Error("Requires a fresh position state to get rebalance details");
|
94
94
|
}
|
95
95
|
const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(client, targetLiqUtilizationRateBps);
|
96
|
-
const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), client.solautoPositionState.debt.decimals) * solautoConstants_1.PRICES[client.
|
96
|
+
const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), client.solautoPositionState.debt.decimals) * solautoConstants_1.PRICES[client.debtMint.toString()].price;
|
97
97
|
const increasingLeverage = amountUsdToDcaIn > 0 ||
|
98
98
|
client.solautoPositionState.liqUtilizationRateBps < targetRateBps;
|
99
99
|
let adjustmentFeeBps = 0;
|
@@ -103,12 +103,13 @@ function getRebalanceValues(client, targetLiqUtilizationRateBps, limitGapBps) {
|
|
103
103
|
const supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) + amountUsdToDcaIn;
|
104
104
|
const debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
105
105
|
let debtAdjustmentUsd = (0, numberUtils_1.getDebtAdjustmentUsd)(client.solautoPositionState.liqThresholdBps, supplyUsd, debtUsd, targetRateBps, adjustmentFeeBps);
|
106
|
+
debtAdjustmentUsd *= 500;
|
106
107
|
const input = increasingLeverage
|
107
108
|
? client.solautoPositionState.debt
|
108
109
|
: client.solautoPositionState.supply;
|
109
110
|
const inputMarketPrice = increasingLeverage
|
110
|
-
? solautoConstants_1.PRICES[client.
|
111
|
-
: solautoConstants_1.PRICES[client.
|
111
|
+
? solautoConstants_1.PRICES[client.debtMint.toString()].price
|
112
|
+
: solautoConstants_1.PRICES[client.supplyMint.toString()].price;
|
112
113
|
const limitGap = limitGapBps
|
113
114
|
? (0, numberUtils_1.fromBps)(limitGapBps)
|
114
115
|
: (0, numberUtils_1.fromBps)(solautoConstants_1.DEFAULT_LIMIT_GAP_BPS);
|
@@ -141,18 +142,18 @@ function getFlashLoanDetails(client, values, jupQuote) {
|
|
141
142
|
? debtUsd + debtAdjustmentWithSlippage
|
142
143
|
: debtUsd;
|
143
144
|
const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
|
144
|
-
const requiresFlashLoan = supplyUsd
|
145
|
+
const requiresFlashLoan = supplyUsd <= 0 ||
|
145
146
|
tempLiqUtilizationRateBps >
|
146
|
-
(0,
|
147
|
+
(0, numberUtils_1.getMaxLiqUtilizationRate)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps);
|
147
148
|
let flashLoanToken = undefined;
|
148
149
|
let flashLoanTokenPrice = 0;
|
149
150
|
if (values.increasingLeverage) {
|
150
151
|
flashLoanToken = client.solautoPositionState.debt;
|
151
|
-
flashLoanTokenPrice = solautoConstants_1.PRICES[client.
|
152
|
+
flashLoanTokenPrice = solautoConstants_1.PRICES[client.debtMint.toString()].price;
|
152
153
|
}
|
153
154
|
else {
|
154
155
|
flashLoanToken = client.solautoPositionState.supply;
|
155
|
-
flashLoanTokenPrice = solautoConstants_1.PRICES[client.
|
156
|
+
flashLoanTokenPrice = solautoConstants_1.PRICES[client.supplyMint.toString()].price;
|
156
157
|
}
|
157
158
|
const exactAmountBaseUnit = jupQuote && jupQuote.swapMode === "ExactOut"
|
158
159
|
? BigInt(parseInt(jupQuote.inAmount))
|
@@ -177,15 +178,15 @@ function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps,
|
|
177
178
|
: client.solautoPositionState.debt;
|
178
179
|
const usdToSwap = Math.abs(values.debtAdjustmentUsd) + values.amountUsdToDcaIn;
|
179
180
|
const inputPrice = values.increasingLeverage
|
180
|
-
? solautoConstants_1.PRICES[client.
|
181
|
-
: solautoConstants_1.PRICES[client.
|
181
|
+
? solautoConstants_1.PRICES[client.debtMint.toString()].price
|
182
|
+
: solautoConstants_1.PRICES[client.supplyMint.toString()].price;
|
182
183
|
const inputAmount = (0, numberUtils_1.toBaseUnit)(usdToSwap / inputPrice, input.decimals);
|
183
184
|
const rebalancingToZero = targetLiqUtilizationRateBps === 0;
|
184
185
|
return {
|
185
186
|
inputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(input.mint),
|
186
187
|
outputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(output.mint),
|
187
188
|
destinationWallet: client.solautoPosition,
|
188
|
-
// slippageBpsIncFactor: (values.increasingLeverage ? 0.1 : 0
|
189
|
+
// slippageBpsIncFactor: (!values.increasingLeverage ? 0.1 : 0) + ((attemptNum ?? 0) * 0.15),
|
189
190
|
slippageBpsIncFactor: (attemptNum ?? 0) * 0.15,
|
190
191
|
amount: rebalancingToZero
|
191
192
|
? client.solautoPositionState.debt.amountUsed.baseUnit +
|
package/package.json
CHANGED
@@ -66,8 +66,8 @@ export interface SolautoClientArgs {
|
|
66
66
|
signer?: Signer;
|
67
67
|
wallet?: WalletAdapter;
|
68
68
|
|
69
|
-
|
70
|
-
|
69
|
+
supplyMint?: PublicKey;
|
70
|
+
debtMint?: PublicKey;
|
71
71
|
|
72
72
|
referralFeesDestMint?: PublicKey;
|
73
73
|
referredByAuthority?: PublicKey;
|
@@ -87,11 +87,11 @@ export abstract class SolautoClient {
|
|
87
87
|
public solautoPositionData!: SolautoPosition | null;
|
88
88
|
public solautoPositionState!: PositionState | undefined;
|
89
89
|
|
90
|
-
public
|
90
|
+
public supplyMint!: PublicKey;
|
91
91
|
public positionSupplyLiquidityTa!: PublicKey;
|
92
92
|
public signerSupplyLiquidityTa!: PublicKey;
|
93
93
|
|
94
|
-
public
|
94
|
+
public debtMint!: PublicKey;
|
95
95
|
public positionDebtLiquidityTa!: PublicKey;
|
96
96
|
public signerDebtLiquidityTa!: PublicKey;
|
97
97
|
|
@@ -127,10 +127,7 @@ export abstract class SolautoClient {
|
|
127
127
|
});
|
128
128
|
}
|
129
129
|
|
130
|
-
async initialize(
|
131
|
-
args: SolautoClientArgs,
|
132
|
-
lendingPlatform: LendingPlatform,
|
133
|
-
) {
|
130
|
+
async initialize(args: SolautoClientArgs, lendingPlatform: LendingPlatform) {
|
134
131
|
if (!args.signer && !args.wallet) {
|
135
132
|
throw new Error("Signer or wallet must be provided");
|
136
133
|
}
|
@@ -157,28 +154,28 @@ export abstract class SolautoClient {
|
|
157
154
|
);
|
158
155
|
this.solautoPositionState = this.solautoPositionData?.state;
|
159
156
|
|
160
|
-
this.
|
161
|
-
args.
|
157
|
+
this.supplyMint =
|
158
|
+
args.supplyMint ??
|
162
159
|
toWeb3JsPublicKey(this.solautoPositionData!.position.supplyMint);
|
163
160
|
this.positionSupplyLiquidityTa = getTokenAccount(
|
164
161
|
this.solautoPosition,
|
165
|
-
this.
|
162
|
+
this.supplyMint
|
166
163
|
);
|
167
164
|
this.signerSupplyLiquidityTa = getTokenAccount(
|
168
165
|
toWeb3JsPublicKey(this.signer.publicKey),
|
169
|
-
this.
|
166
|
+
this.supplyMint
|
170
167
|
);
|
171
168
|
|
172
|
-
this.
|
173
|
-
args.
|
169
|
+
this.debtMint =
|
170
|
+
args.debtMint ??
|
174
171
|
toWeb3JsPublicKey(this.solautoPositionData!.position.debtMint);
|
175
172
|
this.positionDebtLiquidityTa = getTokenAccount(
|
176
173
|
this.solautoPosition,
|
177
|
-
this.
|
174
|
+
this.debtMint
|
178
175
|
);
|
179
176
|
this.signerDebtLiquidityTa = getTokenAccount(
|
180
177
|
toWeb3JsPublicKey(this.signer.publicKey),
|
181
|
-
this.
|
178
|
+
this.debtMint
|
182
179
|
);
|
183
180
|
|
184
181
|
this.authorityReferralState = await getReferralState(this.authority);
|
@@ -196,31 +193,33 @@ export abstract class SolautoClient {
|
|
196
193
|
this.authorityReferralFeesDestMint
|
197
194
|
);
|
198
195
|
|
196
|
+
const hasReferredBy =
|
197
|
+
this.authorityReferralStateData &&
|
198
|
+
this.authorityReferralStateData.referredByState !==
|
199
|
+
publicKey(PublicKey.default);
|
199
200
|
const referredByAuthority =
|
201
|
+
!hasReferredBy &&
|
200
202
|
args.referredByAuthority &&
|
201
203
|
!args.referredByAuthority.equals(toWeb3JsPublicKey(this.signer.publicKey))
|
202
204
|
? args.referredByAuthority
|
203
205
|
: undefined;
|
204
|
-
this.referredByState =
|
205
|
-
this.authorityReferralStateData
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
: referredByAuthority
|
210
|
-
? await getReferralState(referredByAuthority!)
|
211
|
-
: undefined;
|
206
|
+
this.referredByState = hasReferredBy
|
207
|
+
? toWeb3JsPublicKey(this.authorityReferralStateData!.referredByState)
|
208
|
+
: referredByAuthority
|
209
|
+
? await getReferralState(referredByAuthority!)
|
210
|
+
: undefined;
|
212
211
|
this.referredByAuthority = referredByAuthority;
|
213
212
|
if (this.referredByState !== undefined) {
|
214
213
|
this.referredBySupplyTa = getTokenAccount(
|
215
214
|
this.referredByState,
|
216
|
-
this.
|
215
|
+
this.supplyMint
|
217
216
|
);
|
218
217
|
}
|
219
218
|
|
220
219
|
this.solautoFeesWallet = SOLAUTO_FEES_WALLET;
|
221
220
|
this.solautoFeesSupplyTa = getTokenAccount(
|
222
221
|
this.solautoFeesWallet,
|
223
|
-
this.
|
222
|
+
this.supplyMint
|
224
223
|
);
|
225
224
|
|
226
225
|
this.authorityLutAddress = this.authorityReferralStateData?.lookupTable
|
@@ -443,7 +442,7 @@ export abstract class SolautoClient {
|
|
443
442
|
let positionDebtTa: UmiPublicKey | undefined = undefined;
|
444
443
|
let signerDebtTa: UmiPublicKey | undefined = undefined;
|
445
444
|
if (isOption(args.dca) && isSome(args.dca)) {
|
446
|
-
debtMint = publicKey(this.
|
445
|
+
debtMint = publicKey(this.debtMint);
|
447
446
|
positionDebtTa = publicKey(this.positionDebtLiquidityTa);
|
448
447
|
signerDebtTa = publicKey(this.signerDebtLiquidityTa);
|
449
448
|
|
@@ -516,7 +515,7 @@ export abstract class SolautoClient {
|
|
516
515
|
if (this.solautoPositionData !== null && !this.selfManaged) {
|
517
516
|
const positionData = this.solautoPositionData!.position;
|
518
517
|
if (positionData.dca.debtToAddBaseUnit) {
|
519
|
-
debtMint = publicKey(this.
|
518
|
+
debtMint = publicKey(this.debtMint);
|
520
519
|
positionDebtTa = publicKey(this.positionDebtLiquidityTa);
|
521
520
|
signerDebtTa = publicKey(this.signerDebtLiquidityTa);
|
522
521
|
|
@@ -77,8 +77,8 @@ export function newMarginfiSolautoManagedPositionArgs(
|
|
77
77
|
signer,
|
78
78
|
wallet,
|
79
79
|
marginfiAccountSeedIdx: positionId > 0 ? generateRandomU64() : undefined,
|
80
|
-
|
81
|
-
|
80
|
+
supplyMint: supplyMint,
|
81
|
+
debtMint: debtMint,
|
82
82
|
referredByAuthority,
|
83
83
|
};
|
84
84
|
}
|
@@ -129,10 +129,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
129
129
|
: args.marginfiGroup ?? new PublicKey(DEFAULT_MARGINFI_GROUP);
|
130
130
|
|
131
131
|
this.marginfiSupplyBankAccounts = findMarginfiBankAccounts({
|
132
|
-
mint: this.
|
132
|
+
mint: this.supplyMint.toString(),
|
133
133
|
})!;
|
134
134
|
this.marginfiDebtBankAccounts = findMarginfiBankAccounts({
|
135
|
-
mint: this.
|
135
|
+
mint: this.debtMint.toString(),
|
136
136
|
})!;
|
137
137
|
|
138
138
|
const existingMarginfiAccounts = await getAllMarginfiAccountsByAuthority(
|
@@ -218,10 +218,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
218
218
|
this.marginfiAccountSeedIdx !== undefined
|
219
219
|
? publicKey(this.marginfiAccount)
|
220
220
|
: (this.marginfiAccount as Signer),
|
221
|
-
supplyMint: publicKey(this.
|
221
|
+
supplyMint: publicKey(this.supplyMint),
|
222
222
|
supplyBank: publicKey(this.marginfiSupplyBankAccounts.bank),
|
223
223
|
positionSupplyTa: publicKey(this.positionSupplyLiquidityTa),
|
224
|
-
debtMint: publicKey(this.
|
224
|
+
debtMint: publicKey(this.debtMint),
|
225
225
|
debtBank: publicKey(this.marginfiDebtBankAccounts.bank),
|
226
226
|
positionDebtTa: publicKey(this.positionDebtLiquidityTa),
|
227
227
|
signerDebtTa: signerDebtLiquidityTa,
|
@@ -370,7 +370,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
370
370
|
flashLoanDetails: FlashLoanDetails,
|
371
371
|
destinationTokenAccount: PublicKey
|
372
372
|
): TransactionBuilder {
|
373
|
-
const bank = flashLoanDetails.mint.equals(this.
|
373
|
+
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
374
374
|
? this.marginfiSupplyBankAccounts
|
375
375
|
: this.marginfiDebtBankAccounts;
|
376
376
|
return transactionBuilder()
|
@@ -397,7 +397,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
397
397
|
}
|
398
398
|
|
399
399
|
flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder {
|
400
|
-
const bank = flashLoanDetails.mint.equals(this.
|
400
|
+
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
401
401
|
? this.marginfiSupplyBankAccounts
|
402
402
|
: this.marginfiDebtBankAccounts;
|
403
403
|
|
@@ -492,8 +492,8 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
492
492
|
const freshState = await getMarginfiAccountPositionState(
|
493
493
|
this.umi,
|
494
494
|
this.marginfiAccountPk,
|
495
|
-
this.
|
496
|
-
this.
|
495
|
+
this.supplyMint,
|
496
|
+
this.debtMint,
|
497
497
|
this.livePositionUpdates
|
498
498
|
);
|
499
499
|
this.log(freshState);
|
@@ -40,10 +40,9 @@ import {
|
|
40
40
|
rpcAccountCreated,
|
41
41
|
} from "../utils/generalUtils";
|
42
42
|
import { SolautoMarginfiClient } from "../clients/solautoMarginfiClient";
|
43
|
-
import { uint8ArrayToBigInt } from "../utils/numberUtils";
|
43
|
+
import { getMaxLiqUtilizationRate, uint8ArrayToBigInt } from "../utils/numberUtils";
|
44
44
|
import {
|
45
45
|
eligibileForRebalance,
|
46
|
-
getMaxLiqUtilizationRate,
|
47
46
|
} from "../utils/solauto/generalUtils";
|
48
47
|
import { getTokenAccount } from "../utils/accountUtils";
|
49
48
|
|
@@ -58,8 +57,8 @@ function getWSolUsage(
|
|
58
57
|
initiatingDcaIn?: bigint,
|
59
58
|
cancellingDcaIn?: boolean
|
60
59
|
): wSolTokenUsage | undefined {
|
61
|
-
const supplyIsWsol = client.
|
62
|
-
const debtIsWsol = client.
|
60
|
+
const supplyIsWsol = client.supplyMint.equals(NATIVE_MINT);
|
61
|
+
const debtIsWsol = client.debtMint.equals(NATIVE_MINT);
|
63
62
|
if (!supplyIsWsol && !debtIsWsol) {
|
64
63
|
return undefined;
|
65
64
|
}
|
@@ -142,7 +141,7 @@ async function transactionChoresBefore(
|
|
142
141
|
amountToTransfer += BigInt(wSolUsage.solautoAction.fields[0].fields[0]);
|
143
142
|
} else if (
|
144
143
|
initiatingDcaIn &&
|
145
|
-
client.
|
144
|
+
client.debtMint.toString() === NATIVE_MINT.toString()
|
146
145
|
) {
|
147
146
|
amountToTransfer += initiatingDcaIn;
|
148
147
|
}
|
@@ -189,8 +188,8 @@ async function transactionChoresBefore(
|
|
189
188
|
client.signer,
|
190
189
|
toWeb3JsPublicKey(client.signer.publicKey),
|
191
190
|
isSolautoAction("Withdraw", solautoAction)
|
192
|
-
? client.
|
193
|
-
: client.
|
191
|
+
? client.supplyMint
|
192
|
+
: client.debtMint
|
194
193
|
)
|
195
194
|
);
|
196
195
|
accountsGettingCreated.push(tokenAccount.toString());
|
@@ -238,13 +237,13 @@ export async function rebalanceChoresBefore(
|
|
238
237
|
if (checkReferralSupplyTa && !rpcAccountCreated(referredBySupplyTa)) {
|
239
238
|
client.log(
|
240
239
|
"Creating referred-by TA for ",
|
241
|
-
client.
|
240
|
+
client.supplyMint.toString()
|
242
241
|
);
|
243
242
|
chores = chores.add(
|
244
243
|
createAssociatedTokenAccountUmiIx(
|
245
244
|
client.signer,
|
246
245
|
client.referredByState!,
|
247
|
-
client.
|
246
|
+
client.supplyMint
|
248
247
|
)
|
249
248
|
);
|
250
249
|
}
|
@@ -252,13 +251,13 @@ export async function rebalanceChoresBefore(
|
|
252
251
|
if (checkSolautoFeesTa && !rpcAccountCreated(solautoFeesSupplyTa)) {
|
253
252
|
client.log(
|
254
253
|
"Creating Solauto fees TA for ",
|
255
|
-
client.
|
254
|
+
client.supplyMint.toString()
|
256
255
|
);
|
257
256
|
chores = chores.add(
|
258
257
|
createAssociatedTokenAccountUmiIx(
|
259
258
|
client.signer,
|
260
259
|
client.solautoFeesWallet,
|
261
|
-
client.
|
260
|
+
client.supplyMint
|
262
261
|
)
|
263
262
|
);
|
264
263
|
}
|
package/src/utils/deleteme.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { getDebtAdjustmentUsd, getLiqUtilzationRateBps } from "./numberUtils";
|
2
2
|
|
3
|
-
//
|
3
|
+
// TODO delete this file
|
4
4
|
function check() {
|
5
5
|
let supply = 458948;
|
6
6
|
let debt = 212846;
|
@@ -37,4 +37,4 @@ function check() {
|
|
37
37
|
console.log!(liq_utilization_rate);
|
38
38
|
}
|
39
39
|
|
40
|
-
check();
|
40
|
+
check();
|
@@ -44,7 +44,7 @@ export function arraysAreEqual(arrayA: number[], arrayB: number[]): boolean {
|
|
44
44
|
|
45
45
|
export async function getTokenPrices(mints: PublicKey[]): Promise<number[]> {
|
46
46
|
const currentTime = currentUnixSeconds();
|
47
|
-
if (!mints.some(mint => !(mint.toString() in PRICES) || currentTime - PRICES[mint.toString()].time >
|
47
|
+
if (!mints.some(mint => !(mint.toString() in PRICES) || currentTime - PRICES[mint.toString()].time > 3)) {
|
48
48
|
console.log("Accessing price cache");
|
49
49
|
return mints.map(mint => PRICES[mint.toString()].price);
|
50
50
|
}
|
@@ -64,13 +64,12 @@ export async function getJupSwapTransaction(
|
|
64
64
|
: undefined,
|
65
65
|
});
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
)
|
67
|
+
const finalPriceSlippageBps = Math.round(
|
68
|
+
Math.max(
|
69
|
+
quoteResponse.slippageBps ?? 10,
|
70
|
+
Math.round(toBps(parseFloat(quoteResponse.priceImpactPct)))
|
71
|
+
) *
|
72
|
+
(1 + (swapDetails.slippageBpsIncFactor ?? 0))
|
74
73
|
);
|
75
74
|
quoteResponse.slippageBps = finalPriceSlippageBps;
|
76
75
|
console.log(quoteResponse);
|
@@ -82,7 +81,10 @@ export async function getJupSwapTransaction(
|
|
82
81
|
quoteResponse,
|
83
82
|
wrapAndUnwrapSol: false,
|
84
83
|
useTokenLedger: !swapDetails.exactOut && !swapDetails.exactIn,
|
85
|
-
destinationTokenAccount: getTokenAccount(
|
84
|
+
destinationTokenAccount: getTokenAccount(
|
85
|
+
swapDetails.destinationWallet,
|
86
|
+
swapDetails.outputMint
|
87
|
+
).toString(),
|
86
88
|
},
|
87
89
|
});
|
88
90
|
|
@@ -112,17 +112,16 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
112
112
|
);
|
113
113
|
|
114
114
|
if (compatibleWithSolauto) {
|
115
|
-
const
|
116
|
-
marginfiAccounts.map((x) => ({
|
115
|
+
const positionStates = await Promise.all(
|
116
|
+
marginfiAccounts.map(async (x) => ({
|
117
117
|
publicKey: x.publicKey,
|
118
|
-
state: getMarginfiAccountPositionState(
|
118
|
+
state: await getMarginfiAccountPositionState(
|
119
119
|
umi,
|
120
120
|
toWeb3JsPublicKey(x.publicKey)
|
121
121
|
),
|
122
122
|
}))
|
123
123
|
);
|
124
|
-
|
125
|
-
return compatiblePositions
|
124
|
+
return positionStates
|
126
125
|
.filter((x) => x.state !== undefined)
|
127
126
|
.map((x) => toWeb3JsPublicKey(x.publicKey));
|
128
127
|
} else {
|
package/src/utils/numberUtils.ts
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import { MAX_REPAY_GAP_BPS } from "../constants";
|
2
|
+
|
1
3
|
export function getLiqUtilzationRateBps(supplyUsd: number, debtUsd: number, liqThresholdBps: number): number {
|
2
4
|
if (supplyUsd === 0) {
|
3
5
|
return 0;
|
@@ -73,4 +75,25 @@ export function getDebtAdjustmentUsd(
|
|
73
75
|
|
74
76
|
const debtAdjustmentUsd = (targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) / (1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
|
75
77
|
return debtAdjustmentUsd;
|
78
|
+
}
|
79
|
+
|
80
|
+
export function getMaxLiqUtilizationRate(
|
81
|
+
maxLtvBps: number,
|
82
|
+
liqThresholdBps: number
|
83
|
+
): number {
|
84
|
+
return toBps((fromBps(maxLtvBps) - 0.01) / fromBps(liqThresholdBps)) - 1;
|
85
|
+
}
|
86
|
+
|
87
|
+
export function maxRepayFrom(maxLtvBps: number, liqThresholdBps: number) {
|
88
|
+
return Math.min(
|
89
|
+
9000,
|
90
|
+
getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps - 1000)
|
91
|
+
);
|
92
|
+
}
|
93
|
+
|
94
|
+
export function maxRepayTo(maxLtvBps: number, liqThresholdBps: number) {
|
95
|
+
return Math.min(
|
96
|
+
maxRepayFrom(maxLtvBps, liqThresholdBps) - MAX_REPAY_GAP_BPS,
|
97
|
+
getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps)
|
98
|
+
);
|
76
99
|
}
|
package/src/utils/solanaUtils.ts
CHANGED
@@ -293,7 +293,7 @@ export async function sendSingleOptimizedTransaction(
|
|
293
293
|
);
|
294
294
|
|
295
295
|
const computeUnitLimit = Math.round(
|
296
|
-
simulationResult.value.unitsConsumed! * 1.
|
296
|
+
simulationResult.value.unitsConsumed! * 1.1
|
297
297
|
);
|
298
298
|
console.log("Compute unit limit: ", computeUnitLimit);
|
299
299
|
|
@@ -17,12 +17,9 @@ import {
|
|
17
17
|
import { currentUnixSeconds, getTokenPrices } from "../generalUtils";
|
18
18
|
import {
|
19
19
|
fromBaseUnit,
|
20
|
-
fromBps,
|
21
20
|
getLiqUtilzationRateBps,
|
22
21
|
toBaseUnit,
|
23
|
-
toBps,
|
24
22
|
} from "../numberUtils";
|
25
|
-
import { MAX_REPAY_GAP_BPS } from "../../constants/solautoConstants";
|
26
23
|
import { getReferralState } from "../accountUtils";
|
27
24
|
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
28
25
|
import { USD_DECIMALS } from "../../constants";
|
@@ -120,27 +117,6 @@ export function getSolautoFeesBps(
|
|
120
117
|
};
|
121
118
|
}
|
122
119
|
|
123
|
-
export function getMaxLiqUtilizationRate(
|
124
|
-
maxLtvBps: number,
|
125
|
-
liqThresholdBps: number
|
126
|
-
): number {
|
127
|
-
return toBps((fromBps(maxLtvBps) - 0.015) / fromBps(liqThresholdBps)) - 1;
|
128
|
-
}
|
129
|
-
|
130
|
-
export function maxRepayFrom(maxLtvBps: number, liqThresholdBps: number) {
|
131
|
-
return Math.min(
|
132
|
-
9000,
|
133
|
-
getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps - 1000)
|
134
|
-
);
|
135
|
-
}
|
136
|
-
|
137
|
-
export function maxRepayTo(maxLtvBps: number, liqThresholdBps: number) {
|
138
|
-
return Math.min(
|
139
|
-
maxRepayFrom(maxLtvBps, liqThresholdBps) - MAX_REPAY_GAP_BPS,
|
140
|
-
getMaxLiqUtilizationRate(maxLtvBps, liqThresholdBps)
|
141
|
-
);
|
142
|
-
}
|
143
|
-
|
144
120
|
export function eligibileForRebalance(
|
145
121
|
positionState: PositionState,
|
146
122
|
positionSettings: SolautoSettingsParameters,
|
@@ -333,7 +309,7 @@ export async function getAllPositionsByAuthority(
|
|
333
309
|
|
334
310
|
// TODO support other platforms
|
335
311
|
|
336
|
-
return
|
312
|
+
return allPositions;
|
337
313
|
}
|
338
314
|
|
339
315
|
async function positionStateWithLatestPrices(
|
@@ -4,7 +4,6 @@ import { PositionTokenUsage } from "../../generated";
|
|
4
4
|
import {
|
5
5
|
eligibleForNextAutomationPeriod,
|
6
6
|
getAdjustedSettingsFromAutomation,
|
7
|
-
getMaxLiqUtilizationRate,
|
8
7
|
getSolautoFeesBps,
|
9
8
|
getUpdatedValueFromAutomation,
|
10
9
|
} from "./generalUtils";
|
@@ -17,6 +16,7 @@ import {
|
|
17
16
|
fromBps,
|
18
17
|
getDebtAdjustmentUsd,
|
19
18
|
getLiqUtilzationRateBps,
|
19
|
+
getMaxLiqUtilizationRate,
|
20
20
|
toBaseUnit,
|
21
21
|
} from "../numberUtils";
|
22
22
|
import { USD_DECIMALS } from "../../constants/generalAccounts";
|
@@ -144,8 +144,7 @@ function getTargetRateAndDcaAmount(
|
|
144
144
|
};
|
145
145
|
} else {
|
146
146
|
return {
|
147
|
-
targetRateBps:
|
148
|
-
getStandardTargetLiqUtilizationRateBps(client),
|
147
|
+
targetRateBps: getStandardTargetLiqUtilizationRateBps(client),
|
149
148
|
};
|
150
149
|
}
|
151
150
|
}
|
@@ -180,7 +179,7 @@ export function getRebalanceValues(
|
|
180
179
|
fromBaseUnit(
|
181
180
|
BigInt(Math.round(amountToDcaIn ?? 0)),
|
182
181
|
client.solautoPositionState!.debt.decimals
|
183
|
-
) * PRICES[client.
|
182
|
+
) * PRICES[client.debtMint.toString()].price;
|
184
183
|
|
185
184
|
const increasingLeverage =
|
186
185
|
amountUsdToDcaIn > 0 ||
|
@@ -209,13 +208,14 @@ export function getRebalanceValues(
|
|
209
208
|
targetRateBps,
|
210
209
|
adjustmentFeeBps
|
211
210
|
);
|
211
|
+
debtAdjustmentUsd *= 500;
|
212
212
|
|
213
213
|
const input = increasingLeverage
|
214
214
|
? client.solautoPositionState!.debt
|
215
215
|
: client.solautoPositionState!.supply;
|
216
216
|
const inputMarketPrice = increasingLeverage
|
217
|
-
? PRICES[client.
|
218
|
-
: PRICES[client.
|
217
|
+
? PRICES[client.debtMint.toString()].price
|
218
|
+
: PRICES[client.supplyMint.toString()].price;
|
219
219
|
|
220
220
|
const limitGap = limitGapBps
|
221
221
|
? fromBps(limitGapBps)
|
@@ -270,13 +270,14 @@ export function getFlashLoanDetails(
|
|
270
270
|
values.debtAdjustmentUsd > 0
|
271
271
|
? debtUsd + debtAdjustmentWithSlippage
|
272
272
|
: debtUsd;
|
273
|
+
|
273
274
|
const tempLiqUtilizationRateBps = getLiqUtilzationRateBps(
|
274
275
|
supplyUsd,
|
275
276
|
debtUsd,
|
276
277
|
client.solautoPositionState!.liqThresholdBps
|
277
278
|
);
|
278
279
|
const requiresFlashLoan =
|
279
|
-
supplyUsd
|
280
|
+
supplyUsd <= 0 ||
|
280
281
|
tempLiqUtilizationRateBps >
|
281
282
|
getMaxLiqUtilizationRate(
|
282
283
|
client.solautoPositionState!.maxLtvBps,
|
@@ -287,10 +288,10 @@ export function getFlashLoanDetails(
|
|
287
288
|
let flashLoanTokenPrice = 0;
|
288
289
|
if (values.increasingLeverage) {
|
289
290
|
flashLoanToken = client.solautoPositionState!.debt;
|
290
|
-
flashLoanTokenPrice = PRICES[client.
|
291
|
+
flashLoanTokenPrice = PRICES[client.debtMint.toString()].price;
|
291
292
|
} else {
|
292
293
|
flashLoanToken = client.solautoPositionState!.supply;
|
293
|
-
flashLoanTokenPrice = PRICES[client.
|
294
|
+
flashLoanTokenPrice = PRICES[client.supplyMint.toString()].price;
|
294
295
|
}
|
295
296
|
|
296
297
|
const exactAmountBaseUnit =
|
@@ -333,8 +334,8 @@ export function getJupSwapRebalanceDetails(
|
|
333
334
|
Math.abs(values.debtAdjustmentUsd) + values.amountUsdToDcaIn;
|
334
335
|
|
335
336
|
const inputPrice = values.increasingLeverage
|
336
|
-
? PRICES[client.
|
337
|
-
: PRICES[client.
|
337
|
+
? PRICES[client.debtMint.toString()].price
|
338
|
+
: PRICES[client.supplyMint.toString()].price;
|
338
339
|
const inputAmount = toBaseUnit(usdToSwap / inputPrice!, input.decimals);
|
339
340
|
|
340
341
|
const rebalancingToZero = targetLiqUtilizationRateBps === 0;
|
@@ -342,7 +343,7 @@ export function getJupSwapRebalanceDetails(
|
|
342
343
|
inputMint: toWeb3JsPublicKey(input.mint),
|
343
344
|
outputMint: toWeb3JsPublicKey(output.mint),
|
344
345
|
destinationWallet: client.solautoPosition,
|
345
|
-
// slippageBpsIncFactor: (values.increasingLeverage ? 0.1 : 0
|
346
|
+
// slippageBpsIncFactor: (!values.increasingLeverage ? 0.1 : 0) + ((attemptNum ?? 0) * 0.15),
|
346
347
|
slippageBpsIncFactor: (attemptNum ?? 0) * 0.15,
|
347
348
|
amount: rebalancingToZero
|
348
349
|
? client.solautoPositionState!.debt.amountUsed.baseUnit +
|
@@ -92,11 +92,12 @@ async function getFakePosition(
|
|
92
92
|
settings: SolautoSettingsParameters,
|
93
93
|
dca?: DCASettings
|
94
94
|
): Promise<SolautoClient> {
|
95
|
-
const client = new SolautoMarginfiClient(true);
|
95
|
+
const client = new SolautoMarginfiClient(process.env.HELIUS_API_KEY ?? "", true);
|
96
96
|
await client.initialize(
|
97
97
|
newMarginfiSolautoManagedPositionArgs(
|
98
98
|
1,
|
99
99
|
signer,
|
100
|
+
undefined,
|
100
101
|
new PublicKey(NATIVE_MINT),
|
101
102
|
new PublicKey(MARGINFI_ACCOUNTS.USDC.mint)
|
102
103
|
)
|
@@ -124,8 +125,8 @@ async function getFakePosition(
|
|
124
125
|
padding: new Uint8Array([]),
|
125
126
|
},
|
126
127
|
lendingPlatform: LendingPlatform.Marginfi,
|
127
|
-
supplyMint: publicKey(client.
|
128
|
-
debtMint: publicKey(client.
|
128
|
+
supplyMint: publicKey(client.supplyMint),
|
129
|
+
debtMint: publicKey(client.debtMint),
|
129
130
|
protocolAccount: publicKey(PublicKey.default),
|
130
131
|
settingParams: settings,
|
131
132
|
padding1: [],
|
@@ -267,11 +268,12 @@ describe("Rebalance tests", async () => {
|
|
267
268
|
});
|
268
269
|
|
269
270
|
it("Standard rebalance with target rate", async () => {
|
270
|
-
const client = new SolautoMarginfiClient(true);
|
271
|
+
const client = new SolautoMarginfiClient(process.env.HELIUS_API_KEY ?? "", true);
|
271
272
|
await client.initialize(
|
272
273
|
newMarginfiSolautoManagedPositionArgs(
|
273
274
|
1,
|
274
275
|
signer,
|
276
|
+
undefined,
|
275
277
|
new PublicKey(NATIVE_MINT),
|
276
278
|
new PublicKey(MARGINFI_ACCOUNTS.USDC.mint)
|
277
279
|
)
|