@haven-fi/solauto-sdk 1.0.456 → 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/utils/marginfiUtils.d.ts +6 -2
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +24 -20
- 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/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/utils/marginfiUtils.ts +37 -28
- package/src/utils/solauto/rebalanceUtils.ts +10 -27
- package/tests/transactions/solautoMarginfi.ts +12 -57
@@ -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) {
|
@@ -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),
|
@@ -254,19 +254,23 @@ async function getMarginfiAccountPositionState(umi, protocolAccount, marginfiGro
|
|
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
256
|
return {
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
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: [],
|
261
273
|
},
|
262
|
-
supply: supplyUsage,
|
263
|
-
debt: debtUsage,
|
264
|
-
maxLtvBps: (0, numberUtils_1.toBps)(maxLtv),
|
265
|
-
liqThresholdBps: (0, numberUtils_1.toBps)(liqThreshold),
|
266
|
-
lastUpdated: BigInt((0, generalUtils_1.currentUnixSeconds)()),
|
267
|
-
padding1: [],
|
268
|
-
padding2: [],
|
269
|
-
padding: [],
|
270
274
|
};
|
271
275
|
}
|
272
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/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
|
|
@@ -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), {
|
@@ -465,26 +470,30 @@ export async function getMarginfiAccountPositionState(
|
|
465
470
|
);
|
466
471
|
|
467
472
|
return {
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
baseUnit: toBaseUnit(
|
476
|
-
(supplyUsd - debtUsd) / supplyPrice,
|
477
|
-
supplyUsage!.decimals
|
473
|
+
supplyBank,
|
474
|
+
debtBank,
|
475
|
+
state: {
|
476
|
+
liqUtilizationRateBps: getLiqUtilzationRateBps(
|
477
|
+
supplyUsd,
|
478
|
+
debtUsd,
|
479
|
+
toBps(liqThreshold)
|
478
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: [],
|
479
496
|
},
|
480
|
-
supply: supplyUsage!,
|
481
|
-
debt: debtUsage!,
|
482
|
-
maxLtvBps: toBps(maxLtv),
|
483
|
-
liqThresholdBps: toBps(liqThreshold),
|
484
|
-
lastUpdated: BigInt(currentUnixSeconds()),
|
485
|
-
padding1: [],
|
486
|
-
padding2: [],
|
487
|
-
padding: [],
|
488
497
|
};
|
489
498
|
}
|
490
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 {
|
@@ -9,9 +13,6 @@ import {
|
|
9
13
|
} from "../../src/generated";
|
10
14
|
import { buildSolautoRebalanceTransaction } from "../../src/transactions/transactionUtils";
|
11
15
|
import {
|
12
|
-
bytesToI80F48,
|
13
|
-
getLiqUtilzationRateBps,
|
14
|
-
getMaxLiqUtilizationRateBps,
|
15
16
|
maxBoostToBps,
|
16
17
|
maxRepayFromBps,
|
17
18
|
maxRepayToBps,
|
@@ -24,39 +25,24 @@ import {
|
|
24
25
|
} from "../../src/transactions/transactionsManager";
|
25
26
|
import { PublicKey } from "@solana/web3.js";
|
26
27
|
import {
|
27
|
-
DEFAULT_MARGINFI_GROUP,
|
28
|
-
MARGINFI_ACCOUNTS,
|
29
28
|
SOLAUTO_PROD_PROGRAM,
|
30
29
|
SOLAUTO_TEST_PROGRAM,
|
31
30
|
USDC,
|
32
|
-
USDT,
|
33
31
|
} from "../../src/constants";
|
34
32
|
import {
|
35
33
|
buildHeliusApiUrl,
|
36
|
-
getMarginfiAccountPositionState,
|
37
34
|
getSolautoManagedPositions,
|
38
|
-
retryWithExponentialBackoff,
|
39
35
|
} from "../../src/utils";
|
40
36
|
import { PriorityFeeSetting } from "../../src/types";
|
41
|
-
import { buildIronforgeApiUrl
|
42
|
-
import { safeFetchBank } from "../../src/marginfi-sdk";
|
43
|
-
|
44
|
-
export function getFlooredTimestampByMinute(
|
45
|
-
unixSeconds: number,
|
46
|
-
intervalInMinutes: number = 1
|
47
|
-
): number {
|
48
|
-
const unixTime = Math.floor(new Date(unixSeconds * 1000).getTime() / 1000);
|
49
|
-
const interval = intervalInMinutes * 60;
|
50
|
-
return Math.floor(unixTime / interval) * interval;
|
51
|
-
}
|
37
|
+
import { buildIronforgeApiUrl } from "../../dist";
|
52
38
|
|
53
39
|
describe("Solauto Marginfi tests", async () => {
|
54
|
-
const signer = setupTest();
|
55
|
-
|
40
|
+
// const signer = setupTest();
|
41
|
+
const signer = setupTest("solauto-manager");
|
56
42
|
|
57
43
|
const payForTransactions = false;
|
58
44
|
const testProgram = false;
|
59
|
-
const positionId =
|
45
|
+
const positionId = 1;
|
60
46
|
|
61
47
|
it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
|
62
48
|
const client = new SolautoMarginfiClient(
|
@@ -72,7 +58,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
72
58
|
await client.initialize({
|
73
59
|
signer,
|
74
60
|
positionId,
|
75
|
-
authority: new PublicKey("
|
61
|
+
authority: new PublicKey("He4ka5Q3N1UvZikZvykdi47xyk5PoVP2tcQL5sVp31Sz"),
|
76
62
|
// new: true,
|
77
63
|
// marginfiAccount: new PublicKey(
|
78
64
|
// ""
|
@@ -82,22 +68,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
82
68
|
// debtMint: new PublicKey(USDC),
|
83
69
|
});
|
84
70
|
|
85
|
-
// console.log(await client.
|
86
|
-
|
87
|
-
// const debtBank = await safeFetchBank(
|
88
|
-
// client.umi,
|
89
|
-
// publicKey(MARGINFI_ACCOUNTS[DEFAULT_MARGINFI_GROUP][USDC].bank)
|
90
|
-
// );
|
91
|
-
// const state = await getMarginfiAccountPositionState(client.umi, {
|
92
|
-
// pk: new PublicKey("85YaXXB1uyDMLYf4ob6jfV1kr29muVNm7mpmM8qjbVq6"),
|
93
|
-
// });
|
94
|
-
// console.log(state);
|
95
|
-
// console.log(maxBoostToBps(state.maxLtvBps, state.liqThresholdBps));
|
96
|
-
// console.log(
|
97
|
-
// getMaxLiqUtilizationRateBps(state.maxLtvBps, state.liqThresholdBps, 0)
|
98
|
-
// );
|
99
|
-
// console.log(getLiqUtilzationRateBps(18.78, 7.47, state.liqThresholdBps));
|
100
|
-
// return;
|
71
|
+
// console.log(await getSolautoManagedPositions(client.umi));
|
101
72
|
|
102
73
|
const transactionItems: TransactionItem[] = [];
|
103
74
|
// const settingParams: SolautoSettingsParametersInpArgs = {
|
@@ -115,15 +86,6 @@ describe("Solauto Marginfi tests", async () => {
|
|
115
86
|
// targetBoostToBps: none(),
|
116
87
|
// };
|
117
88
|
|
118
|
-
const settingParams: SolautoSettingsParametersInpArgs = {
|
119
|
-
boostToBps: client.solautoPositionSettings().boostToBps - 150,
|
120
|
-
boostGap: 50,
|
121
|
-
repayToBps: client.solautoPositionSettings().repayToBps - 150,
|
122
|
-
repayGap: 50,
|
123
|
-
automation: none(),
|
124
|
-
targetBoostToBps: none(),
|
125
|
-
};
|
126
|
-
|
127
89
|
// if (client.solautoPositionData === null) {
|
128
90
|
// transactionItems.push(
|
129
91
|
// new TransactionItem(async () => {
|
@@ -169,18 +131,11 @@ describe("Solauto Marginfi tests", async () => {
|
|
169
131
|
transactionItems.push(
|
170
132
|
new TransactionItem(
|
171
133
|
async (attemptNum) =>
|
172
|
-
await buildSolautoRebalanceTransaction(client,
|
134
|
+
await buildSolautoRebalanceTransaction(client, undefined, attemptNum),
|
173
135
|
"rebalance"
|
174
136
|
)
|
175
137
|
);
|
176
138
|
|
177
|
-
// transactionItems.push(
|
178
|
-
// new TransactionItem(
|
179
|
-
// async () => ({ tx: client.refresh() }),
|
180
|
-
// "refresh"
|
181
|
-
// )
|
182
|
-
// );
|
183
|
-
|
184
139
|
// transactionItems.push(
|
185
140
|
// new TransactionItem(
|
186
141
|
// async (attemptNum) =>
|