@haven-fi/solauto-sdk 1.0.455 → 1.0.457
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/referralStateManager.d.ts.map +1 -1
- package/dist/clients/referralStateManager.js +6 -2
- package/dist/clients/solautoClient.d.ts +2 -0
- package/dist/clients/solautoClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.d.ts +4 -0
- package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +14 -3
- package/dist/transactions/transactionUtils.d.ts +1 -2
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +2 -13
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/transactions/transactionsManager.js +10 -8
- package/dist/utils/marginfiUtils.d.ts +6 -2
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +24 -22
- package/dist/utils/solauto/rebalanceUtils.d.ts +0 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +7 -19
- package/local/logPositions.ts +29 -6
- package/package.json +1 -1
- package/src/clients/referralStateManager.ts +9 -2
- package/src/clients/solautoClient.ts +3 -0
- package/src/clients/solautoMarginfiClient.ts +19 -3
- package/src/transactions/transactionUtils.ts +3 -21
- package/src/transactions/transactionsManager.ts +12 -8
- package/src/utils/marginfiUtils.ts +37 -31
- package/src/utils/solauto/rebalanceUtils.ts +10 -27
- package/tests/transactions/solautoMarginfi.ts +14 -23
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"referralStateManager.d.ts","sourceRoot":"","sources":["../../src/clients/referralStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAEL,MAAM,EAEN,kBAAkB,EAClB,GAAG,EACJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EAEd,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAEL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IAC1C,GAAG,EAAG,GAAG,CAAC;IAEV,aAAa,EAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAG,aAAa,GAAG,IAAI,CAAC;IACzC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,eAAe,CAAC,EAAE,SAAS,CAAC;IAE7B,UAAU,CAAC,IAAI,EAAE,wBAAwB;
|
1
|
+
{"version":3,"file":"referralStateManager.d.ts","sourceRoot":"","sources":["../../src/clients/referralStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAEL,MAAM,EAEN,kBAAkB,EAClB,GAAG,EACJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EAEd,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAEL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IAC1C,GAAG,EAAG,GAAG,CAAC;IAEV,aAAa,EAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAG,aAAa,GAAG,IAAI,CAAC;IACzC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,eAAe,CAAC,EAAE,SAAS,CAAC;IAE7B,UAAU,CAAC,IAAI,EAAE,wBAAwB;IAkC/C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS;IAsBpC,sBAAsB,CACpB,YAAY,CAAC,EAAE,SAAS,EACxB,WAAW,CAAC,EAAE,SAAS,GACtB,kBAAkB;IAerB,mBAAmB,IAAI,kBAAkB;IA0BnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAC3D"}
|
@@ -19,9 +19,13 @@ class ReferralStateManager extends txHandler_1.TxHandler {
|
|
19
19
|
? (0, umi_1.signerIdentity)(args.signer, true)
|
20
20
|
: (0, umi_signer_wallet_adapters_1.walletAdapterIdentity)(args.wallet, true));
|
21
21
|
this.signer = this.umi.identity;
|
22
|
-
this.
|
23
|
-
|
22
|
+
this.referralState =
|
23
|
+
args.referralState ??
|
24
|
+
(0, utils_1.getReferralState)(args.authority ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.programId);
|
24
25
|
this.referralStateData = await (0, generated_1.safeFetchReferralState)(this.umi, (0, umi_1.publicKey)(this.referralState), { commitment: "confirmed" });
|
26
|
+
this.authority = this.referralStateData?.authority
|
27
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.referralStateData.authority)
|
28
|
+
: (args.authority ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey));
|
25
29
|
this.setReferredBy(args.referredByAuthority);
|
26
30
|
this.log("Authority:", this.authority.toString());
|
27
31
|
this.log("Signer:", this.signer.publicKey.toString());
|
@@ -58,5 +58,7 @@ export declare abstract class SolautoClient extends ReferralStateManager {
|
|
58
58
|
abstract flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
|
59
59
|
abstract rebalance(rebalanceStep: "A" | "B", jupQuote: QuoteResponse, rebalanceType: SolautoRebalanceTypeArgs, rebalanceValues: RebalanceValues, flashLoan?: FlashLoanDetails, targetLiqUtilizationRateBps?: number): TransactionBuilder;
|
60
60
|
getFreshPositionState(): Promise<PositionState | undefined>;
|
61
|
+
abstract supplyLiquidityAvailable(): bigint;
|
62
|
+
abstract debtLiquidityAvailable(): bigint;
|
61
63
|
}
|
62
64
|
//# sourceMappingURL=solautoClient.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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"}
|
@@ -25,6 +25,8 @@ export declare class SolautoMarginfiClient extends SolautoClient {
|
|
25
25
|
intermediaryMarginfiAccountSigner?: Signer;
|
26
26
|
intermediaryMarginfiAccountPk: PublicKey;
|
27
27
|
intermediaryMarginfiAccount?: MarginfiAccount;
|
28
|
+
private supplyBank;
|
29
|
+
private debtBank;
|
28
30
|
initialize(args: SolautoMarginfiClientArgs): Promise<void>;
|
29
31
|
setIntermediaryMarginfiDetails(): Promise<void>;
|
30
32
|
protocolAccount(): PublicKey;
|
@@ -42,5 +44,7 @@ export declare class SolautoMarginfiClient extends SolautoClient {
|
|
42
44
|
flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
|
43
45
|
flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
|
44
46
|
getFreshPositionState(): Promise<PositionState | undefined>;
|
47
|
+
supplyLiquidityAvailable(): bigint;
|
48
|
+
debtLiquidityAvailable(): bigint;
|
45
49
|
}
|
46
50
|
//# sourceMappingURL=solautoMarginfiClient.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAGL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;
|
1
|
+
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAGL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,cAAc,CAAC,CAAY;IAE5B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAErD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAE/B,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAiG1C,8BAA8B;IAwCpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IA0BvE,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IA+ErB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoF5D,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAmDjE,wBAAwB,IAAI,MAAM;IAIlC,sBAAsB,IAAI,MAAM;CAGjC"}
|
@@ -16,6 +16,8 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
16
16
|
constructor() {
|
17
17
|
super(...arguments);
|
18
18
|
this.marginfiAccountSeedIdx = BigInt(0);
|
19
|
+
this.supplyBank = null;
|
20
|
+
this.debtBank = null;
|
19
21
|
}
|
20
22
|
async initialize(args) {
|
21
23
|
await super.initialize(args);
|
@@ -454,8 +456,11 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
454
456
|
const useDesignatedMint = !this.selfManaged &&
|
455
457
|
(this.solautoPositionData === null ||
|
456
458
|
!(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority));
|
457
|
-
const
|
458
|
-
if (
|
459
|
+
const resp = await (0, marginfiUtils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.marginfiAccountPk }, this.marginfiGroup, useDesignatedMint ? { mint: this.supplyMint } : undefined, useDesignatedMint ? { mint: this.debtMint } : undefined, this.livePositionUpdates);
|
460
|
+
if (resp) {
|
461
|
+
this.supplyBank = resp?.supplyBank;
|
462
|
+
this.debtBank = resp?.debtBank;
|
463
|
+
const freshState = resp.state;
|
459
464
|
this.log("Fresh state", freshState);
|
460
465
|
const supplyPrice = (0, utils_1.safeGetPrice)(freshState?.supply.mint);
|
461
466
|
const debtPrice = (0, utils_1.safeGetPrice)(freshState?.debt.mint);
|
@@ -466,7 +471,13 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
466
471
|
this.log("Supply USD:", (0, numberUtils_1.fromBaseUnit)(freshState.supply.amountUsed.baseUnit, freshState.supply.decimals) * supplyPrice);
|
467
472
|
this.log("Debt USD:", (0, numberUtils_1.fromBaseUnit)(freshState.debt.amountUsed.baseUnit, freshState.debt.decimals) * debtPrice);
|
468
473
|
}
|
469
|
-
return
|
474
|
+
return resp?.state;
|
475
|
+
}
|
476
|
+
supplyLiquidityAvailable() {
|
477
|
+
return (0, marginfiUtils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false);
|
478
|
+
}
|
479
|
+
debtLiquidityAvailable() {
|
480
|
+
return (0, marginfiUtils_1.getBankLiquidityAvailableBaseUnit)(this.debtBank, false);
|
470
481
|
}
|
471
482
|
}
|
472
483
|
exports.SolautoMarginfiClient = SolautoMarginfiClient;
|
@@ -1,12 +1,11 @@
|
|
1
1
|
import { TransactionBuilder, Umi } from "@metaplex-foundation/umi";
|
2
2
|
import { PublicKey } from "@solana/web3.js";
|
3
3
|
import { SolautoClient } from "../clients/solautoClient";
|
4
|
-
import { RebalanceValues } from "../utils/solauto/rebalanceUtils";
|
5
4
|
import { ReferralStateManager } from "../clients";
|
6
5
|
import { TransactionItemInputs } from "../types";
|
7
6
|
export declare function rebalanceChoresBefore(client: SolautoClient, tx: TransactionBuilder, accountsGettingCreated: string[]): Promise<TransactionBuilder>;
|
8
7
|
export declare function getTransactionChores(client: SolautoClient, tx: TransactionBuilder): Promise<[TransactionBuilder, TransactionBuilder]>;
|
9
|
-
export declare function requiresRefreshBeforeRebalance(client: SolautoClient
|
8
|
+
export declare function requiresRefreshBeforeRebalance(client: SolautoClient): Promise<boolean>;
|
10
9
|
export declare function buildSolautoRebalanceTransaction(client: SolautoClient, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<TransactionItemInputs | undefined>;
|
11
10
|
export declare function convertReferralFeesToDestination(referralManager: ReferralStateManager, tokenAccount: PublicKey, destinationMint: PublicKey): Promise<TransactionItemInputs | undefined>;
|
12
11
|
export declare function getErrorInfo(umi: Umi, txs: TransactionBuilder[], error: Error, simulationSuccessful?: boolean): {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAoBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqCzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA4LjD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoH7B;AA2LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,aAAa,oBAqDzE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAoI5C;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EAiG/B"}
|
@@ -329,17 +329,7 @@ async function getTransactionChores(client, tx) {
|
|
329
329
|
choresAfter = choresAfter.add(transactionChoresAfter(client, solautoActions, client.livePositionUpdates.cancellingDca));
|
330
330
|
return [choresBefore, choresAfter];
|
331
331
|
}
|
332
|
-
async function requiresRefreshBeforeRebalance(client
|
333
|
-
// REMOVE ME
|
334
|
-
const state = client.solautoPositionState;
|
335
|
-
const settings = client.solautoPositionSettings();
|
336
|
-
if ((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.supply.mint).equals(new web3_js_1.PublicKey(constants_1.JUP)) &&
|
337
|
-
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.debt.mint).equals(new web3_js_1.PublicKey(constants_1.USDC)) &&
|
338
|
-
settings &&
|
339
|
-
settings.boostToBps ===
|
340
|
-
(0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps) && values.targetRateBps === 6500) {
|
341
|
-
return true;
|
342
|
-
}
|
332
|
+
async function requiresRefreshBeforeRebalance(client) {
|
343
333
|
const neverRefreshedBefore = client.solautoPositionData &&
|
344
334
|
client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
|
345
335
|
BigInt(0) &&
|
@@ -387,8 +377,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
387
377
|
const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
|
388
378
|
const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, jupQuote);
|
389
379
|
let tx = (0, umi_1.transactionBuilder)();
|
390
|
-
|
391
|
-
if (await requiresRefreshBeforeRebalance(client, values)) {
|
380
|
+
if (await requiresRefreshBeforeRebalance(client)) {
|
392
381
|
tx = tx.add(client.refresh());
|
393
382
|
}
|
394
383
|
if (flashLoan) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAW7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAZxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAGjB,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA+FzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA4BxB,6BAA6B;
|
1
|
+
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAW7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAZxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAGjB,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA+FzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA4BxB,6BAA6B;YAmI7B,qBAAqB;YAmDrB,cAAc;YAqCd,eAAe;CA4D9B"}
|
@@ -379,13 +379,14 @@ class TransactionsManager {
|
|
379
379
|
this.txHandler.log("Capturing error info...");
|
380
380
|
const errorDetails = (0, transactionUtils_1.getErrorInfo)(this.txHandler.umi, transactions, e, itemSets.filter((x) => this.statuses.find((y) => x.name() === y.name)?.simulationSuccessful).length === itemSets.length);
|
381
381
|
const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`;
|
382
|
+
const errorInfo = errorDetails.errorName || errorDetails.errorInfo
|
383
|
+
? errorString
|
384
|
+
: e.message;
|
382
385
|
this.updateStatusForSets(itemSets, errorDetails.canBeIgnored
|
383
386
|
? TransactionStatus.Skipped
|
384
|
-
: TransactionStatus.Failed, num, undefined, undefined,
|
385
|
-
? errorString
|
386
|
-
: e.message);
|
387
|
+
: TransactionStatus.Failed, num, undefined, undefined, errorInfo);
|
387
388
|
if (!errorDetails.canBeIgnored) {
|
388
|
-
throw
|
389
|
+
throw new Error(errorInfo);
|
389
390
|
}
|
390
391
|
});
|
391
392
|
}
|
@@ -442,13 +443,14 @@ class TransactionsManager {
|
|
442
443
|
this.txHandler.log("Capturing error info...");
|
443
444
|
const errorDetails = (0, transactionUtils_1.getErrorInfo)(this.txHandler.umi, [tx], e, this.statuses.find((x) => x.name === txName)?.simulationSuccessful);
|
444
445
|
const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`;
|
446
|
+
const errorInfo = errorDetails.errorName || errorDetails.errorInfo
|
447
|
+
? errorString
|
448
|
+
: e.message;
|
445
449
|
this.updateStatus(txName, errorDetails.canBeIgnored
|
446
450
|
? TransactionStatus.Skipped
|
447
|
-
: TransactionStatus.Failed, attemptNum, undefined, undefined,
|
448
|
-
? errorString
|
449
|
-
: e.message);
|
451
|
+
: TransactionStatus.Failed, attemptNum, undefined, undefined, errorInfo);
|
450
452
|
if (!errorDetails.canBeIgnored) {
|
451
|
-
throw
|
453
|
+
throw new Error(errorInfo);
|
452
454
|
}
|
453
455
|
}
|
454
456
|
}
|
@@ -21,7 +21,7 @@ export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: P
|
|
21
21
|
supplyMint?: PublicKey;
|
22
22
|
debtMint?: PublicKey;
|
23
23
|
}[]>;
|
24
|
-
export declare function getBankLiquidityAvailableBaseUnit(bank: Bank | null,
|
24
|
+
export declare function getBankLiquidityAvailableBaseUnit(bank: Bank | null, availableToDeposit: boolean): bigint;
|
25
25
|
interface BankSelection {
|
26
26
|
mint?: PublicKey;
|
27
27
|
banksCache?: BanksCache;
|
@@ -34,7 +34,11 @@ type BanksCache = {
|
|
34
34
|
export declare function getMarginfiAccountPositionState(umi: Umi, protocolAccount: {
|
35
35
|
pk: PublicKey;
|
36
36
|
data?: MarginfiAccount;
|
37
|
-
}, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, livePositionUpdates?: LivePositionUpdates): Promise<
|
37
|
+
}, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, livePositionUpdates?: LivePositionUpdates): Promise<{
|
38
|
+
supplyBank: Bank | null;
|
39
|
+
debtBank: Bank | null;
|
40
|
+
state: PositionState;
|
41
|
+
} | undefined>;
|
38
42
|
export declare function calculateAnnualAPYs(bank: Bank): [number, number];
|
39
43
|
export declare function getUpToDateShareValues(bank: Bank): [number, number];
|
40
44
|
export declare function marginfiAccountEmpty(marginfiAccount: MarginfiAccount): boolean;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4C3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4C3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CAmEA;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,kBAAkB,EAAE,OAAO,UAe5B;AAsDD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,KAAK,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC;AAEhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,eAAe,EAAE;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1D,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CACN;IAAE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACxE,SAAS,CACZ,CA8LA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,eAAe,WASpE"}
|
@@ -99,9 +99,9 @@ async function getAllMarginfiAccountsByAuthority(umi, authority, group, compatib
|
|
99
99
|
if (compatibleWithSolauto) {
|
100
100
|
const positionStates = await Promise.all(marginfiAccounts.map(async (x) => ({
|
101
101
|
publicKey: x.publicKey,
|
102
|
-
state: await getMarginfiAccountPositionState(umi, {
|
102
|
+
state: (await getMarginfiAccountPositionState(umi, {
|
103
103
|
pk: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey),
|
104
|
-
}),
|
104
|
+
}))?.state,
|
105
105
|
})));
|
106
106
|
return positionStates
|
107
107
|
.sort((a, b) => (0, numberUtils_1.fromBaseUnit)(b.state?.netWorth.baseAmountUsdValue ?? BigInt(0), generalAccounts_1.USD_DECIMALS) -
|
@@ -119,21 +119,21 @@ async function getAllMarginfiAccountsByAuthority(umi, authority, group, compatib
|
|
119
119
|
}));
|
120
120
|
}
|
121
121
|
}
|
122
|
-
function getBankLiquidityAvailableBaseUnit(bank,
|
122
|
+
function getBankLiquidityAvailableBaseUnit(bank, availableToDeposit) {
|
123
123
|
let amountCanBeUsed = 0;
|
124
124
|
if (bank !== null) {
|
125
125
|
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
126
126
|
const totalDeposited = (0, numberUtils_1.bytesToI80F48)(bank.totalAssetShares.value) * assetShareValue;
|
127
|
-
amountCanBeUsed =
|
127
|
+
amountCanBeUsed = availableToDeposit
|
128
128
|
? Number(bank.config.depositLimit) - totalDeposited
|
129
129
|
: totalDeposited -
|
130
130
|
(0, numberUtils_1.bytesToI80F48)(bank.totalLiabilityShares.value) * liabilityShareValue;
|
131
131
|
}
|
132
|
-
return amountCanBeUsed;
|
132
|
+
return BigInt(Math.round(amountCanBeUsed));
|
133
133
|
}
|
134
134
|
async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment) {
|
135
135
|
let amountUsed = 0;
|
136
|
-
let amountCanBeUsed = 0;
|
136
|
+
let amountCanBeUsed = BigInt(0);
|
137
137
|
let marketPrice = 0;
|
138
138
|
if (bank !== null) {
|
139
139
|
[marketPrice] = await (0, priceUtils_1.fetchTokenPrices)([(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.mint)]);
|
@@ -153,9 +153,9 @@ async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment) {
|
|
153
153
|
: BigInt(0),
|
154
154
|
},
|
155
155
|
amountCanBeUsed: {
|
156
|
-
baseUnit:
|
156
|
+
baseUnit: amountCanBeUsed,
|
157
157
|
baseAmountUsdValue: bank
|
158
|
-
? (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(
|
158
|
+
? (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(amountCanBeUsed, bank.mintDecimals) * marketPrice, generalAccounts_1.USD_DECIMALS)
|
159
159
|
: BigInt(0),
|
160
160
|
},
|
161
161
|
baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(marketPrice, generalAccounts_1.USD_DECIMALS),
|
@@ -253,22 +253,24 @@ async function getMarginfiAccountPositionState(umi, protocolAccount, marginfiGro
|
|
253
253
|
}, supplyPrice);
|
254
254
|
const supplyUsd = (0, numberUtils_1.fromBaseUnit)(supplyUsage.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
255
255
|
const debtUsd = (0, numberUtils_1.fromBaseUnit)(debtUsage?.amountUsed?.baseAmountUsdValue ?? BigInt(0), generalAccounts_1.USD_DECIMALS);
|
256
|
-
console.log("Asset weight init", (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightInit.value));
|
257
|
-
console.log("Liability weight init", (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightInit.value));
|
258
256
|
return {
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
257
|
+
supplyBank,
|
258
|
+
debtBank,
|
259
|
+
state: {
|
260
|
+
liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, (0, numberUtils_1.toBps)(liqThreshold)),
|
261
|
+
netWorth: {
|
262
|
+
baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, generalAccounts_1.USD_DECIMALS),
|
263
|
+
baseUnit: (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supplyPrice, supplyUsage.decimals),
|
264
|
+
},
|
265
|
+
supply: supplyUsage,
|
266
|
+
debt: debtUsage,
|
267
|
+
maxLtvBps: (0, numberUtils_1.toBps)(maxLtv),
|
268
|
+
liqThresholdBps: (0, numberUtils_1.toBps)(liqThreshold),
|
269
|
+
lastUpdated: BigInt((0, generalUtils_1.currentUnixSeconds)()),
|
270
|
+
padding1: [],
|
271
|
+
padding2: [],
|
272
|
+
padding: [],
|
263
273
|
},
|
264
|
-
supply: supplyUsage,
|
265
|
-
debt: debtUsage,
|
266
|
-
maxLtvBps: (0, numberUtils_1.toBps)(maxLtv),
|
267
|
-
liqThresholdBps: (0, numberUtils_1.toBps)(liqThreshold),
|
268
|
-
lastUpdated: BigInt((0, generalUtils_1.currentUnixSeconds)()),
|
269
|
-
padding1: [],
|
270
|
-
padding2: [],
|
271
|
-
padding: [],
|
272
274
|
};
|
273
275
|
}
|
274
276
|
function marginfiInterestRateCurve(bank, utilizationRatio) {
|
@@ -13,7 +13,6 @@ export interface RebalanceValues {
|
|
13
13
|
rebalanceAction: RebalanceAction;
|
14
14
|
rebalanceDirection: RebalanceDirection;
|
15
15
|
feesUsd: number;
|
16
|
-
targetRateBps: number;
|
17
16
|
}
|
18
17
|
export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): RebalanceValues;
|
19
18
|
export declare function rebalanceRequiresFlashLoan(client: SolautoClient, values: RebalanceValues): {
|
@@ -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;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,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;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoI9C,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAwDjB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe;;;EAqDxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAmC9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA2DhB"}
|
@@ -4,7 +4,6 @@ exports.getRebalanceValues = getRebalanceValues;
|
|
4
4
|
exports.rebalanceRequiresFlashLoan = rebalanceRequiresFlashLoan;
|
5
5
|
exports.getFlashLoanDetails = getFlashLoanDetails;
|
6
6
|
exports.getJupSwapRebalanceDetails = getJupSwapRebalanceDetails;
|
7
|
-
const web3_js_1 = require("@solana/web3.js");
|
8
7
|
const generated_1 = require("../../generated");
|
9
8
|
const generalUtils_1 = require("./generalUtils");
|
10
9
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
@@ -12,7 +11,6 @@ const generalUtils_2 = require("../generalUtils");
|
|
12
11
|
const numberUtils_1 = require("../numberUtils");
|
13
12
|
const generalAccounts_1 = require("../../constants/generalAccounts");
|
14
13
|
const priceUtils_1 = require("../priceUtils");
|
15
|
-
const constants_1 = require("../../constants");
|
16
14
|
function getAdditionalAmountToDcaIn(dca) {
|
17
15
|
if (dca.dcaInBaseUnit === BigInt(0)) {
|
18
16
|
return 0;
|
@@ -84,15 +82,7 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
|
|
84
82
|
}
|
85
83
|
}
|
86
84
|
function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
|
87
|
-
|
88
|
-
// REVERT ME AND GET TO THE ROOT OF THIS ISSUE
|
89
|
-
if ((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.supply.mint).equals(new web3_js_1.PublicKey(constants_1.JUP)) &&
|
90
|
-
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.debt.mint).equals(new web3_js_1.PublicKey(constants_1.USDC)) &&
|
91
|
-
settings &&
|
92
|
-
settings.boostToBps === (0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps) &&
|
93
|
-
targetRateBps === settings.boostToBps) {
|
94
|
-
targetRateBps = 6500;
|
95
|
-
}
|
85
|
+
const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
|
96
86
|
const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
|
97
87
|
(dca?.tokenType === generated_1.TokenType.Debt ? debtPrice : supplyPrice);
|
98
88
|
const rebalanceDirection = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps <= targetRateBps
|
@@ -103,7 +93,6 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
103
93
|
amountUsdToDcaIn;
|
104
94
|
const debtUsd = (0, numberUtils_1.fromBaseUnit)(state.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
105
95
|
let debtAdjustmentUsd = (0, numberUtils_1.getDebtAdjustmentUsd)(state.liqThresholdBps, supplyUsd, debtUsd, targetRateBps, adjustmentFeeBps);
|
106
|
-
(0, generalUtils_2.consoleLog)("Target rate:", targetRateBps, (0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps));
|
107
96
|
const maxRepayTo = (0, numberUtils_1.maxRepayToBps)(state.maxLtvBps, state.liqThresholdBps);
|
108
97
|
return {
|
109
98
|
debtAdjustmentUsd,
|
@@ -118,7 +107,6 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
118
107
|
: "repay",
|
119
108
|
rebalanceDirection,
|
120
109
|
feesUsd: Math.abs(debtAdjustmentUsd * (0, numberUtils_1.fromBps)(adjustmentFeeBps)),
|
121
|
-
targetRateBps
|
122
110
|
};
|
123
111
|
}
|
124
112
|
function rebalanceRequiresFlashLoan(client, values) {
|
@@ -137,11 +125,12 @@ function rebalanceRequiresFlashLoan(client, values) {
|
|
137
125
|
const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
|
138
126
|
const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.02);
|
139
127
|
const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
128
|
+
const useDebtLiquidity = Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
129
|
+
(0, numberUtils_1.fromBaseUnit)(client.supplyLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
|
130
|
+
((0, priceUtils_1.safeGetPrice)(client.supplyMint) ?? 0);
|
140
131
|
(0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
|
132
|
+
(0, generalUtils_2.consoleLog)("Use debt liquidity:", useDebtLiquidity);
|
141
133
|
(0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
|
142
|
-
const useDebtLiquidity = Math.abs(values.debtAdjustmentUsd) * 1.1 <=
|
143
|
-
(0, numberUtils_1.fromBaseUnit)(client.solautoPositionState?.debt.amountCanBeUsed.baseAmountUsdValue ??
|
144
|
-
BigInt(0), generalAccounts_1.USD_DECIMALS);
|
145
134
|
return { requiresFlashLoan, useDebtLiquidity };
|
146
135
|
}
|
147
136
|
function getFlashLoanDetails(client, values, jupQuote) {
|
@@ -194,7 +183,6 @@ function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps,
|
|
194
183
|
values.repayingCloseToMaxLtv ||
|
195
184
|
flashLoanRepayFromDebt;
|
196
185
|
const exactIn = !exactOut;
|
197
|
-
// const addPadding = targetLiqUtilizationRateBps === 0;
|
198
186
|
const addPadding = exactOut;
|
199
187
|
return {
|
200
188
|
inputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(input.mint),
|
@@ -204,8 +192,8 @@ function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps,
|
|
204
192
|
: client.solautoPosition,
|
205
193
|
slippageIncFactor: 0.2 + (attemptNum ?? 0) * 0.25,
|
206
194
|
amount: exactOut ? outputAmount : inputAmount,
|
207
|
-
exactIn
|
208
|
-
exactOut
|
195
|
+
exactIn,
|
196
|
+
exactOut,
|
209
197
|
addPadding,
|
210
198
|
};
|
211
199
|
}
|
package/local/logPositions.ts
CHANGED
@@ -188,6 +188,8 @@ async function main(filterWhitelist: boolean) {
|
|
188
188
|
|
189
189
|
const latestStates: PositionState[] = [];
|
190
190
|
let unhealthyPositions = 0;
|
191
|
+
let awaitingBoostPositions = 0;
|
192
|
+
|
191
193
|
for (const pos of solautoPositionsData) {
|
192
194
|
const latestState = await positionStateWithLatestPrices(
|
193
195
|
pos.state,
|
@@ -201,21 +203,42 @@ async function main(filterWhitelist: boolean) {
|
|
201
203
|
toWeb3JsPublicKey(pos.state.debt.mint)
|
202
204
|
);
|
203
205
|
|
204
|
-
const repayFrom =
|
206
|
+
const repayFrom =
|
207
|
+
pos.position.settingParams.repayToBps +
|
208
|
+
pos.position.settingParams.repayGap;
|
205
209
|
const unhealthy = latestState.liqUtilizationRateBps > repayFrom;
|
206
|
-
const healthText = unhealthy
|
210
|
+
const healthText = unhealthy
|
211
|
+
? `(Unhealthy: ${latestState.liqUtilizationRateBps - repayFrom}bps)`
|
212
|
+
: "";
|
207
213
|
if (unhealthy) {
|
208
214
|
unhealthyPositions += 1;
|
209
215
|
}
|
210
216
|
|
211
|
-
|
217
|
+
const awaitingBoost =
|
218
|
+
latestState.liqUtilizationRateBps <
|
219
|
+
pos.position.settingParams.boostToBps -
|
220
|
+
pos.position.settingParams.boostGap;
|
221
|
+
const boostText = awaitingBoost ? " (awaiting boost)" : "";
|
222
|
+
if (awaitingBoost) {
|
223
|
+
awaitingBoostPositions += 1;
|
224
|
+
}
|
225
|
+
|
212
226
|
console.log(
|
213
|
-
|
227
|
+
pos.publicKey.toString(),
|
228
|
+
`(${pos.authority.toString()} ${pos.positionId})`
|
229
|
+
);
|
230
|
+
console.log(
|
231
|
+
`${strategy}: $${formatNumber(fromBaseUnit(latestState.netWorth.baseAmountUsdValue, USD_DECIMALS), 2, 10000, 2)} ${healthText} ${boostText}`
|
214
232
|
);
|
215
233
|
// console.log(latestState.liqUtilizationRateBps, repayFrom);
|
216
234
|
}
|
217
235
|
|
218
|
-
console.log(
|
236
|
+
console.log(
|
237
|
+
"\nTotal positions:",
|
238
|
+
solautoPositionsData.length,
|
239
|
+
unhealthyPositions ? ` (unhealthy: ${unhealthyPositions})` : "",
|
240
|
+
awaitingBoostPositions ? ` (awaiting boost: ${awaitingBoostPositions})` : ""
|
241
|
+
);
|
219
242
|
console.log(
|
220
243
|
"Total users:",
|
221
244
|
Array.from(new Set(solautoPositionsData.map((x) => x.authority.toString())))
|
@@ -229,4 +252,4 @@ async function main(filterWhitelist: boolean) {
|
|
229
252
|
}
|
230
253
|
|
231
254
|
const filterWhitelist = true;
|
232
|
-
main(filterWhitelist).then((x) => x);
|
255
|
+
main(filterWhitelist).then((x) => x);
|
package/package.json
CHANGED
@@ -50,15 +50,22 @@ export class ReferralStateManager extends TxHandler {
|
|
50
50
|
: walletAdapterIdentity(args.wallet!, true)
|
51
51
|
);
|
52
52
|
this.signer = this.umi.identity;
|
53
|
-
this.authority = args.authority ?? toWeb3JsPublicKey(this.signer.publicKey);
|
54
53
|
|
55
|
-
this.referralState =
|
54
|
+
this.referralState =
|
55
|
+
args.referralState ??
|
56
|
+
getReferralState(
|
57
|
+
args.authority ?? toWeb3JsPublicKey(this.signer.publicKey),
|
58
|
+
this.programId
|
59
|
+
);
|
56
60
|
|
57
61
|
this.referralStateData = await safeFetchReferralState(
|
58
62
|
this.umi,
|
59
63
|
publicKey(this.referralState),
|
60
64
|
{ commitment: "confirmed" }
|
61
65
|
);
|
66
|
+
this.authority = this.referralStateData?.authority
|
67
|
+
? toWeb3JsPublicKey(this.referralStateData.authority)
|
68
|
+
: (args.authority ?? toWeb3JsPublicKey(this.signer.publicKey));
|
62
69
|
|
63
70
|
this.setReferredBy(args.referredByAuthority);
|
64
71
|
|
@@ -55,6 +55,7 @@ import {
|
|
55
55
|
import {
|
56
56
|
findMarginfiAccounts,
|
57
57
|
getAllMarginfiAccountsByAuthority,
|
58
|
+
getBankLiquidityAvailableBaseUnit,
|
58
59
|
getMarginfiAccountPositionState,
|
59
60
|
getMarginfiMaxLtvAndLiqThreshold,
|
60
61
|
marginfiAccountEmpty,
|
@@ -90,6 +91,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
90
91
|
public intermediaryMarginfiAccountPk!: PublicKey;
|
91
92
|
public intermediaryMarginfiAccount?: MarginfiAccount;
|
92
93
|
|
94
|
+
private supplyBank: Bank | null = null;
|
95
|
+
private debtBank: Bank | null = null;
|
96
|
+
|
93
97
|
async initialize(args: SolautoMarginfiClientArgs) {
|
94
98
|
await super.initialize(args);
|
95
99
|
|
@@ -694,7 +698,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
694
698
|
(this.solautoPositionData === null ||
|
695
699
|
!toWeb3JsPublicKey(this.signer.publicKey).equals(this.authority));
|
696
700
|
|
697
|
-
const
|
701
|
+
const resp = await getMarginfiAccountPositionState(
|
698
702
|
this.umi,
|
699
703
|
{ pk: this.marginfiAccountPk },
|
700
704
|
this.marginfiGroup,
|
@@ -703,7 +707,11 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
703
707
|
this.livePositionUpdates
|
704
708
|
);
|
705
709
|
|
706
|
-
if (
|
710
|
+
if (resp) {
|
711
|
+
this.supplyBank = resp?.supplyBank;
|
712
|
+
this.debtBank = resp?.debtBank;
|
713
|
+
const freshState = resp.state;
|
714
|
+
|
707
715
|
this.log("Fresh state", freshState);
|
708
716
|
const supplyPrice = safeGetPrice(freshState?.supply.mint)!;
|
709
717
|
const debtPrice = safeGetPrice(freshState?.debt.mint)!;
|
@@ -727,6 +735,14 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
727
735
|
);
|
728
736
|
}
|
729
737
|
|
730
|
-
return
|
738
|
+
return resp?.state;
|
739
|
+
}
|
740
|
+
|
741
|
+
supplyLiquidityAvailable(): bigint {
|
742
|
+
return getBankLiquidityAvailableBaseUnit(this.supplyBank, false);
|
743
|
+
}
|
744
|
+
|
745
|
+
debtLiquidityAvailable(): bigint {
|
746
|
+
return getBankLiquidityAvailableBaseUnit(this.debtBank, false);
|
731
747
|
}
|
732
748
|
}
|
@@ -19,7 +19,6 @@ import {
|
|
19
19
|
RebalanceDirection,
|
20
20
|
SolautoAction,
|
21
21
|
SolautoRebalanceType,
|
22
|
-
SolautoSettingsParameters,
|
23
22
|
TokenType,
|
24
23
|
convertReferralFees,
|
25
24
|
createSolautoProgram,
|
@@ -40,7 +39,6 @@ import {
|
|
40
39
|
getFlashLoanDetails,
|
41
40
|
getJupSwapRebalanceDetails,
|
42
41
|
getRebalanceValues,
|
43
|
-
RebalanceValues,
|
44
42
|
} from "../utils/solauto/rebalanceUtils";
|
45
43
|
import {
|
46
44
|
consoleLog,
|
@@ -51,7 +49,6 @@ import {
|
|
51
49
|
import { SolautoMarginfiClient } from "../clients/solautoMarginfiClient";
|
52
50
|
import {
|
53
51
|
getMaxLiqUtilizationRateBps,
|
54
|
-
maxBoostToBps,
|
55
52
|
uint8ArrayToBigInt,
|
56
53
|
} from "../utils/numberUtils";
|
57
54
|
import {
|
@@ -74,11 +71,10 @@ import {
|
|
74
71
|
getJupiterErrorFromCode,
|
75
72
|
JUPITER_PROGRAM_ID,
|
76
73
|
} from "../jupiter-sdk";
|
77
|
-
import {
|
74
|
+
import { PRICES } from "../constants";
|
78
75
|
import { TransactionItemInputs } from "../types";
|
79
76
|
import { safeGetPrice } from "../utils";
|
80
77
|
import { BundleSimulationError } from "../types/transactions";
|
81
|
-
import { getPackedSettings } from "http2";
|
82
78
|
|
83
79
|
interface wSolTokenUsage {
|
84
80
|
wSolTokenAccount: PublicKey;
|
@@ -602,20 +598,7 @@ export async function getTransactionChores(
|
|
602
598
|
return [choresBefore, choresAfter];
|
603
599
|
}
|
604
600
|
|
605
|
-
export async function requiresRefreshBeforeRebalance(client: SolautoClient
|
606
|
-
// REMOVE ME
|
607
|
-
const state = client.solautoPositionState!;
|
608
|
-
const settings = client.solautoPositionSettings();
|
609
|
-
if (
|
610
|
-
toWeb3JsPublicKey(state.supply.mint).equals(new PublicKey(JUP)) &&
|
611
|
-
toWeb3JsPublicKey(state.debt.mint).equals(new PublicKey(USDC)) &&
|
612
|
-
settings &&
|
613
|
-
settings.boostToBps ===
|
614
|
-
maxBoostToBps(state.maxLtvBps, state.liqThresholdBps) && values.targetRateBps === 6500
|
615
|
-
) {
|
616
|
-
return true;
|
617
|
-
}
|
618
|
-
|
601
|
+
export async function requiresRefreshBeforeRebalance(client: SolautoClient) {
|
619
602
|
const neverRefreshedBefore =
|
620
603
|
client.solautoPositionData &&
|
621
604
|
client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
|
@@ -724,8 +707,7 @@ export async function buildSolautoRebalanceTransaction(
|
|
724
707
|
|
725
708
|
let tx = transactionBuilder();
|
726
709
|
|
727
|
-
|
728
|
-
if (await requiresRefreshBeforeRebalance(client, values)) {
|
710
|
+
if (await requiresRefreshBeforeRebalance(client)) {
|
729
711
|
tx = tx.add(client.refresh());
|
730
712
|
}
|
731
713
|
|
@@ -646,6 +646,10 @@ export class TransactionsManager {
|
|
646
646
|
);
|
647
647
|
|
648
648
|
const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`;
|
649
|
+
const errorInfo =
|
650
|
+
errorDetails.errorName || errorDetails.errorInfo
|
651
|
+
? errorString
|
652
|
+
: e.message;
|
649
653
|
this.updateStatusForSets(
|
650
654
|
itemSets,
|
651
655
|
errorDetails.canBeIgnored
|
@@ -654,13 +658,11 @@ export class TransactionsManager {
|
|
654
658
|
num,
|
655
659
|
undefined,
|
656
660
|
undefined,
|
657
|
-
|
658
|
-
? errorString
|
659
|
-
: e.message
|
661
|
+
errorInfo
|
660
662
|
);
|
661
663
|
|
662
664
|
if (!errorDetails.canBeIgnored) {
|
663
|
-
throw
|
665
|
+
throw new Error(errorInfo);
|
664
666
|
}
|
665
667
|
});
|
666
668
|
}
|
@@ -793,6 +795,10 @@ export class TransactionsManager {
|
|
793
795
|
);
|
794
796
|
|
795
797
|
const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`;
|
798
|
+
const errorInfo =
|
799
|
+
errorDetails.errorName || errorDetails.errorInfo
|
800
|
+
? errorString
|
801
|
+
: e.message;
|
796
802
|
this.updateStatus(
|
797
803
|
txName,
|
798
804
|
errorDetails.canBeIgnored
|
@@ -801,13 +807,11 @@ export class TransactionsManager {
|
|
801
807
|
attemptNum,
|
802
808
|
undefined,
|
803
809
|
undefined,
|
804
|
-
|
805
|
-
? errorString
|
806
|
-
: e.message
|
810
|
+
errorInfo
|
807
811
|
);
|
808
812
|
|
809
813
|
if (!errorDetails.canBeIgnored) {
|
810
|
-
throw
|
814
|
+
throw new Error(errorInfo);
|
811
815
|
}
|
812
816
|
}
|
813
817
|
}
|
@@ -185,9 +185,11 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
185
185
|
const positionStates = await Promise.all(
|
186
186
|
marginfiAccounts.map(async (x) => ({
|
187
187
|
publicKey: x.publicKey,
|
188
|
-
state:
|
189
|
-
|
190
|
-
|
188
|
+
state: (
|
189
|
+
await getMarginfiAccountPositionState(umi, {
|
190
|
+
pk: toWeb3JsPublicKey(x.publicKey),
|
191
|
+
})
|
192
|
+
)?.state,
|
191
193
|
}))
|
192
194
|
);
|
193
195
|
return positionStates
|
@@ -217,7 +219,7 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
217
219
|
|
218
220
|
export function getBankLiquidityAvailableBaseUnit(
|
219
221
|
bank: Bank | null,
|
220
|
-
|
222
|
+
availableToDeposit: boolean
|
221
223
|
) {
|
222
224
|
let amountCanBeUsed = 0;
|
223
225
|
|
@@ -225,13 +227,13 @@ export function getBankLiquidityAvailableBaseUnit(
|
|
225
227
|
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
226
228
|
const totalDeposited =
|
227
229
|
bytesToI80F48(bank.totalAssetShares.value) * assetShareValue;
|
228
|
-
amountCanBeUsed =
|
230
|
+
amountCanBeUsed = availableToDeposit
|
229
231
|
? Number(bank.config.depositLimit) - totalDeposited
|
230
232
|
: totalDeposited -
|
231
233
|
bytesToI80F48(bank.totalLiabilityShares.value) * liabilityShareValue;
|
232
234
|
}
|
233
235
|
|
234
|
-
return amountCanBeUsed;
|
236
|
+
return BigInt(Math.round(amountCanBeUsed));
|
235
237
|
}
|
236
238
|
|
237
239
|
async function getTokenUsage(
|
@@ -241,7 +243,7 @@ async function getTokenUsage(
|
|
241
243
|
amountUsedAdjustment?: bigint
|
242
244
|
): Promise<PositionTokenUsage> {
|
243
245
|
let amountUsed = 0;
|
244
|
-
let amountCanBeUsed = 0;
|
246
|
+
let amountCanBeUsed = BigInt(0);
|
245
247
|
let marketPrice = 0;
|
246
248
|
|
247
249
|
if (bank !== null) {
|
@@ -266,11 +268,11 @@ async function getTokenUsage(
|
|
266
268
|
: BigInt(0),
|
267
269
|
},
|
268
270
|
amountCanBeUsed: {
|
269
|
-
baseUnit:
|
271
|
+
baseUnit: amountCanBeUsed,
|
270
272
|
baseAmountUsdValue: bank
|
271
273
|
? toBaseUnit(
|
272
274
|
fromBaseUnit(
|
273
|
-
|
275
|
+
amountCanBeUsed,
|
274
276
|
bank.mintDecimals
|
275
277
|
) * marketPrice,
|
276
278
|
USD_DECIMALS
|
@@ -300,7 +302,10 @@ export async function getMarginfiAccountPositionState(
|
|
300
302
|
supply?: BankSelection,
|
301
303
|
debt?: BankSelection,
|
302
304
|
livePositionUpdates?: LivePositionUpdates
|
303
|
-
): Promise<
|
305
|
+
): Promise<
|
306
|
+
| { supplyBank: Bank | null; debtBank: Bank | null; state: PositionState }
|
307
|
+
| undefined
|
308
|
+
> {
|
304
309
|
let marginfiAccount =
|
305
310
|
protocolAccount.data ??
|
306
311
|
(await safeFetchMarginfiAccount(umi, publicKey(protocolAccount.pk), {
|
@@ -464,30 +469,31 @@ export async function getMarginfiAccountPositionState(
|
|
464
469
|
USD_DECIMALS
|
465
470
|
);
|
466
471
|
|
467
|
-
console.log("Asset weight init", bytesToI80F48(supplyBank.config.assetWeightInit.value));
|
468
|
-
console.log("Liability weight init", bytesToI80F48(debtBank.config.liabilityWeightInit.value));
|
469
|
-
|
470
472
|
return {
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
baseUnit: toBaseUnit(
|
479
|
-
(supplyUsd - debtUsd) / supplyPrice,
|
480
|
-
supplyUsage!.decimals
|
473
|
+
supplyBank,
|
474
|
+
debtBank,
|
475
|
+
state: {
|
476
|
+
liqUtilizationRateBps: getLiqUtilzationRateBps(
|
477
|
+
supplyUsd,
|
478
|
+
debtUsd,
|
479
|
+
toBps(liqThreshold)
|
481
480
|
),
|
481
|
+
netWorth: {
|
482
|
+
baseAmountUsdValue: toBaseUnit(supplyUsd - debtUsd, USD_DECIMALS),
|
483
|
+
baseUnit: toBaseUnit(
|
484
|
+
(supplyUsd - debtUsd) / supplyPrice,
|
485
|
+
supplyUsage!.decimals
|
486
|
+
),
|
487
|
+
},
|
488
|
+
supply: supplyUsage!,
|
489
|
+
debt: debtUsage!,
|
490
|
+
maxLtvBps: toBps(maxLtv),
|
491
|
+
liqThresholdBps: toBps(liqThreshold),
|
492
|
+
lastUpdated: BigInt(currentUnixSeconds()),
|
493
|
+
padding1: [],
|
494
|
+
padding2: [],
|
495
|
+
padding: [],
|
482
496
|
},
|
483
|
-
supply: supplyUsage!,
|
484
|
-
debt: debtUsage!,
|
485
|
-
maxLtvBps: toBps(maxLtv),
|
486
|
-
liqThresholdBps: toBps(liqThreshold),
|
487
|
-
lastUpdated: BigInt(currentUnixSeconds()),
|
488
|
-
padding1: [],
|
489
|
-
padding2: [],
|
490
|
-
padding: [],
|
491
497
|
};
|
492
498
|
}
|
493
499
|
|
@@ -24,14 +24,13 @@ import {
|
|
24
24
|
getLiqUtilzationRateBps,
|
25
25
|
getMaxLiqUtilizationRateBps,
|
26
26
|
getSolautoFeesBps,
|
27
|
-
maxBoostToBps,
|
28
27
|
maxRepayToBps,
|
29
28
|
toBaseUnit,
|
30
29
|
} from "../numberUtils";
|
31
30
|
import { USD_DECIMALS } from "../../constants/generalAccounts";
|
32
31
|
import { RebalanceAction } from "../../types";
|
33
32
|
import { safeGetPrice } from "../priceUtils";
|
34
|
-
import {
|
33
|
+
import { TOKEN_INFO } from "../../constants";
|
35
34
|
|
36
35
|
function getAdditionalAmountToDcaIn(dca: DCASettings): number {
|
37
36
|
if (dca.dcaInBaseUnit === BigInt(0)) {
|
@@ -170,7 +169,6 @@ export interface RebalanceValues {
|
|
170
169
|
rebalanceAction: RebalanceAction;
|
171
170
|
rebalanceDirection: RebalanceDirection;
|
172
171
|
feesUsd: number;
|
173
|
-
targetRateBps: number;
|
174
172
|
}
|
175
173
|
|
176
174
|
export function getRebalanceValues(
|
@@ -182,7 +180,7 @@ export function getRebalanceValues(
|
|
182
180
|
debtPrice: number,
|
183
181
|
targetLiqUtilizationRateBps?: number
|
184
182
|
): RebalanceValues {
|
185
|
-
|
183
|
+
const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
|
186
184
|
state,
|
187
185
|
settings,
|
188
186
|
dca,
|
@@ -190,17 +188,6 @@ export function getRebalanceValues(
|
|
190
188
|
targetLiqUtilizationRateBps
|
191
189
|
);
|
192
190
|
|
193
|
-
// REVERT ME AND GET TO THE ROOT OF THIS ISSUE
|
194
|
-
if (
|
195
|
-
toWeb3JsPublicKey(state.supply.mint).equals(new PublicKey(JUP)) &&
|
196
|
-
toWeb3JsPublicKey(state.debt.mint).equals(new PublicKey(USDC)) &&
|
197
|
-
settings &&
|
198
|
-
settings.boostToBps === maxBoostToBps(state.maxLtvBps, state.liqThresholdBps) &&
|
199
|
-
targetRateBps === settings.boostToBps
|
200
|
-
) {
|
201
|
-
targetRateBps = 6500;
|
202
|
-
}
|
203
|
-
|
204
191
|
const amountUsdToDcaIn =
|
205
192
|
fromBaseUnit(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
|
206
193
|
(dca?.tokenType === TokenType.Debt ? debtPrice : supplyPrice);
|
@@ -231,7 +218,6 @@ export function getRebalanceValues(
|
|
231
218
|
adjustmentFeeBps
|
232
219
|
);
|
233
220
|
|
234
|
-
consoleLog("Target rate:", targetRateBps, maxBoostToBps(state.maxLtvBps, state.liqThresholdBps));
|
235
221
|
const maxRepayTo = maxRepayToBps(state.maxLtvBps, state.liqThresholdBps);
|
236
222
|
return {
|
237
223
|
debtAdjustmentUsd,
|
@@ -248,7 +234,6 @@ export function getRebalanceValues(
|
|
248
234
|
: "repay",
|
249
235
|
rebalanceDirection,
|
250
236
|
feesUsd: Math.abs(debtAdjustmentUsd * fromBps(adjustmentFeeBps)),
|
251
|
-
targetRateBps
|
252
237
|
};
|
253
238
|
}
|
254
239
|
|
@@ -290,7 +275,13 @@ export function rebalanceRequiresFlashLoan(
|
|
290
275
|
const requiresFlashLoan =
|
291
276
|
supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
292
277
|
|
278
|
+
const useDebtLiquidity =
|
279
|
+
Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
280
|
+
fromBaseUnit(client.supplyLiquidityAvailable(), USD_DECIMALS) *
|
281
|
+
(safeGetPrice(client.supplyMint) ?? 0);
|
282
|
+
|
293
283
|
consoleLog("Requires flash loan:", requiresFlashLoan);
|
284
|
+
consoleLog("Use debt liquidity:", useDebtLiquidity);
|
294
285
|
consoleLog(
|
295
286
|
"Intermediary liq utilization rate:",
|
296
287
|
tempLiqUtilizationRateBps,
|
@@ -300,13 +291,6 @@ export function rebalanceRequiresFlashLoan(
|
|
300
291
|
maxLiqUtilizationRateBps
|
301
292
|
);
|
302
293
|
|
303
|
-
const useDebtLiquidity =
|
304
|
-
Math.abs(values.debtAdjustmentUsd) * 1.1 <=
|
305
|
-
fromBaseUnit(
|
306
|
-
client.solautoPositionState?.debt.amountCanBeUsed.baseAmountUsdValue ??
|
307
|
-
BigInt(0),
|
308
|
-
USD_DECIMALS
|
309
|
-
);
|
310
294
|
return { requiresFlashLoan, useDebtLiquidity };
|
311
295
|
}
|
312
296
|
|
@@ -407,7 +391,6 @@ export function getJupSwapRebalanceDetails(
|
|
407
391
|
flashLoanRepayFromDebt;
|
408
392
|
const exactIn = !exactOut;
|
409
393
|
|
410
|
-
// const addPadding = targetLiqUtilizationRateBps === 0;
|
411
394
|
const addPadding = exactOut;
|
412
395
|
|
413
396
|
return {
|
@@ -418,8 +401,8 @@ export function getJupSwapRebalanceDetails(
|
|
418
401
|
: client.solautoPosition,
|
419
402
|
slippageIncFactor: 0.2 + (attemptNum ?? 0) * 0.25,
|
420
403
|
amount: exactOut ? outputAmount : inputAmount,
|
421
|
-
exactIn
|
422
|
-
exactOut
|
404
|
+
exactIn,
|
405
|
+
exactOut,
|
423
406
|
addPadding,
|
424
407
|
};
|
425
408
|
}
|
@@ -1,5 +1,9 @@
|
|
1
1
|
import { describe, it } from "mocha";
|
2
|
-
import {
|
2
|
+
import {
|
3
|
+
none,
|
4
|
+
publicKey,
|
5
|
+
some,
|
6
|
+
} from "@metaplex-foundation/umi";
|
3
7
|
import { setupTest } from "../shared";
|
4
8
|
import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
|
5
9
|
import {
|
@@ -25,16 +29,19 @@ import {
|
|
25
29
|
SOLAUTO_TEST_PROGRAM,
|
26
30
|
USDC,
|
27
31
|
} from "../../src/constants";
|
28
|
-
import {
|
32
|
+
import {
|
33
|
+
buildHeliusApiUrl,
|
34
|
+
getSolautoManagedPositions,
|
35
|
+
} from "../../src/utils";
|
29
36
|
import { PriorityFeeSetting } from "../../src/types";
|
30
|
-
import { buildIronforgeApiUrl
|
37
|
+
import { buildIronforgeApiUrl } from "../../dist";
|
31
38
|
|
32
39
|
describe("Solauto Marginfi tests", async () => {
|
33
40
|
// const signer = setupTest();
|
34
41
|
const signer = setupTest("solauto-manager");
|
35
42
|
|
36
|
-
const payForTransactions =
|
37
|
-
const testProgram =
|
43
|
+
const payForTransactions = false;
|
44
|
+
const testProgram = false;
|
38
45
|
const positionId = 1;
|
39
46
|
|
40
47
|
it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
|
@@ -51,7 +58,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
51
58
|
await client.initialize({
|
52
59
|
signer,
|
53
60
|
positionId,
|
54
|
-
authority: new PublicKey("
|
61
|
+
authority: new PublicKey("He4ka5Q3N1UvZikZvykdi47xyk5PoVP2tcQL5sVp31Sz"),
|
55
62
|
// new: true,
|
56
63
|
// marginfiAccount: new PublicKey(
|
57
64
|
// ""
|
@@ -61,7 +68,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
61
68
|
// debtMint: new PublicKey(USDC),
|
62
69
|
});
|
63
70
|
|
64
|
-
// console.log(await client.
|
71
|
+
// console.log(await getSolautoManagedPositions(client.umi));
|
65
72
|
|
66
73
|
const transactionItems: TransactionItem[] = [];
|
67
74
|
// const settingParams: SolautoSettingsParametersInpArgs = {
|
@@ -79,15 +86,6 @@ describe("Solauto Marginfi tests", async () => {
|
|
79
86
|
// targetBoostToBps: none(),
|
80
87
|
// };
|
81
88
|
|
82
|
-
const settingParams: SolautoSettingsParametersInpArgs = {
|
83
|
-
boostToBps: client.solautoPositionSettings().boostToBps - 150,
|
84
|
-
boostGap: 50,
|
85
|
-
repayToBps: client.solautoPositionSettings().repayToBps - 150,
|
86
|
-
repayGap: 50,
|
87
|
-
automation: none(),
|
88
|
-
targetBoostToBps: none(),
|
89
|
-
};
|
90
|
-
|
91
89
|
// if (client.solautoPositionData === null) {
|
92
90
|
// transactionItems.push(
|
93
91
|
// new TransactionItem(async () => {
|
@@ -138,13 +136,6 @@ describe("Solauto Marginfi tests", async () => {
|
|
138
136
|
)
|
139
137
|
);
|
140
138
|
|
141
|
-
// transactionItems.push(
|
142
|
-
// new TransactionItem(
|
143
|
-
// async () => ({ tx: client.refresh() }),
|
144
|
-
// "refresh"
|
145
|
-
// )
|
146
|
-
// );
|
147
|
-
|
148
139
|
// transactionItems.push(
|
149
140
|
// new TransactionItem(
|
150
141
|
// async (attemptNum) =>
|