@haven-fi/solauto-sdk 1.0.512 → 1.0.514
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clients/solautoClient.d.ts +2 -2
- package/dist/clients/solautoClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.d.ts +2 -2
- package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +12 -1
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +10 -5
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/transactions/transactionsManager.js +0 -1
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +1 -3
- package/dist/utils/solanaUtils.d.ts.map +1 -1
- package/dist/utils/solanaUtils.js +1 -0
- package/dist/utils/solauto/rebalanceUtils.d.ts +7 -7
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +39 -26
- package/package.json +1 -1
- package/src/clients/solautoClient.ts +2 -0
- package/src/clients/solautoMarginfiClient.ts +23 -1
- package/src/transactions/transactionUtils.ts +19 -5
- package/src/transactions/transactionsManager.ts +0 -2
- package/src/utils/jupiterUtils.ts +1 -3
- package/src/utils/solanaUtils.ts +1 -0
- package/src/utils/solauto/rebalanceUtils.ts +60 -41
- package/tests/transactions/solautoMarginfi.ts +4 -2
@@ -1,7 +1,7 @@
|
|
1
1
|
import "rpc-websockets/dist/lib/client";
|
2
2
|
import { PublicKey } from "@solana/web3.js";
|
3
3
|
import { TransactionBuilder } from "@metaplex-foundation/umi";
|
4
|
-
import { DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, SolautoActionArgs, SolautoPosition, SolautoRebalanceTypeArgs, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../generated";
|
4
|
+
import { DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, SolautoActionArgs, SolautoPosition, SolautoRebalanceType, SolautoRebalanceTypeArgs, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../generated";
|
5
5
|
import { FlashLoanDetails, RebalanceValues } from "../utils/solauto/rebalanceUtils";
|
6
6
|
import { LivePositionUpdates } from "../utils/solauto/generalUtils";
|
7
7
|
import { ReferralStateManager, ReferralStateManagerArgs } from "./referralStateManager";
|
@@ -54,7 +54,7 @@ export declare abstract class SolautoClient extends ReferralStateManager {
|
|
54
54
|
cancelDCAIx(): TransactionBuilder;
|
55
55
|
abstract refresh(): TransactionBuilder;
|
56
56
|
protocolInteraction(args: SolautoActionArgs): TransactionBuilder;
|
57
|
-
abstract flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
|
57
|
+
abstract flashBorrow(rebalanceType: SolautoRebalanceType, flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
|
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>;
|
@@ -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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"}
|
@@ -2,7 +2,7 @@ import { Signer, TransactionBuilder } from "@metaplex-foundation/umi";
|
|
2
2
|
import { PublicKey } from "@solana/web3.js";
|
3
3
|
import { SolautoClient, SolautoClientArgs } from "./solautoClient";
|
4
4
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
5
|
-
import { DCASettingsInpArgs, PositionState, SolautoActionArgs, SolautoRebalanceTypeArgs, SolautoSettingsParametersInpArgs } from "../generated";
|
5
|
+
import { DCASettingsInpArgs, PositionState, SolautoActionArgs, SolautoRebalanceType, SolautoRebalanceTypeArgs, SolautoSettingsParametersInpArgs } from "../generated";
|
6
6
|
import { MarginfiAccount } from "../marginfi-sdk";
|
7
7
|
import { FlashLoanDetails, RebalanceValues } from "../utils/solauto/rebalanceUtils";
|
8
8
|
import { QuoteResponse } from "@jup-ag/api";
|
@@ -41,7 +41,7 @@ export declare class SolautoMarginfiClient extends SolautoClient {
|
|
41
41
|
private marginfiProtocolInteractionIx;
|
42
42
|
private marginfiSolautoProtocolInteractionIx;
|
43
43
|
rebalance(rebalanceStep: "A" | "B", jupQuote: QuoteResponse, rebalanceType: SolautoRebalanceTypeArgs, rebalanceValues: RebalanceValues, flashLoan?: FlashLoanDetails, targetLiqUtilizationRateBps?: number): TransactionBuilder;
|
44
|
-
flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
|
44
|
+
flashBorrow(rebalanceType: SolautoRebalanceType, flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
|
45
45
|
flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
|
46
46
|
getFreshPositionState(): Promise<PositionState | undefined>;
|
47
47
|
supplyLiquidityAvailable(): bigint;
|
@@ -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;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;
|
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,oBAAoB,EACpB,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,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2CrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAwF5D,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAmDjE,wBAAwB,IAAI,MAAM;IAIlC,0BAA0B,IAAI,MAAM;IAIpC,sBAAsB,IAAI,MAAM;CAGjC"}
|
@@ -365,7 +365,15 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
365
365
|
targetInAmountBaseUnit: parseInt(jupQuote.inAmount),
|
366
366
|
});
|
367
367
|
}
|
368
|
-
flashBorrow(flashLoanDetails, destinationTokenAccount) {
|
368
|
+
flashBorrow(rebalanceType, flashLoanDetails, destinationTokenAccount) {
|
369
|
+
if (flashLoanDetails.signerFlashLoan) {
|
370
|
+
if (rebalanceType === generated_1.SolautoRebalanceType.FLRebalanceThenSwap) {
|
371
|
+
return (0, umi_1.transactionBuilder)().add((0, utils_1.splTokenTransferUmiIx)(this.signer, (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.debtMint), destinationTokenAccount, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), flashLoanDetails.baseUnitAmount));
|
372
|
+
}
|
373
|
+
else {
|
374
|
+
return (0, umi_1.transactionBuilder)();
|
375
|
+
}
|
376
|
+
}
|
369
377
|
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
370
378
|
? this.marginfiSupplyAccounts
|
371
379
|
: this.marginfiDebtAccounts;
|
@@ -388,6 +396,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
388
396
|
}));
|
389
397
|
}
|
390
398
|
flashRepay(flashLoanDetails) {
|
399
|
+
if (flashLoanDetails.signerFlashLoan) {
|
400
|
+
return (0, umi_1.transactionBuilder)();
|
401
|
+
}
|
391
402
|
const accounts = flashLoanDetails.useDebtLiquidity
|
392
403
|
? { data: this.marginfiDebtAccounts, oracle: this.debtPriceOracle }
|
393
404
|
: { data: this.marginfiSupplyAccounts, oracle: this.supplyPriceOracle };
|
@@ -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;AAoBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,OAAO,
|
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;AAOzD,OAAO,EAKL,eAAe,EAChB,MAAM,iCAAiC,CAAC;AA0BzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA6LjD,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,CAClD,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,oBAsDxB;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA0I5C;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;;;;EA0G/B"}
|
@@ -373,9 +373,12 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
373
373
|
}
|
374
374
|
const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), supplyPrice, debtPrice, targetLiqUtilizationRateBps);
|
375
375
|
client.log("Rebalance values: ", values);
|
376
|
-
const
|
376
|
+
const flRequirements = (0, rebalanceUtils_1.getFlashLoanRequirements)(client, values, attemptNum);
|
377
|
+
const swapDetails = await (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum);
|
377
378
|
const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
|
378
|
-
const flashLoan =
|
379
|
+
const flashLoan = flRequirements
|
380
|
+
? (0, rebalanceUtils_1.getFlashLoanDetails)(client, flRequirements, values, jupQuote)
|
381
|
+
: undefined;
|
379
382
|
let tx = (0, umi_1.transactionBuilder)();
|
380
383
|
// REVERT ME
|
381
384
|
if (await requiresRefreshBeforeRebalance(client, values)) {
|
@@ -400,7 +403,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
400
403
|
tx = tx.add([
|
401
404
|
setupInstructions,
|
402
405
|
tokenLedgerIx,
|
403
|
-
client.flashBorrow(flashLoan, flashBorrowDest),
|
406
|
+
client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
|
404
407
|
...(addFirstRebalance ? [firstRebalance] : []),
|
405
408
|
...(rebalanceThenSwap
|
406
409
|
? [lastRebalance, swapIx]
|
@@ -497,11 +500,13 @@ function getErrorInfo(umi, txs, error, simulationSuccessful) {
|
|
497
500
|
canBeIgnored = true;
|
498
501
|
}
|
499
502
|
}
|
500
|
-
else if (errCode !== undefined &&
|
503
|
+
else if (errCode !== undefined &&
|
504
|
+
errIx?.programId === marginfi_sdk_1.MARGINFI_PROGRAM_ID) {
|
501
505
|
programName = "Marginfi";
|
502
506
|
programError = marginfiError;
|
503
507
|
}
|
504
|
-
else if (errCode !== undefined &&
|
508
|
+
else if (errCode !== undefined &&
|
509
|
+
errIx?.programId === jupiter_sdk_1.JUPITER_PROGRAM_ID) {
|
505
510
|
programName = "Jupiter";
|
506
511
|
programError = (0, jupiter_sdk_1.getJupiterErrorFromCode)(errCode, (0, jupiter_sdk_1.createJupiterProgram)());
|
507
512
|
}
|
@@ -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,EAEL,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;
|
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,EAEL,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;AAa7D,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;IAU5B,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;IAdxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,kBAAkB,SAAmB;gBAG3B,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;IA0GzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YAkCxB,6BAA6B;YAsI7B,qBAAqB;YAoDrB,eAAe;YA0Df,eAAe;CA4D9B"}
|
@@ -289,7 +289,6 @@ class TransactionsManager {
|
|
289
289
|
.stale;
|
290
290
|
if (stale) {
|
291
291
|
this.txHandler.log("Requires oracle update...");
|
292
|
-
console.log(mint);
|
293
292
|
const swbTx = new TransactionItem(async () => (0, utils_1.buildSwbSubmitResponseTx)(client.connection, client.signer, mint), this.updateOracleTxName);
|
294
293
|
await swbTx.initialize();
|
295
294
|
items.unshift(swbTx);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAgBD,wBAAsB,WAAW,CAAC,WAAW,EAAE,YAAY,
|
1
|
+
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAgBD,wBAAsB,WAAW,CAAC,WAAW,EAAE,YAAY,0BAkC1D;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO;;GA0B5E"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,GAAG,EACH,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAIL,UAAU,EACV,SAAS,EAKT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAgBzB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAKlE,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,SAAgC,GAC1C,CAAC,UAAU,EAAE,GAAG,CAAC,CAQnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,sBAAsB,GACzB,kBAAkB,CAMpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAOpB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,SAAS,GACnB,kBAAkB,CAKpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmBpC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBAa1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBA2D1B;AAuBD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,GAAG,CAAC,CAYd;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,kBAAkB,EACtB,eAAe,EAAE,kBAAkB,EACnC,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwC7B;AA+CD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,kBAAkB,EACtB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,eAAe,GAAE,kBAA2C,EAC5D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,
|
1
|
+
{"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,GAAG,EACH,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAIL,UAAU,EACV,SAAS,EAKT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAgBzB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAKlE,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,SAAgC,GAC1C,CAAC,UAAU,EAAE,GAAG,CAAC,CAQnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,sBAAsB,GACzB,kBAAkB,CAMpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAOpB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,SAAS,GACnB,kBAAkB,CAKpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmBpC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBAa1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBA2D1B;AAuBD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,GAAG,CAAC,CAYd;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,kBAAkB,EACtB,eAAe,EAAE,kBAAkB,EACnC,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwC7B;AA+CD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,kBAAkB,EACtB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,eAAe,GAAE,kBAA2C,EAC5D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAoEjC"}
|
@@ -235,6 +235,7 @@ async function sendSingleOptimizedTransaction(umi, connection, tx, txType, prior
|
|
235
235
|
(0, generalUtils_1.consoleLog)("Sending single optimized transaction...");
|
236
236
|
(0, generalUtils_1.consoleLog)("Instructions: ", tx.getInstructions().length);
|
237
237
|
(0, generalUtils_1.consoleLog)("Serialized transaction size: ", tx.getTransactionSize(umi));
|
238
|
+
(0, generalUtils_1.consoleLog)("Programs: ", tx.getInstructions().map(x => x.programId));
|
238
239
|
const accounts = tx
|
239
240
|
.getInstructions()
|
240
241
|
.flatMap((x) => [
|
@@ -16,15 +16,15 @@ export interface RebalanceValues {
|
|
16
16
|
targetRateBps: number;
|
17
17
|
}
|
18
18
|
export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): RebalanceValues;
|
19
|
-
export
|
20
|
-
requiresFlashLoan: boolean;
|
19
|
+
export interface FlashLoanRequirements {
|
21
20
|
useDebtLiquidity: boolean;
|
22
|
-
|
23
|
-
|
21
|
+
signerFlashLoan: boolean;
|
22
|
+
}
|
23
|
+
export declare function getFlashLoanRequirements(client: SolautoClient, values: RebalanceValues, attemptNum?: number): FlashLoanRequirements | undefined;
|
24
|
+
export interface FlashLoanDetails extends FlashLoanRequirements {
|
24
25
|
baseUnitAmount: bigint;
|
25
26
|
mint: PublicKey;
|
26
|
-
useDebtLiquidity: boolean;
|
27
27
|
}
|
28
|
-
export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
|
29
|
-
export declare function getJupSwapRebalanceDetails(client: SolautoClient, values: RebalanceValues, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<JupSwapDetails>;
|
28
|
+
export declare function getFlashLoanDetails(client: SolautoClient, flRequirements: FlashLoanRequirements, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
|
29
|
+
export declare function getJupSwapRebalanceDetails(client: SolautoClient, values: RebalanceValues, flRequirements?: FlashLoanRequirements, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<JupSwapDetails>;
|
30
30
|
//# sourceMappingURL=rebalanceUtils.d.ts.map
|
@@ -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,EAAgB,MAAM,iBAAiB,CAAC;AAc5E,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;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;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,CA4EjB;AAED,wBAAgB,
|
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,EAAgB,MAAM,iBAAiB,CAAC;AAc5E,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;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;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,CA4EjB;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,qBAAqB,GAAG,SAAS,CA0EnC;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,qBAAqB,EACrC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CA2B9B;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,cAAc,CAAC,EAAE,qBAAqB,EACtC,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CAyFzB"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getRebalanceValues = getRebalanceValues;
|
4
|
-
exports.
|
4
|
+
exports.getFlashLoanRequirements = getFlashLoanRequirements;
|
5
5
|
exports.getFlashLoanDetails = getFlashLoanDetails;
|
6
6
|
exports.getJupSwapRebalanceDetails = getJupSwapRebalanceDetails;
|
7
7
|
const web3_js_1 = require("@solana/web3.js");
|
@@ -125,7 +125,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
125
125
|
targetRateBps,
|
126
126
|
};
|
127
127
|
}
|
128
|
-
function
|
128
|
+
function getFlashLoanRequirements(client, values, attemptNum) {
|
129
129
|
let supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
|
130
130
|
(values.dcaTokenType === generated_1.TokenType.Supply ? values.amountUsdToDcaIn : 0);
|
131
131
|
let debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
@@ -141,22 +141,35 @@ function rebalanceRequiresFlashLoan(client, values) {
|
|
141
141
|
const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
|
142
142
|
const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.02);
|
143
143
|
const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
144
|
-
const
|
145
|
-
|
146
|
-
(0,
|
147
|
-
|
144
|
+
const insufficientSupplyLiquidity = Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
145
|
+
(0, numberUtils_1.fromBaseUnit)(client.supplyLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
|
146
|
+
((0, priceUtils_1.safeGetPrice)(client.supplyMint) ?? 0);
|
147
|
+
const insufficientDebtLiquidity = Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
148
|
+
(0, numberUtils_1.fromBaseUnit)(client.debtLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
|
149
|
+
((0, priceUtils_1.safeGetPrice)(client.debtMint) ?? 0);
|
150
|
+
let useDebtLiquidity = values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
|
151
|
+
insufficientSupplyLiquidity;
|
152
|
+
const isJupLong = client.supplyMint.equals(new web3_js_1.PublicKey(constants_1.JUP)) &&
|
153
|
+
(0, generalUtils_2.tokenInfo)(client.debtMint).isStableCoin;
|
154
|
+
const sufficientSignerSupplyLiquidity = false; // TODO
|
155
|
+
const sufficientSignerDebtLiquidity = isJupLong; // TODO
|
156
|
+
const signerFlashLoan = Boolean(((attemptNum ?? 0) > 1 ||
|
157
|
+
(insufficientDebtLiquidity && insufficientDebtLiquidity)) &&
|
158
|
+
(sufficientSignerSupplyLiquidity || sufficientSignerDebtLiquidity));
|
159
|
+
if (signerFlashLoan) {
|
160
|
+
useDebtLiquidity = !sufficientSignerSupplyLiquidity;
|
161
|
+
}
|
148
162
|
(0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
|
149
163
|
(0, generalUtils_2.consoleLog)("Use debt liquidity:", useDebtLiquidity);
|
150
164
|
(0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
|
151
|
-
return {
|
165
|
+
return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
|
152
166
|
}
|
153
|
-
function getFlashLoanDetails(client, values, jupQuote) {
|
154
|
-
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
|
167
|
+
function getFlashLoanDetails(client, flRequirements, values, jupQuote) {
|
155
168
|
let flashLoanToken = undefined;
|
156
169
|
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
157
170
|
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
158
171
|
const boosting = values.rebalanceDirection === generated_1.RebalanceDirection.Boost;
|
159
|
-
if (boosting || useDebtLiquidity) {
|
172
|
+
if (boosting || flRequirements.useDebtLiquidity) {
|
160
173
|
flashLoanToken = client.solautoPositionState.debt;
|
161
174
|
}
|
162
175
|
else {
|
@@ -165,16 +178,16 @@ function getFlashLoanDetails(client, values, jupQuote) {
|
|
165
178
|
if (jupQuote.swapMode !== "ExactOut" && jupQuote.swapMode !== "ExactIn") {
|
166
179
|
throw new Error("Token ledger swap not currently supported");
|
167
180
|
}
|
168
|
-
const baseUnitAmount = boosting || (!boosting && !useDebtLiquidity)
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
181
|
+
const baseUnitAmount = boosting || (!boosting && !flRequirements.useDebtLiquidity)
|
182
|
+
? inAmount
|
183
|
+
: outAmount;
|
184
|
+
return {
|
185
|
+
...flRequirements,
|
186
|
+
baseUnitAmount,
|
187
|
+
mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(flashLoanToken.mint),
|
188
|
+
};
|
176
189
|
}
|
177
|
-
async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps, attemptNum) {
|
190
|
+
async function getJupSwapRebalanceDetails(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum) {
|
178
191
|
const input = values.rebalanceDirection === generated_1.RebalanceDirection.Boost
|
179
192
|
? client.solautoPositionState.debt
|
180
193
|
: client.solautoPositionState.supply;
|
@@ -185,13 +198,14 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
|
|
185
198
|
const usdToSwap = Math.abs(values.debtAdjustmentUsd) +
|
186
199
|
(values.dcaTokenType === generated_1.TokenType.Debt ? values.amountUsdToDcaIn : 0);
|
187
200
|
let inputAmount = (0, numberUtils_1.toBaseUnit)(usdToSwap / (0, priceUtils_1.safeGetPrice)(input.mint), input.decimals);
|
188
|
-
const outputAmount =
|
189
|
-
|
190
|
-
|
191
|
-
|
201
|
+
const outputAmount = rebalanceToZero
|
202
|
+
? output.amountUsed.baseUnit +
|
203
|
+
BigInt(Math.round(Number(output.amountUsed.baseUnit) *
|
204
|
+
// Add this small percentage to account for the APR on the debt between now and the transaction
|
205
|
+
0.0001))
|
206
|
+
: (0, numberUtils_1.toBaseUnit)(usdToSwap / (0, priceUtils_1.safeGetPrice)(output.mint), output.decimals);
|
192
207
|
const repaying = values.rebalanceDirection === generated_1.RebalanceDirection.Repay;
|
193
|
-
const
|
194
|
-
const flashLoanRepayFromDebt = repaying && requiresFlashLoan && useDebtLiquidity;
|
208
|
+
const flashLoanRepayFromDebt = repaying && flRequirements && flRequirements.useDebtLiquidity;
|
195
209
|
const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
|
196
210
|
const exactIn = !exactOut;
|
197
211
|
const jupSwapInput = {
|
@@ -201,7 +215,6 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
|
|
201
215
|
exactOut,
|
202
216
|
amount: exactOut ? outputAmount : inputAmount,
|
203
217
|
};
|
204
|
-
(0, generalUtils_2.consoleLog)(targetLiqUtilizationRateBps, rebalanceToZero);
|
205
218
|
(0, generalUtils_2.consoleLog)(jupSwapInput);
|
206
219
|
let jupQuote = undefined;
|
207
220
|
if (rebalanceToZero) {
|
package/package.json
CHANGED
@@ -17,6 +17,7 @@ import {
|
|
17
17
|
PositionState,
|
18
18
|
SolautoActionArgs,
|
19
19
|
SolautoPosition,
|
20
|
+
SolautoRebalanceType,
|
20
21
|
SolautoRebalanceTypeArgs,
|
21
22
|
SolautoSettingsParameters,
|
22
23
|
SolautoSettingsParametersInpArgs,
|
@@ -548,6 +549,7 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
548
549
|
}
|
549
550
|
|
550
551
|
abstract flashBorrow(
|
552
|
+
rebalanceType: SolautoRebalanceType,
|
551
553
|
flashLoanDetails: FlashLoanDetails,
|
552
554
|
destinationTokenAccount: PublicKey
|
553
555
|
): TransactionBuilder;
|
@@ -26,6 +26,7 @@ import {
|
|
26
26
|
PositionType,
|
27
27
|
RebalanceDirection,
|
28
28
|
SolautoActionArgs,
|
29
|
+
SolautoRebalanceType,
|
29
30
|
SolautoRebalanceTypeArgs,
|
30
31
|
SolautoSettingsParametersInpArgs,
|
31
32
|
marginfiOpenPosition,
|
@@ -62,7 +63,7 @@ import {
|
|
62
63
|
} from "../utils/marginfiUtils";
|
63
64
|
import { fromBaseUnit, toBps } from "../utils/numberUtils";
|
64
65
|
import { QuoteResponse } from "@jup-ag/api";
|
65
|
-
import { consoleLog, safeGetPrice } from "../utils";
|
66
|
+
import { consoleLog, safeGetPrice, splTokenTransferUmiIx } from "../utils";
|
66
67
|
|
67
68
|
export interface SolautoMarginfiClientArgs extends SolautoClientArgs {
|
68
69
|
marginfiAccount?: PublicKey | Signer;
|
@@ -574,9 +575,26 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
574
575
|
}
|
575
576
|
|
576
577
|
flashBorrow(
|
578
|
+
rebalanceType: SolautoRebalanceType,
|
577
579
|
flashLoanDetails: FlashLoanDetails,
|
578
580
|
destinationTokenAccount: PublicKey
|
579
581
|
): TransactionBuilder {
|
582
|
+
if (flashLoanDetails.signerFlashLoan) {
|
583
|
+
if (rebalanceType === SolautoRebalanceType.FLRebalanceThenSwap) {
|
584
|
+
return transactionBuilder().add(
|
585
|
+
splTokenTransferUmiIx(
|
586
|
+
this.signer,
|
587
|
+
getTokenAccount(toWeb3JsPublicKey(this.signer.publicKey), this.debtMint),
|
588
|
+
destinationTokenAccount,
|
589
|
+
toWeb3JsPublicKey(this.signer.publicKey),
|
590
|
+
flashLoanDetails.baseUnitAmount
|
591
|
+
)
|
592
|
+
);
|
593
|
+
} else {
|
594
|
+
return transactionBuilder();
|
595
|
+
}
|
596
|
+
}
|
597
|
+
|
580
598
|
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
581
599
|
? this.marginfiSupplyAccounts
|
582
600
|
: this.marginfiDebtAccounts;
|
@@ -604,6 +622,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
604
622
|
}
|
605
623
|
|
606
624
|
flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder {
|
625
|
+
if (flashLoanDetails.signerFlashLoan) {
|
626
|
+
return transactionBuilder();
|
627
|
+
}
|
628
|
+
|
607
629
|
const accounts = flashLoanDetails.useDebtLiquidity
|
608
630
|
? { data: this.marginfiDebtAccounts, oracle: this.debtPriceOracle }
|
609
631
|
: { data: this.marginfiSupplyAccounts, oracle: this.supplyPriceOracle };
|
@@ -37,6 +37,7 @@ import {
|
|
37
37
|
import { getJupSwapTransaction } from "../utils/jupiterUtils";
|
38
38
|
import {
|
39
39
|
getFlashLoanDetails,
|
40
|
+
getFlashLoanRequirements,
|
40
41
|
getJupSwapRebalanceDetails,
|
41
42
|
getRebalanceValues,
|
42
43
|
RebalanceValues,
|
@@ -600,7 +601,10 @@ export async function getTransactionChores(
|
|
600
601
|
return [choresBefore, choresAfter];
|
601
602
|
}
|
602
603
|
|
603
|
-
export async function requiresRefreshBeforeRebalance(
|
604
|
+
export async function requiresRefreshBeforeRebalance(
|
605
|
+
client: SolautoClient,
|
606
|
+
values: RebalanceValues
|
607
|
+
) {
|
604
608
|
const neverRefreshedBefore =
|
605
609
|
client.solautoPositionData &&
|
606
610
|
client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
|
@@ -692,9 +696,11 @@ export async function buildSolautoRebalanceTransaction(
|
|
692
696
|
);
|
693
697
|
client.log("Rebalance values: ", values);
|
694
698
|
|
699
|
+
const flRequirements = getFlashLoanRequirements(client, values, attemptNum);
|
695
700
|
const swapDetails = await getJupSwapRebalanceDetails(
|
696
701
|
client,
|
697
702
|
values,
|
703
|
+
flRequirements,
|
698
704
|
targetLiqUtilizationRateBps,
|
699
705
|
attemptNum
|
700
706
|
);
|
@@ -706,7 +712,9 @@ export async function buildSolautoRebalanceTransaction(
|
|
706
712
|
swapIx,
|
707
713
|
} = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
|
708
714
|
|
709
|
-
const flashLoan =
|
715
|
+
const flashLoan = flRequirements
|
716
|
+
? getFlashLoanDetails(client, flRequirements, values, jupQuote)
|
717
|
+
: undefined;
|
710
718
|
|
711
719
|
let tx = transactionBuilder();
|
712
720
|
|
@@ -757,7 +765,7 @@ export async function buildSolautoRebalanceTransaction(
|
|
757
765
|
tx = tx.add([
|
758
766
|
setupInstructions,
|
759
767
|
tokenLedgerIx,
|
760
|
-
client.flashBorrow(flashLoan, flashBorrowDest),
|
768
|
+
client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
|
761
769
|
...(addFirstRebalance ? [firstRebalance] : []),
|
762
770
|
...(rebalanceThenSwap
|
763
771
|
? [lastRebalance, swapIx]
|
@@ -916,10 +924,16 @@ export function getErrorInfo(
|
|
916
924
|
) {
|
917
925
|
canBeIgnored = true;
|
918
926
|
}
|
919
|
-
} else if (
|
927
|
+
} else if (
|
928
|
+
errCode !== undefined &&
|
929
|
+
errIx?.programId === MARGINFI_PROGRAM_ID
|
930
|
+
) {
|
920
931
|
programName = "Marginfi";
|
921
932
|
programError = marginfiError;
|
922
|
-
} else if (
|
933
|
+
} else if (
|
934
|
+
errCode !== undefined &&
|
935
|
+
errIx?.programId === JUPITER_PROGRAM_ID
|
936
|
+
) {
|
923
937
|
programName = "Jupiter";
|
924
938
|
programError = getJupiterErrorFromCode(errCode, createJupiterProgram());
|
925
939
|
}
|
@@ -31,7 +31,6 @@ import {
|
|
31
31
|
import { SWITCHBOARD_PRICE_FEED_IDS } from "../constants/switchboardConstants";
|
32
32
|
import { buildSwbSubmitResponseTx, getSwitchboardFeedData } from "../utils";
|
33
33
|
import { sendJitoBundledTransactions } from "../utils/jitoUtils";
|
34
|
-
import { JUPITER_PROGRAM_ID } from "../jupiter-sdk";
|
35
34
|
import { SOLAUTO_PROD_PROGRAM, SOLAUTO_TEST_PROGRAM } from "../constants";
|
36
35
|
|
37
36
|
const CHORES_TX_NAME = "account chores";
|
@@ -465,7 +464,6 @@ export class TransactionsManager {
|
|
465
464
|
|
466
465
|
if (stale) {
|
467
466
|
this.txHandler.log("Requires oracle update...");
|
468
|
-
console.log(mint);
|
469
467
|
const swbTx = new TransactionItem(
|
470
468
|
async () =>
|
471
469
|
buildSwbSubmitResponseTx(client.connection, client.signer, mint),
|
package/src/utils/solanaUtils.ts
CHANGED
@@ -408,6 +408,7 @@ export async function sendSingleOptimizedTransaction(
|
|
408
408
|
consoleLog("Sending single optimized transaction...");
|
409
409
|
consoleLog("Instructions: ", tx.getInstructions().length);
|
410
410
|
consoleLog("Serialized transaction size: ", tx.getTransactionSize(umi));
|
411
|
+
consoleLog("Programs: ", tx.getInstructions().map(x => x.programId));
|
411
412
|
|
412
413
|
const accounts = tx
|
413
414
|
.getInstructions()
|
@@ -16,7 +16,7 @@ import {
|
|
16
16
|
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
17
17
|
import { QuoteResponse } from "@jup-ag/api";
|
18
18
|
import { getJupQuote, JupSwapDetails, JupSwapInput } from "../jupiterUtils";
|
19
|
-
import { consoleLog, currentUnixSeconds } from "../generalUtils";
|
19
|
+
import { consoleLog, currentUnixSeconds, tokenInfo } from "../generalUtils";
|
20
20
|
import {
|
21
21
|
fromBaseUnit,
|
22
22
|
fromBps,
|
@@ -31,7 +31,7 @@ import {
|
|
31
31
|
import { USD_DECIMALS } from "../../constants/generalAccounts";
|
32
32
|
import { RebalanceAction } from "../../types";
|
33
33
|
import { getPriceImpact, safeGetPrice } from "../priceUtils";
|
34
|
-
import { BROKEN_TOKENS, USDC, USDT } from "../../constants";
|
34
|
+
import { BROKEN_TOKENS, JUP, USDC, USDT } from "../../constants";
|
35
35
|
|
36
36
|
function getAdditionalAmountToDcaIn(dca: DCASettings): number {
|
37
37
|
if (dca.dcaInBaseUnit === BigInt(0)) {
|
@@ -259,10 +259,16 @@ export function getRebalanceValues(
|
|
259
259
|
};
|
260
260
|
}
|
261
261
|
|
262
|
-
export
|
262
|
+
export interface FlashLoanRequirements {
|
263
|
+
useDebtLiquidity: boolean;
|
264
|
+
signerFlashLoan: boolean;
|
265
|
+
}
|
266
|
+
|
267
|
+
export function getFlashLoanRequirements(
|
263
268
|
client: SolautoClient,
|
264
|
-
values: RebalanceValues
|
265
|
-
|
269
|
+
values: RebalanceValues,
|
270
|
+
attemptNum?: number
|
271
|
+
): FlashLoanRequirements | undefined {
|
266
272
|
let supplyUsd =
|
267
273
|
fromBaseUnit(
|
268
274
|
client.solautoPositionState!.supply.amountUsed.baseAmountUsdValue,
|
@@ -297,11 +303,32 @@ export function rebalanceRequiresFlashLoan(
|
|
297
303
|
const requiresFlashLoan =
|
298
304
|
supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
299
305
|
|
300
|
-
const
|
301
|
-
values.
|
306
|
+
const insufficientSupplyLiquidity =
|
307
|
+
Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
308
|
+
fromBaseUnit(client.supplyLiquidityAvailable(), USD_DECIMALS) *
|
309
|
+
(safeGetPrice(client.supplyMint) ?? 0);
|
310
|
+
const insufficientDebtLiquidity =
|
302
311
|
Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
303
|
-
|
304
|
-
|
312
|
+
fromBaseUnit(client.debtLiquidityAvailable(), USD_DECIMALS) *
|
313
|
+
(safeGetPrice(client.debtMint) ?? 0);
|
314
|
+
|
315
|
+
let useDebtLiquidity =
|
316
|
+
values.rebalanceDirection === RebalanceDirection.Boost ||
|
317
|
+
insufficientSupplyLiquidity;
|
318
|
+
|
319
|
+
const isJupLong =
|
320
|
+
client.supplyMint.equals(new PublicKey(JUP)) &&
|
321
|
+
tokenInfo(client.debtMint).isStableCoin;
|
322
|
+
const sufficientSignerSupplyLiquidity = false; // TODO
|
323
|
+
const sufficientSignerDebtLiquidity = isJupLong; // TODO
|
324
|
+
const signerFlashLoan = Boolean(
|
325
|
+
((attemptNum ?? 0) > 1 ||
|
326
|
+
(insufficientDebtLiquidity && insufficientDebtLiquidity)) &&
|
327
|
+
(sufficientSignerSupplyLiquidity || sufficientSignerDebtLiquidity)
|
328
|
+
);
|
329
|
+
if (signerFlashLoan) {
|
330
|
+
useDebtLiquidity = !sufficientSignerSupplyLiquidity;
|
331
|
+
}
|
305
332
|
|
306
333
|
consoleLog("Requires flash loan:", requiresFlashLoan);
|
307
334
|
consoleLog("Use debt liquidity:", useDebtLiquidity);
|
@@ -314,32 +341,27 @@ export function rebalanceRequiresFlashLoan(
|
|
314
341
|
maxLiqUtilizationRateBps
|
315
342
|
);
|
316
343
|
|
317
|
-
return {
|
344
|
+
return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
|
318
345
|
}
|
319
346
|
|
320
|
-
export interface FlashLoanDetails {
|
347
|
+
export interface FlashLoanDetails extends FlashLoanRequirements {
|
321
348
|
baseUnitAmount: bigint;
|
322
349
|
mint: PublicKey;
|
323
|
-
useDebtLiquidity: boolean;
|
324
350
|
}
|
325
351
|
|
326
352
|
export function getFlashLoanDetails(
|
327
353
|
client: SolautoClient,
|
354
|
+
flRequirements: FlashLoanRequirements,
|
328
355
|
values: RebalanceValues,
|
329
356
|
jupQuote: QuoteResponse
|
330
357
|
): FlashLoanDetails | undefined {
|
331
|
-
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
|
332
|
-
client,
|
333
|
-
values
|
334
|
-
);
|
335
|
-
|
336
358
|
let flashLoanToken: PositionTokenUsage | undefined = undefined;
|
337
359
|
|
338
360
|
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
339
361
|
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
340
362
|
|
341
363
|
const boosting = values.rebalanceDirection === RebalanceDirection.Boost;
|
342
|
-
if (boosting || useDebtLiquidity) {
|
364
|
+
if (boosting || flRequirements.useDebtLiquidity) {
|
343
365
|
flashLoanToken = client.solautoPositionState!.debt;
|
344
366
|
} else {
|
345
367
|
flashLoanToken = client.solautoPositionState!.supply;
|
@@ -350,20 +372,21 @@ export function getFlashLoanDetails(
|
|
350
372
|
}
|
351
373
|
|
352
374
|
const baseUnitAmount =
|
353
|
-
boosting || (!boosting && !useDebtLiquidity)
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
375
|
+
boosting || (!boosting && !flRequirements.useDebtLiquidity)
|
376
|
+
? inAmount
|
377
|
+
: outAmount;
|
378
|
+
|
379
|
+
return {
|
380
|
+
...flRequirements,
|
381
|
+
baseUnitAmount,
|
382
|
+
mint: toWeb3JsPublicKey(flashLoanToken.mint),
|
383
|
+
};
|
362
384
|
}
|
363
385
|
|
364
386
|
export async function getJupSwapRebalanceDetails(
|
365
387
|
client: SolautoClient,
|
366
388
|
values: RebalanceValues,
|
389
|
+
flRequirements?: FlashLoanRequirements,
|
367
390
|
targetLiqUtilizationRateBps?: number,
|
368
391
|
attemptNum?: number
|
369
392
|
): Promise<JupSwapDetails> {
|
@@ -385,24 +408,21 @@ export async function getJupSwapRebalanceDetails(
|
|
385
408
|
usdToSwap / safeGetPrice(input.mint)!,
|
386
409
|
input.decimals
|
387
410
|
);
|
388
|
-
const outputAmount =
|
389
|
-
output.amountUsed.baseUnit +
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
411
|
+
const outputAmount = rebalanceToZero
|
412
|
+
? output.amountUsed.baseUnit +
|
413
|
+
BigInt(
|
414
|
+
Math.round(
|
415
|
+
Number(output.amountUsed.baseUnit) *
|
416
|
+
// Add this small percentage to account for the APR on the debt between now and the transaction
|
417
|
+
0.0001
|
418
|
+
)
|
395
419
|
)
|
396
|
-
);
|
420
|
+
: toBaseUnit(usdToSwap / safeGetPrice(output.mint)!, output.decimals);
|
397
421
|
|
398
422
|
const repaying = values.rebalanceDirection === RebalanceDirection.Repay;
|
399
423
|
|
400
|
-
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
|
401
|
-
client,
|
402
|
-
values
|
403
|
-
);
|
404
424
|
const flashLoanRepayFromDebt =
|
405
|
-
repaying &&
|
425
|
+
repaying && flRequirements && flRequirements.useDebtLiquidity;
|
406
426
|
|
407
427
|
const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
|
408
428
|
const exactIn = !exactOut;
|
@@ -414,7 +434,6 @@ export async function getJupSwapRebalanceDetails(
|
|
414
434
|
exactOut,
|
415
435
|
amount: exactOut ? outputAmount : inputAmount,
|
416
436
|
};
|
417
|
-
consoleLog(targetLiqUtilizationRateBps, rebalanceToZero);
|
418
437
|
consoleLog(jupSwapInput);
|
419
438
|
|
420
439
|
let jupQuote: QuoteResponse | undefined = undefined;
|
@@ -48,7 +48,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
48
48
|
// const signer = setupTest();
|
49
49
|
const signer = setupTest("solauto-manager");
|
50
50
|
|
51
|
-
const payForTransactions =
|
51
|
+
const payForTransactions = true;
|
52
52
|
const testProgram = false;
|
53
53
|
const positionId = 1;
|
54
54
|
|
@@ -203,7 +203,9 @@ describe("Solauto Marginfi tests", async () => {
|
|
203
203
|
undefined,
|
204
204
|
!payForTransactions ? "only-simulate" : "normal",
|
205
205
|
PriorityFeeSetting.Min,
|
206
|
-
true
|
206
|
+
true,
|
207
|
+
undefined,
|
208
|
+
{ totalRetries: 5 }
|
207
209
|
).clientSend(transactionItems);
|
208
210
|
|
209
211
|
console.log(statuses);
|