@haven-fi/solauto-sdk 1.0.511 → 1.0.513
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/constants/solautoConstants.d.ts +1 -0
- package/dist/constants/solautoConstants.d.ts.map +1 -1
- package/dist/constants/solautoConstants.js +10 -1
- package/dist/transactions/transactionUtils.d.ts +2 -1
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +13 -7
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +8 -1
- package/dist/utils/priceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts +8 -7
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +49 -23
- package/package.json +1 -1
- package/src/clients/solautoClient.ts +2 -0
- package/src/clients/solautoMarginfiClient.ts +23 -1
- package/src/constants/solautoConstants.ts +11 -1
- package/src/transactions/transactionUtils.ts +25 -7
- package/src/transactions/transactionsManager.ts +0 -1
- package/src/utils/jupiterUtils.ts +14 -1
- package/src/utils/priceUtils.ts +1 -2
- package/src/utils/solauto/rebalanceUtils.ts +74 -34
- package/tests/transactions/solautoMarginfi.ts +29 -3
@@ -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":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAEL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAEhC,sBAAsB,EAKvB,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,UAAU,EAAG,SAAS,CAAC;IACvB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,QAAQ,EAAG,SAAS,CAAC;IACrB,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,mBAAmB,EAAE,mBAAmB,CAA6B;IAEtE,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA8ExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAuB1C,QAAQ,CAAC,eAAe,IAAI,SAAS;IAErC,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAkBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IA2DD,uBAAuB,IAAI,yBAAyB,GAAG,SAAS;IAOhE,wBAAwB,IAAI,WAAW,GAAG,SAAS;IAO7C,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAOvE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAwDlE,eAAe,IAAI,kBAAkB;IAYrC,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,OAAO,IAAI,kBAAkB;IAEtC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAuFhE,QAAQ,CAAC,WAAW,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IAErB,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAE3E,QAAQ,CAAC,SAAS,CAChB,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IAEf,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAcjE,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAC3C,QAAQ,CAAC,0BAA0B,IAAI,MAAM;IAC7C,QAAQ,CAAC,sBAAsB,IAAI,MAAM;CAC1C"}
|
1
|
+
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAEL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAEhC,sBAAsB,EAKvB,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,UAAU,EAAG,SAAS,CAAC;IACvB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,QAAQ,EAAG,SAAS,CAAC;IACrB,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,mBAAmB,EAAE,mBAAmB,CAA6B;IAEtE,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA8ExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAuB1C,QAAQ,CAAC,eAAe,IAAI,SAAS;IAErC,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAkBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IA2DD,uBAAuB,IAAI,yBAAyB,GAAG,SAAS;IAOhE,wBAAwB,IAAI,WAAW,GAAG,SAAS;IAO7C,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAOvE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAwDlE,eAAe,IAAI,kBAAkB;IAYrC,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,OAAO,IAAI,kBAAkB;IAEtC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAuFhE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IAErB,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAE3E,QAAQ,CAAC,SAAS,CAChB,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IAEf,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAcjE,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAC3C,QAAQ,CAAC,0BAA0B,IAAI,MAAM;IAC7C,QAAQ,CAAC,sBAAsB,IAAI,MAAM;CAC1C"}
|
@@ -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 };
|
@@ -15,4 +15,5 @@ export declare const PRICES: {
|
|
15
15
|
export declare const SOLAUTO_LUT = "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
|
16
16
|
export declare const STANDARD_LUT_ACCOUNTS: string[];
|
17
17
|
export declare const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
|
18
|
+
export declare const BROKEN_TOKENS: string[];
|
18
19
|
//# sourceMappingURL=solautoConstants.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AASzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAC;AAE7E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,qBAAqB,UAYR,CAAC;AAE3B,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,eAAO,MAAM,aAAa,UAOzB,CAAA"}
|
@@ -1,10 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.JITO_BLOCK_ENGINE = exports.STANDARD_LUT_ACCOUNTS = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_USD_SUPPORTED_POSITION = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.BASIS_POINTS = exports.SOLAUTO_TEST_PROGRAM = exports.SOLAUTO_PROD_PROGRAM = void 0;
|
3
|
+
exports.BROKEN_TOKENS = exports.JITO_BLOCK_ENGINE = exports.STANDARD_LUT_ACCOUNTS = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_USD_SUPPORTED_POSITION = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.BASIS_POINTS = exports.SOLAUTO_TEST_PROGRAM = exports.SOLAUTO_PROD_PROGRAM = void 0;
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
5
5
|
const spl_token_1 = require("@solana/spl-token");
|
6
6
|
const generalAccounts_1 = require("./generalAccounts");
|
7
7
|
const jupiter_sdk_1 = require("../jupiter-sdk");
|
8
|
+
const tokenConstants_1 = require("./tokenConstants");
|
8
9
|
exports.SOLAUTO_PROD_PROGRAM = new web3_js_1.PublicKey("AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV");
|
9
10
|
exports.SOLAUTO_TEST_PROGRAM = new web3_js_1.PublicKey("TesTjfQ6TbXv96Tv6fqr95XTZ1LYPxtkafmShN9PjBp");
|
10
11
|
globalThis.LOCAL_TEST = false;
|
@@ -29,3 +30,11 @@ exports.STANDARD_LUT_ACCOUNTS = [
|
|
29
30
|
jupiter_sdk_1.JUPITER_PROGRAM_ID,
|
30
31
|
].map((x) => x.toString());
|
31
32
|
exports.JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
|
33
|
+
exports.BROKEN_TOKENS = [
|
34
|
+
tokenConstants_1.JUP,
|
35
|
+
tokenConstants_1.JLP,
|
36
|
+
tokenConstants_1.WETH,
|
37
|
+
tokenConstants_1.HNT,
|
38
|
+
tokenConstants_1.JTO,
|
39
|
+
tokenConstants_1.PYTH
|
40
|
+
];
|
@@ -1,11 +1,12 @@
|
|
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";
|
4
5
|
import { ReferralStateManager } from "../clients";
|
5
6
|
import { TransactionItemInputs } from "../types";
|
6
7
|
export declare function rebalanceChoresBefore(client: SolautoClient, tx: TransactionBuilder, accountsGettingCreated: string[]): Promise<TransactionBuilder>;
|
7
8
|
export declare function getTransactionChores(client: SolautoClient, tx: TransactionBuilder): Promise<[TransactionBuilder, TransactionBuilder]>;
|
8
|
-
export declare function requiresRefreshBeforeRebalance(client: SolautoClient): Promise<boolean>;
|
9
|
+
export declare function requiresRefreshBeforeRebalance(client: SolautoClient, values: RebalanceValues): Promise<boolean>;
|
9
10
|
export declare function buildSolautoRebalanceTransaction(client: SolautoClient, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<TransactionItemInputs | undefined>;
|
10
11
|
export declare function convertReferralFeesToDestination(referralManager: ReferralStateManager, tokenAccount: PublicKey, destinationMint: PublicKey): Promise<TransactionItemInputs | undefined>;
|
11
12
|
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;AAoBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,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;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"}
|
@@ -329,7 +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) {
|
332
|
+
async function requiresRefreshBeforeRebalance(client, values) {
|
333
333
|
const neverRefreshedBefore = client.solautoPositionData &&
|
334
334
|
client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
|
335
335
|
BigInt(0) &&
|
@@ -373,11 +373,15 @@ 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
|
384
|
+
if (await requiresRefreshBeforeRebalance(client, values)) {
|
381
385
|
tx = tx.add(client.refresh());
|
382
386
|
}
|
383
387
|
if (flashLoan) {
|
@@ -399,7 +403,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
399
403
|
tx = tx.add([
|
400
404
|
setupInstructions,
|
401
405
|
tokenLedgerIx,
|
402
|
-
client.flashBorrow(flashLoan, flashBorrowDest),
|
406
|
+
client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
|
403
407
|
...(addFirstRebalance ? [firstRebalance] : []),
|
404
408
|
...(rebalanceThenSwap
|
405
409
|
? [lastRebalance, swapIx]
|
@@ -496,11 +500,13 @@ function getErrorInfo(umi, txs, error, simulationSuccessful) {
|
|
496
500
|
canBeIgnored = true;
|
497
501
|
}
|
498
502
|
}
|
499
|
-
else if (errCode !== undefined &&
|
503
|
+
else if (errCode !== undefined &&
|
504
|
+
errIx?.programId === marginfi_sdk_1.MARGINFI_PROGRAM_ID) {
|
500
505
|
programName = "Marginfi";
|
501
506
|
programError = marginfiError;
|
502
507
|
}
|
503
|
-
else if (errCode !== undefined &&
|
508
|
+
else if (errCode !== undefined &&
|
509
|
+
errIx?.programId === jupiter_sdk_1.JUPITER_PROGRAM_ID) {
|
504
510
|
programName = "Jupiter";
|
505
511
|
programError = (0, jupiter_sdk_1.getJupiterErrorFromCode)(errCode, (0, jupiter_sdk_1.createJupiterProgram)());
|
506
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"}
|
@@ -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;
|
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"}
|
@@ -10,6 +10,7 @@ const numberUtils_1 = require("./numberUtils");
|
|
10
10
|
const api_1 = require("@jup-ag/api");
|
11
11
|
const accountUtils_1 = require("./accountUtils");
|
12
12
|
const generalUtils_1 = require("./generalUtils");
|
13
|
+
const constants_1 = require("../constants");
|
13
14
|
const jupApi = (0, api_1.createJupiterApiClient)();
|
14
15
|
function createTransactionInstruction(instruction) {
|
15
16
|
return new web3_js_1.TransactionInstruction({
|
@@ -25,6 +26,10 @@ function createTransactionInstruction(instruction) {
|
|
25
26
|
async function getJupQuote(swapDetails) {
|
26
27
|
const memecoinSwap = (0, generalUtils_1.tokenInfo)(swapDetails.inputMint).isMeme ||
|
27
28
|
(0, generalUtils_1.tokenInfo)(swapDetails.outputMint).isMeme;
|
29
|
+
const tokensWithLowAccounts = [constants_1.PYTH, constants_1.INF];
|
30
|
+
// TEMP REVERT ME
|
31
|
+
const useLowAccounts = tokensWithLowAccounts.find((x) => swapDetails.inputMint.equals(new web3_js_1.PublicKey(x))) ||
|
32
|
+
tokensWithLowAccounts.find((x) => swapDetails.outputMint.equals(new web3_js_1.PublicKey(x)));
|
28
33
|
return await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await jupApi.quoteGet({
|
29
34
|
amount: Number(swapDetails.amount),
|
30
35
|
inputMint: swapDetails.inputMint.toString(),
|
@@ -35,7 +40,9 @@ async function getJupQuote(swapDetails) {
|
|
35
40
|
? "ExactIn"
|
36
41
|
: undefined,
|
37
42
|
slippageBps: memecoinSwap ? 500 : 200,
|
38
|
-
maxAccounts: !swapDetails.exactOut
|
43
|
+
maxAccounts: !swapDetails.exactOut
|
44
|
+
? 15
|
45
|
+
: undefined,
|
39
46
|
}), 2, 200);
|
40
47
|
}
|
41
48
|
async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"priceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/priceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"priceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/priceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAarE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqC5E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,qBAwCrD;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAAE,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDnB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,qBAQzD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GACzC,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,oBAAoB;;;GAc/B"}
|
@@ -13,17 +13,18 @@ export interface RebalanceValues {
|
|
13
13
|
rebalanceAction: RebalanceAction;
|
14
14
|
rebalanceDirection: RebalanceDirection;
|
15
15
|
feesUsd: number;
|
16
|
+
targetRateBps: number;
|
16
17
|
}
|
17
18
|
export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): RebalanceValues;
|
18
|
-
export
|
19
|
-
requiresFlashLoan: boolean;
|
19
|
+
export interface FlashLoanRequirements {
|
20
20
|
useDebtLiquidity: boolean;
|
21
|
-
|
22
|
-
|
21
|
+
signerFlashLoan: boolean;
|
22
|
+
}
|
23
|
+
export declare function getFlashLoanRequirements(client: SolautoClient, values: RebalanceValues, attemptNum?: number): FlashLoanRequirements | undefined;
|
24
|
+
export interface FlashLoanDetails extends FlashLoanRequirements {
|
23
25
|
baseUnitAmount: bigint;
|
24
26
|
mint: PublicKey;
|
25
|
-
useDebtLiquidity: boolean;
|
26
27
|
}
|
27
|
-
export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
|
28
|
-
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>;
|
29
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;
|
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,CAwFzB"}
|
@@ -1,9 +1,10 @@
|
|
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
|
+
const web3_js_1 = require("@solana/web3.js");
|
7
8
|
const generated_1 = require("../../generated");
|
8
9
|
const generalUtils_1 = require("./generalUtils");
|
9
10
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
@@ -12,6 +13,7 @@ const generalUtils_2 = require("../generalUtils");
|
|
12
13
|
const numberUtils_1 = require("../numberUtils");
|
13
14
|
const generalAccounts_1 = require("../../constants/generalAccounts");
|
14
15
|
const priceUtils_1 = require("../priceUtils");
|
16
|
+
const constants_1 = require("../../constants");
|
15
17
|
function getAdditionalAmountToDcaIn(dca) {
|
16
18
|
if (dca.dcaInBaseUnit === BigInt(0)) {
|
17
19
|
return 0;
|
@@ -83,7 +85,18 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
|
|
83
85
|
}
|
84
86
|
}
|
85
87
|
function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
|
86
|
-
|
88
|
+
let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
|
89
|
+
// REVERT ME AND GET TO THE ROOT OF THIS ISSUE
|
90
|
+
const supplyMint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.supply.mint);
|
91
|
+
if (constants_1.BROKEN_TOKENS.includes(supplyMint.toString()) &&
|
92
|
+
((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.debt.mint).equals(new web3_js_1.PublicKey(constants_1.USDC)) ||
|
93
|
+
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.debt.mint).equals(new web3_js_1.PublicKey(constants_1.USDT))) &&
|
94
|
+
settings &&
|
95
|
+
settings.boostToBps ===
|
96
|
+
(0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps) &&
|
97
|
+
targetRateBps === settings.boostToBps) {
|
98
|
+
targetRateBps = 6500;
|
99
|
+
}
|
87
100
|
const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
|
88
101
|
(dca?.tokenType === generated_1.TokenType.Debt ? debtPrice : supplyPrice);
|
89
102
|
const rebalanceDirection = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps <= targetRateBps
|
@@ -94,6 +107,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
94
107
|
amountUsdToDcaIn;
|
95
108
|
const debtUsd = (0, numberUtils_1.fromBaseUnit)(state.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
96
109
|
let debtAdjustmentUsd = (0, numberUtils_1.getDebtAdjustmentUsd)(state.liqThresholdBps, supplyUsd, debtUsd, targetRateBps, adjustmentFeeBps);
|
110
|
+
(0, generalUtils_2.consoleLog)("Target rate:", targetRateBps, (0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps));
|
97
111
|
const maxRepayTo = (0, numberUtils_1.maxRepayToBps)(state.maxLtvBps, state.liqThresholdBps);
|
98
112
|
return {
|
99
113
|
debtAdjustmentUsd,
|
@@ -108,9 +122,10 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
108
122
|
: "repay",
|
109
123
|
rebalanceDirection,
|
110
124
|
feesUsd: Math.abs(debtAdjustmentUsd * (0, numberUtils_1.fromBps)(adjustmentFeeBps)),
|
125
|
+
targetRateBps,
|
111
126
|
};
|
112
127
|
}
|
113
|
-
function
|
128
|
+
function getFlashLoanRequirements(client, values, attemptNum) {
|
114
129
|
let supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
|
115
130
|
(values.dcaTokenType === generated_1.TokenType.Supply ? values.amountUsdToDcaIn : 0);
|
116
131
|
let debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
@@ -126,22 +141,35 @@ function rebalanceRequiresFlashLoan(client, values) {
|
|
126
141
|
const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
|
127
142
|
const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.02);
|
128
143
|
const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
129
|
-
const
|
130
|
-
|
131
|
-
(0,
|
132
|
-
|
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) > 3 ||
|
157
|
+
(insufficientDebtLiquidity && insufficientDebtLiquidity)) &&
|
158
|
+
(sufficientSignerSupplyLiquidity || sufficientSignerDebtLiquidity));
|
159
|
+
if (signerFlashLoan) {
|
160
|
+
useDebtLiquidity = !sufficientSignerSupplyLiquidity;
|
161
|
+
}
|
133
162
|
(0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
|
134
163
|
(0, generalUtils_2.consoleLog)("Use debt liquidity:", useDebtLiquidity);
|
135
164
|
(0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
|
136
|
-
return {
|
165
|
+
return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
|
137
166
|
}
|
138
|
-
function getFlashLoanDetails(client, values, jupQuote) {
|
139
|
-
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
|
167
|
+
function getFlashLoanDetails(client, flRequirements, values, jupQuote) {
|
140
168
|
let flashLoanToken = undefined;
|
141
169
|
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
142
170
|
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
143
171
|
const boosting = values.rebalanceDirection === generated_1.RebalanceDirection.Boost;
|
144
|
-
if (boosting || useDebtLiquidity) {
|
172
|
+
if (boosting || flRequirements.useDebtLiquidity) {
|
145
173
|
flashLoanToken = client.solautoPositionState.debt;
|
146
174
|
}
|
147
175
|
else {
|
@@ -150,16 +178,16 @@ function getFlashLoanDetails(client, values, jupQuote) {
|
|
150
178
|
if (jupQuote.swapMode !== "ExactOut" && jupQuote.swapMode !== "ExactIn") {
|
151
179
|
throw new Error("Token ledger swap not currently supported");
|
152
180
|
}
|
153
|
-
const baseUnitAmount = boosting || (!boosting && !useDebtLiquidity)
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
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
|
+
};
|
161
189
|
}
|
162
|
-
async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps, attemptNum) {
|
190
|
+
async function getJupSwapRebalanceDetails(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum) {
|
163
191
|
const input = values.rebalanceDirection === generated_1.RebalanceDirection.Boost
|
164
192
|
? client.solautoPositionState.debt
|
165
193
|
: client.solautoPositionState.supply;
|
@@ -175,8 +203,7 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
|
|
175
203
|
// Add this small percentage to account for the APR on the debt between now and the transaction
|
176
204
|
0.0001));
|
177
205
|
const repaying = values.rebalanceDirection === generated_1.RebalanceDirection.Repay;
|
178
|
-
const
|
179
|
-
const flashLoanRepayFromDebt = repaying && requiresFlashLoan && useDebtLiquidity;
|
206
|
+
const flashLoanRepayFromDebt = repaying && flRequirements && flRequirements.useDebtLiquidity;
|
180
207
|
const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
|
181
208
|
const exactIn = !exactOut;
|
182
209
|
const jupSwapInput = {
|
@@ -186,7 +213,6 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
|
|
186
213
|
exactOut,
|
187
214
|
amount: exactOut ? outputAmount : inputAmount,
|
188
215
|
};
|
189
|
-
(0, generalUtils_2.consoleLog)(targetLiqUtilizationRateBps, rebalanceToZero);
|
190
216
|
(0, generalUtils_2.consoleLog)(jupSwapInput);
|
191
217
|
let jupQuote = undefined;
|
192
218
|
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 };
|
@@ -11,6 +11,7 @@ import {
|
|
11
11
|
} from "@solana/spl-token";
|
12
12
|
import { SOLAUTO_MANAGER } from "./generalAccounts";
|
13
13
|
import { JUPITER_PROGRAM_ID } from "../jupiter-sdk";
|
14
|
+
import { HNT, JLP, JTO, JUP, PYTH, WETH } from "./tokenConstants";
|
14
15
|
|
15
16
|
export const SOLAUTO_PROD_PROGRAM = new PublicKey(
|
16
17
|
"AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV"
|
@@ -45,4 +46,13 @@ export const STANDARD_LUT_ACCOUNTS = [
|
|
45
46
|
JUPITER_PROGRAM_ID,
|
46
47
|
].map((x) => x.toString());
|
47
48
|
|
48
|
-
export const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
|
49
|
+
export const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
|
50
|
+
|
51
|
+
export const BROKEN_TOKENS = [
|
52
|
+
JUP,
|
53
|
+
JLP,
|
54
|
+
WETH,
|
55
|
+
HNT,
|
56
|
+
JTO,
|
57
|
+
PYTH
|
58
|
+
]
|
@@ -37,8 +37,10 @@ import {
|
|
37
37
|
import { getJupSwapTransaction } from "../utils/jupiterUtils";
|
38
38
|
import {
|
39
39
|
getFlashLoanDetails,
|
40
|
+
getFlashLoanRequirements,
|
40
41
|
getJupSwapRebalanceDetails,
|
41
42
|
getRebalanceValues,
|
43
|
+
RebalanceValues,
|
42
44
|
} from "../utils/solauto/rebalanceUtils";
|
43
45
|
import {
|
44
46
|
consoleLog,
|
@@ -71,10 +73,11 @@ import {
|
|
71
73
|
getJupiterErrorFromCode,
|
72
74
|
JUPITER_PROGRAM_ID,
|
73
75
|
} from "../jupiter-sdk";
|
74
|
-
import { PRICES } from "../constants";
|
76
|
+
import { JUP, PRICES, USDC } from "../constants";
|
75
77
|
import { TransactionItemInputs } from "../types";
|
76
78
|
import { safeGetPrice } from "../utils";
|
77
79
|
import { BundleSimulationError } from "../types/transactions";
|
80
|
+
import { getPackedSettings } from "http2";
|
78
81
|
|
79
82
|
interface wSolTokenUsage {
|
80
83
|
wSolTokenAccount: PublicKey;
|
@@ -598,7 +601,10 @@ export async function getTransactionChores(
|
|
598
601
|
return [choresBefore, choresAfter];
|
599
602
|
}
|
600
603
|
|
601
|
-
export async function requiresRefreshBeforeRebalance(
|
604
|
+
export async function requiresRefreshBeforeRebalance(
|
605
|
+
client: SolautoClient,
|
606
|
+
values: RebalanceValues
|
607
|
+
) {
|
602
608
|
const neverRefreshedBefore =
|
603
609
|
client.solautoPositionData &&
|
604
610
|
client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
|
@@ -690,9 +696,11 @@ export async function buildSolautoRebalanceTransaction(
|
|
690
696
|
);
|
691
697
|
client.log("Rebalance values: ", values);
|
692
698
|
|
699
|
+
const flRequirements = getFlashLoanRequirements(client, values, attemptNum);
|
693
700
|
const swapDetails = await getJupSwapRebalanceDetails(
|
694
701
|
client,
|
695
702
|
values,
|
703
|
+
flRequirements,
|
696
704
|
targetLiqUtilizationRateBps,
|
697
705
|
attemptNum
|
698
706
|
);
|
@@ -703,11 +711,15 @@ export async function buildSolautoRebalanceTransaction(
|
|
703
711
|
tokenLedgerIx,
|
704
712
|
swapIx,
|
705
713
|
} = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
|
706
|
-
|
714
|
+
|
715
|
+
const flashLoan = flRequirements
|
716
|
+
? getFlashLoanDetails(client, flRequirements, values, jupQuote)
|
717
|
+
: undefined;
|
707
718
|
|
708
719
|
let tx = transactionBuilder();
|
709
720
|
|
710
|
-
|
721
|
+
// REVERT ME
|
722
|
+
if (await requiresRefreshBeforeRebalance(client, values)) {
|
711
723
|
tx = tx.add(client.refresh());
|
712
724
|
}
|
713
725
|
|
@@ -753,7 +765,7 @@ export async function buildSolautoRebalanceTransaction(
|
|
753
765
|
tx = tx.add([
|
754
766
|
setupInstructions,
|
755
767
|
tokenLedgerIx,
|
756
|
-
client.flashBorrow(flashLoan, flashBorrowDest),
|
768
|
+
client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
|
757
769
|
...(addFirstRebalance ? [firstRebalance] : []),
|
758
770
|
...(rebalanceThenSwap
|
759
771
|
? [lastRebalance, swapIx]
|
@@ -912,10 +924,16 @@ export function getErrorInfo(
|
|
912
924
|
) {
|
913
925
|
canBeIgnored = true;
|
914
926
|
}
|
915
|
-
} else if (
|
927
|
+
} else if (
|
928
|
+
errCode !== undefined &&
|
929
|
+
errIx?.programId === MARGINFI_PROGRAM_ID
|
930
|
+
) {
|
916
931
|
programName = "Marginfi";
|
917
932
|
programError = marginfiError;
|
918
|
-
} else if (
|
933
|
+
} else if (
|
934
|
+
errCode !== undefined &&
|
935
|
+
errIx?.programId === JUPITER_PROGRAM_ID
|
936
|
+
) {
|
919
937
|
programName = "Jupiter";
|
920
938
|
programError = getJupiterErrorFromCode(errCode, createJupiterProgram());
|
921
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";
|
@@ -17,6 +17,7 @@ import {
|
|
17
17
|
retryWithExponentialBackoff,
|
18
18
|
tokenInfo,
|
19
19
|
} from "./generalUtils";
|
20
|
+
import { INF, PYTH } from "../constants";
|
20
21
|
|
21
22
|
const jupApi = createJupiterApiClient();
|
22
23
|
|
@@ -54,6 +55,16 @@ export async function getJupQuote(swapDetails: JupSwapInput) {
|
|
54
55
|
tokenInfo(swapDetails.inputMint).isMeme ||
|
55
56
|
tokenInfo(swapDetails.outputMint).isMeme;
|
56
57
|
|
58
|
+
const tokensWithLowAccounts = [PYTH, INF];
|
59
|
+
// TEMP REVERT ME
|
60
|
+
const useLowAccounts =
|
61
|
+
tokensWithLowAccounts.find((x) =>
|
62
|
+
swapDetails.inputMint.equals(new PublicKey(x))
|
63
|
+
) ||
|
64
|
+
tokensWithLowAccounts.find((x) =>
|
65
|
+
swapDetails.outputMint.equals(new PublicKey(x))
|
66
|
+
);
|
67
|
+
|
57
68
|
return await retryWithExponentialBackoff(
|
58
69
|
async () =>
|
59
70
|
await jupApi.quoteGet({
|
@@ -66,7 +77,9 @@ export async function getJupQuote(swapDetails: JupSwapInput) {
|
|
66
77
|
? "ExactIn"
|
67
78
|
: undefined,
|
68
79
|
slippageBps: memecoinSwap ? 500 : 200,
|
69
|
-
maxAccounts: !swapDetails.exactOut
|
80
|
+
maxAccounts: !swapDetails.exactOut
|
81
|
+
? 15
|
82
|
+
: undefined,
|
70
83
|
}),
|
71
84
|
2,
|
72
85
|
200
|
package/src/utils/priceUtils.ts
CHANGED
@@ -8,12 +8,11 @@ import {
|
|
8
8
|
consoleLog,
|
9
9
|
currentUnixSeconds,
|
10
10
|
retryWithExponentialBackoff,
|
11
|
-
tokenInfo,
|
12
11
|
zip,
|
13
12
|
} from "./generalUtils";
|
14
13
|
import * as OnDemand from "@switchboard-xyz/on-demand";
|
15
14
|
import { getJupPriceData, getJupQuote } from "./jupiterUtils";
|
16
|
-
import {
|
15
|
+
import { QuoteGetSwapModeEnum } from "@jup-ag/api";
|
17
16
|
|
18
17
|
export async function fetchTokenPrices(mints: PublicKey[]): Promise<number[]> {
|
19
18
|
const currentTime = currentUnixSeconds();
|
@@ -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,
|
@@ -24,13 +24,14 @@ import {
|
|
24
24
|
getLiqUtilzationRateBps,
|
25
25
|
getMaxLiqUtilizationRateBps,
|
26
26
|
getSolautoFeesBps,
|
27
|
+
maxBoostToBps,
|
27
28
|
maxRepayToBps,
|
28
29
|
toBaseUnit,
|
29
30
|
} from "../numberUtils";
|
30
31
|
import { USD_DECIMALS } from "../../constants/generalAccounts";
|
31
32
|
import { RebalanceAction } from "../../types";
|
32
33
|
import { getPriceImpact, safeGetPrice } from "../priceUtils";
|
33
|
-
import {
|
34
|
+
import { BROKEN_TOKENS, JUP, USDC, USDT } from "../../constants";
|
34
35
|
|
35
36
|
function getAdditionalAmountToDcaIn(dca: DCASettings): number {
|
36
37
|
if (dca.dcaInBaseUnit === BigInt(0)) {
|
@@ -169,6 +170,7 @@ export interface RebalanceValues {
|
|
169
170
|
rebalanceAction: RebalanceAction;
|
170
171
|
rebalanceDirection: RebalanceDirection;
|
171
172
|
feesUsd: number;
|
173
|
+
targetRateBps: number;
|
172
174
|
}
|
173
175
|
|
174
176
|
export function getRebalanceValues(
|
@@ -180,7 +182,7 @@ export function getRebalanceValues(
|
|
180
182
|
debtPrice: number,
|
181
183
|
targetLiqUtilizationRateBps?: number
|
182
184
|
): RebalanceValues {
|
183
|
-
|
185
|
+
let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
|
184
186
|
state,
|
185
187
|
settings,
|
186
188
|
dca,
|
@@ -188,6 +190,20 @@ export function getRebalanceValues(
|
|
188
190
|
targetLiqUtilizationRateBps
|
189
191
|
);
|
190
192
|
|
193
|
+
// REVERT ME AND GET TO THE ROOT OF THIS ISSUE
|
194
|
+
const supplyMint = toWeb3JsPublicKey(state.supply.mint);
|
195
|
+
if (
|
196
|
+
BROKEN_TOKENS.includes(supplyMint.toString()) &&
|
197
|
+
(toWeb3JsPublicKey(state.debt.mint).equals(new PublicKey(USDC)) ||
|
198
|
+
toWeb3JsPublicKey(state.debt.mint).equals(new PublicKey(USDT))) &&
|
199
|
+
settings &&
|
200
|
+
settings.boostToBps ===
|
201
|
+
maxBoostToBps(state.maxLtvBps, state.liqThresholdBps) &&
|
202
|
+
targetRateBps === settings.boostToBps
|
203
|
+
) {
|
204
|
+
targetRateBps = 6500;
|
205
|
+
}
|
206
|
+
|
191
207
|
const amountUsdToDcaIn =
|
192
208
|
fromBaseUnit(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
|
193
209
|
(dca?.tokenType === TokenType.Debt ? debtPrice : supplyPrice);
|
@@ -218,6 +234,11 @@ export function getRebalanceValues(
|
|
218
234
|
adjustmentFeeBps
|
219
235
|
);
|
220
236
|
|
237
|
+
consoleLog(
|
238
|
+
"Target rate:",
|
239
|
+
targetRateBps,
|
240
|
+
maxBoostToBps(state.maxLtvBps, state.liqThresholdBps)
|
241
|
+
);
|
221
242
|
const maxRepayTo = maxRepayToBps(state.maxLtvBps, state.liqThresholdBps);
|
222
243
|
return {
|
223
244
|
debtAdjustmentUsd,
|
@@ -234,13 +255,20 @@ export function getRebalanceValues(
|
|
234
255
|
: "repay",
|
235
256
|
rebalanceDirection,
|
236
257
|
feesUsd: Math.abs(debtAdjustmentUsd * fromBps(adjustmentFeeBps)),
|
258
|
+
targetRateBps,
|
237
259
|
};
|
238
260
|
}
|
239
261
|
|
240
|
-
export
|
262
|
+
export interface FlashLoanRequirements {
|
263
|
+
useDebtLiquidity: boolean;
|
264
|
+
signerFlashLoan: boolean;
|
265
|
+
}
|
266
|
+
|
267
|
+
export function getFlashLoanRequirements(
|
241
268
|
client: SolautoClient,
|
242
|
-
values: RebalanceValues
|
243
|
-
|
269
|
+
values: RebalanceValues,
|
270
|
+
attemptNum?: number
|
271
|
+
): FlashLoanRequirements | undefined {
|
244
272
|
let supplyUsd =
|
245
273
|
fromBaseUnit(
|
246
274
|
client.solautoPositionState!.supply.amountUsed.baseAmountUsdValue,
|
@@ -275,11 +303,32 @@ export function rebalanceRequiresFlashLoan(
|
|
275
303
|
const requiresFlashLoan =
|
276
304
|
supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
277
305
|
|
278
|
-
const
|
279
|
-
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 =
|
280
311
|
Math.abs(values.debtAdjustmentUsd) * 0.9 >
|
281
|
-
|
282
|
-
|
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) > 3 ||
|
326
|
+
(insufficientDebtLiquidity && insufficientDebtLiquidity)) &&
|
327
|
+
(sufficientSignerSupplyLiquidity || sufficientSignerDebtLiquidity)
|
328
|
+
);
|
329
|
+
if (signerFlashLoan) {
|
330
|
+
useDebtLiquidity = !sufficientSignerSupplyLiquidity;
|
331
|
+
}
|
283
332
|
|
284
333
|
consoleLog("Requires flash loan:", requiresFlashLoan);
|
285
334
|
consoleLog("Use debt liquidity:", useDebtLiquidity);
|
@@ -292,32 +341,27 @@ export function rebalanceRequiresFlashLoan(
|
|
292
341
|
maxLiqUtilizationRateBps
|
293
342
|
);
|
294
343
|
|
295
|
-
return {
|
344
|
+
return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
|
296
345
|
}
|
297
346
|
|
298
|
-
export interface FlashLoanDetails {
|
347
|
+
export interface FlashLoanDetails extends FlashLoanRequirements {
|
299
348
|
baseUnitAmount: bigint;
|
300
349
|
mint: PublicKey;
|
301
|
-
useDebtLiquidity: boolean;
|
302
350
|
}
|
303
351
|
|
304
352
|
export function getFlashLoanDetails(
|
305
353
|
client: SolautoClient,
|
354
|
+
flRequirements: FlashLoanRequirements,
|
306
355
|
values: RebalanceValues,
|
307
356
|
jupQuote: QuoteResponse
|
308
357
|
): FlashLoanDetails | undefined {
|
309
|
-
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
|
310
|
-
client,
|
311
|
-
values
|
312
|
-
);
|
313
|
-
|
314
358
|
let flashLoanToken: PositionTokenUsage | undefined = undefined;
|
315
359
|
|
316
360
|
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
317
361
|
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
318
362
|
|
319
363
|
const boosting = values.rebalanceDirection === RebalanceDirection.Boost;
|
320
|
-
if (boosting || useDebtLiquidity) {
|
364
|
+
if (boosting || flRequirements.useDebtLiquidity) {
|
321
365
|
flashLoanToken = client.solautoPositionState!.debt;
|
322
366
|
} else {
|
323
367
|
flashLoanToken = client.solautoPositionState!.supply;
|
@@ -328,20 +372,21 @@ export function getFlashLoanDetails(
|
|
328
372
|
}
|
329
373
|
|
330
374
|
const baseUnitAmount =
|
331
|
-
boosting || (!boosting && !useDebtLiquidity)
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
375
|
+
boosting || (!boosting && !flRequirements.useDebtLiquidity)
|
376
|
+
? inAmount
|
377
|
+
: outAmount;
|
378
|
+
|
379
|
+
return {
|
380
|
+
...flRequirements,
|
381
|
+
baseUnitAmount,
|
382
|
+
mint: toWeb3JsPublicKey(flashLoanToken.mint),
|
383
|
+
};
|
340
384
|
}
|
341
385
|
|
342
386
|
export async function getJupSwapRebalanceDetails(
|
343
387
|
client: SolautoClient,
|
344
388
|
values: RebalanceValues,
|
389
|
+
flRequirements?: FlashLoanRequirements,
|
345
390
|
targetLiqUtilizationRateBps?: number,
|
346
391
|
attemptNum?: number
|
347
392
|
): Promise<JupSwapDetails> {
|
@@ -375,12 +420,8 @@ export async function getJupSwapRebalanceDetails(
|
|
375
420
|
|
376
421
|
const repaying = values.rebalanceDirection === RebalanceDirection.Repay;
|
377
422
|
|
378
|
-
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
|
379
|
-
client,
|
380
|
-
values
|
381
|
-
);
|
382
423
|
const flashLoanRepayFromDebt =
|
383
|
-
repaying &&
|
424
|
+
repaying && flRequirements && flRequirements.useDebtLiquidity;
|
384
425
|
|
385
426
|
const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
|
386
427
|
const exactIn = !exactOut;
|
@@ -392,7 +433,6 @@ export async function getJupSwapRebalanceDetails(
|
|
392
433
|
exactOut,
|
393
434
|
amount: exactOut ? outputAmount : inputAmount,
|
394
435
|
};
|
395
|
-
consoleLog(targetLiqUtilizationRateBps, rebalanceToZero);
|
396
436
|
consoleLog(jupSwapInput);
|
397
437
|
|
398
438
|
let jupQuote: QuoteResponse | undefined = undefined;
|
@@ -3,12 +3,16 @@ import { none, publicKey, some } from "@metaplex-foundation/umi";
|
|
3
3
|
import { setupTest } from "../shared";
|
4
4
|
import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
|
5
5
|
import {
|
6
|
+
PositionType,
|
6
7
|
safeFetchSolautoPosition,
|
7
8
|
solautoAction,
|
8
9
|
SolautoSettingsParametersInpArgs,
|
9
10
|
} from "../../src/generated";
|
10
11
|
import { buildSolautoRebalanceTransaction } from "../../src/transactions/transactionUtils";
|
11
12
|
import {
|
13
|
+
bytesToI80F48,
|
14
|
+
getLiqUtilzationRateBps,
|
15
|
+
getMaxLiqUtilizationRateBps,
|
12
16
|
maxBoostToBps,
|
13
17
|
maxRepayFromBps,
|
14
18
|
maxRepayToBps,
|
@@ -21,14 +25,20 @@ import {
|
|
21
25
|
} from "../../src/transactions/transactionsManager";
|
22
26
|
import { PublicKey } from "@solana/web3.js";
|
23
27
|
import {
|
28
|
+
DEFAULT_MARGINFI_GROUP,
|
29
|
+
MARGINFI_ACCOUNTS,
|
24
30
|
SOLAUTO_PROD_PROGRAM,
|
25
31
|
SOLAUTO_TEST_PROGRAM,
|
26
32
|
USDC,
|
33
|
+
USDT,
|
27
34
|
} from "../../src/constants";
|
28
35
|
import {
|
29
36
|
buildHeliusApiUrl,
|
37
|
+
getAllPositionsByAuthority,
|
30
38
|
getQnComputeUnitPriceEstimate,
|
31
39
|
getSolautoManagedPositions,
|
40
|
+
getSolautoPositionAccount,
|
41
|
+
retryWithExponentialBackoff,
|
32
42
|
} from "../../src/utils";
|
33
43
|
import { PriorityFeeSetting } from "../../src/types";
|
34
44
|
import { buildIronforgeApiUrl } from "../../dist";
|
@@ -38,7 +48,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
38
48
|
// const signer = setupTest();
|
39
49
|
const signer = setupTest("solauto-manager");
|
40
50
|
|
41
|
-
const payForTransactions =
|
51
|
+
const payForTransactions = true;
|
42
52
|
const testProgram = false;
|
43
53
|
const positionId = 1;
|
44
54
|
|
@@ -56,7 +66,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
56
66
|
await client.initialize({
|
57
67
|
signer,
|
58
68
|
positionId,
|
59
|
-
authority: new PublicKey("
|
69
|
+
authority: new PublicKey("HqpPtE5WbBh3xU9C1Tzz125iYDQyoyodvFCRpwHwQpNc"),
|
60
70
|
// new: true,
|
61
71
|
// marginfiAccount: new PublicKey(
|
62
72
|
// ""
|
@@ -94,6 +104,15 @@ describe("Solauto Marginfi tests", async () => {
|
|
94
104
|
// targetBoostToBps: none(),
|
95
105
|
// };
|
96
106
|
|
107
|
+
const settingParams: SolautoSettingsParametersInpArgs = {
|
108
|
+
boostToBps: client.solautoPositionSettings().boostToBps - 150,
|
109
|
+
boostGap: 50,
|
110
|
+
repayToBps: client.solautoPositionSettings().repayToBps - 150,
|
111
|
+
repayGap: 50,
|
112
|
+
automation: none(),
|
113
|
+
targetBoostToBps: none(),
|
114
|
+
};
|
115
|
+
|
97
116
|
// if (client.solautoPositionData === null) {
|
98
117
|
// transactionItems.push(
|
99
118
|
// new TransactionItem(async () => {
|
@@ -144,10 +163,17 @@ describe("Solauto Marginfi tests", async () => {
|
|
144
163
|
)
|
145
164
|
);
|
146
165
|
|
166
|
+
// transactionItems.push(
|
167
|
+
// new TransactionItem(
|
168
|
+
// async () => ({ tx: client.refresh() }),
|
169
|
+
// "refresh"
|
170
|
+
// )
|
171
|
+
// );
|
172
|
+
|
147
173
|
// transactionItems.push(
|
148
174
|
// new TransactionItem(
|
149
175
|
// async (attemptNum) =>
|
150
|
-
// await buildSolautoRebalanceTransaction(client,
|
176
|
+
// await buildSolautoRebalanceTransaction(client, 0, attemptNum),
|
151
177
|
// "rebalance"
|
152
178
|
// )
|
153
179
|
// );
|