@haven-fi/solauto-sdk 1.0.623 → 1.0.625
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/constants/{generalAccounts.d.ts → generalConstants.d.ts} +3 -1
- package/dist/constants/generalConstants.d.ts.map +1 -0
- package/dist/constants/{generalAccounts.js → generalConstants.js} +4 -1
- package/dist/constants/index.d.ts +6 -5
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -1
- package/dist/constants/marginfiAccounts.d.ts +4 -1
- package/dist/constants/marginfiAccounts.d.ts.map +1 -1
- package/dist/constants/marginfiAccounts.js +7 -5
- package/dist/constants/solautoConstants.d.ts +0 -3
- package/dist/constants/solautoConstants.d.ts.map +1 -1
- package/dist/constants/solautoConstants.js +3 -8
- package/dist/services/flashLoans/flProviderAggregator.d.ts +3 -3
- package/dist/services/flashLoans/flProviderAggregator.d.ts.map +1 -1
- package/dist/services/flashLoans/flProviderAggregator.js +5 -5
- package/dist/services/flashLoans/flProviderBase.d.ts +4 -3
- package/dist/services/flashLoans/flProviderBase.d.ts.map +1 -1
- package/dist/services/flashLoans/flProviderBase.js +3 -2
- package/dist/services/flashLoans/marginfiFlProvider.d.ts +2 -2
- package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
- package/dist/services/flashLoans/marginfiFlProvider.js +5 -26
- package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceSwapManager.js +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +4 -4
- package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -1
- package/dist/services/rebalance/solautoFees.d.ts.map +1 -1
- package/dist/services/rebalance/solautoFees.js +4 -2
- package/dist/services/solauto/solautoClient.d.ts +4 -3
- package/dist/services/solauto/solautoClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoClient.js +21 -24
- package/dist/services/solauto/solautoMarginfiClient.d.ts +3 -4
- package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoMarginfiClient.js +19 -20
- package/dist/services/solauto/txHandler.d.ts +4 -2
- package/dist/services/solauto/txHandler.d.ts.map +1 -1
- package/dist/services/solauto/txHandler.js +4 -6
- package/dist/services/swap/jupSwapManager.d.ts +1 -1
- package/dist/services/swap/jupSwapManager.d.ts.map +1 -1
- package/dist/services/swap/jupSwapManager.js +7 -10
- package/dist/services/transactions/transactionUtils.d.ts +2 -3
- package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/services/transactions/transactionUtils.js +43 -46
- package/dist/services/transactions/transactionsManager.d.ts +2 -3
- package/dist/services/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/services/transactions/transactionsManager.js +16 -20
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -1
- package/dist/solautoPosition/solautoPositionEx.d.ts +1 -1
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +1 -1
- package/dist/solautoPosition/utils.d.ts +2 -2
- package/dist/solautoPosition/utils.d.ts.map +1 -1
- package/dist/solautoPosition/utils.js +2 -2
- package/dist/types/solauto.d.ts +1 -0
- package/dist/types/solauto.d.ts.map +1 -1
- package/dist/utils/generalUtils.d.ts +2 -0
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +9 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/jitoUtils.d.ts.map +1 -1
- package/dist/utils/jitoUtils.js +7 -8
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.d.ts +7 -3
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +50 -19
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/priceUtils.d.ts.map +1 -1
- package/dist/utils/priceUtils.js +13 -15
- package/dist/utils/solanaUtils.d.ts +3 -5
- package/dist/utils/solanaUtils.d.ts.map +1 -1
- package/dist/utils/solanaUtils.js +7 -15
- package/dist/utils/solautoUtils.d.ts +3 -3
- package/dist/utils/solautoUtils.d.ts.map +1 -1
- package/dist/utils/solautoUtils.js +5 -5
- package/dist/utils/stringUtils.d.ts.map +1 -1
- package/dist/utils/stringUtils.js +3 -3
- package/dist/utils/switchboardUtils.d.ts +1 -1
- package/dist/utils/switchboardUtils.d.ts.map +1 -1
- package/dist/utils/switchboardUtils.js +4 -4
- package/local/createISMAccounts.ts +29 -12
- package/local/createTokenAccounts.ts +12 -11
- package/local/logPositions.ts +5 -5
- package/local/shared.ts +16 -10
- package/local/txSandbox.ts +5 -5
- package/local/updateMarginfiLUT.ts +35 -41
- package/local/updateSolautoLUT.ts +11 -13
- package/package.json +1 -1
- package/src/constants/{generalAccounts.ts → generalConstants.ts} +6 -1
- package/src/constants/index.ts +6 -5
- package/src/constants/marginfiAccounts.ts +15 -6
- package/src/constants/solautoConstants.ts +2 -10
- package/src/services/flashLoans/flProviderAggregator.ts +9 -7
- package/src/services/flashLoans/flProviderBase.ts +5 -4
- package/src/services/flashLoans/marginfiFlProvider.ts +6 -37
- package/src/services/rebalance/rebalanceSwapManager.ts +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +5 -5
- package/src/services/rebalance/rebalanceValues.ts +1 -1
- package/src/services/rebalance/solautoFees.ts +3 -4
- package/src/services/solauto/solautoClient.ts +9 -15
- package/src/services/solauto/solautoMarginfiClient.ts +21 -23
- package/src/services/solauto/txHandler.ts +10 -9
- package/src/services/swap/jupSwapManager.ts +7 -6
- package/src/services/transactions/transactionUtils.ts +17 -18
- package/src/services/transactions/transactionsManager.ts +23 -22
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -2
- package/src/solautoPosition/solautoPositionEx.ts +5 -5
- package/src/solautoPosition/utils.ts +7 -7
- package/src/types/solauto.ts +2 -0
- package/src/utils/generalUtils.ts +9 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/jitoUtils.ts +17 -14
- package/src/utils/jupiterUtils.ts +1 -1
- package/src/utils/marginfiUtils.ts +56 -14
- package/src/utils/numberUtils.ts +0 -1
- package/src/utils/priceUtils.ts +7 -5
- package/src/utils/solanaUtils.ts +24 -32
- package/src/utils/solautoUtils.ts +13 -13
- package/src/utils/stringUtils.ts +3 -3
- package/src/utils/switchboardUtils.ts +4 -4
- package/tests/transactions/shared.ts +9 -14
- package/tests/transactions/solautoMarginfi.ts +13 -3
- package/tests/unit/accounts.ts +14 -17
- package/tests/unit/lookupTables.ts +5 -5
- package/tests/unit/rebalanceCalculations.ts +17 -11
- package/README.md +0 -3
- package/dist/constants/generalAccounts.d.ts.map +0 -1
- package/src/constants/README.md +0 -7
@@ -3,13 +3,13 @@ import {
|
|
3
3
|
TokenBalanceChange,
|
4
4
|
TokenBalanceChangeType,
|
5
5
|
} from "../../generated";
|
6
|
-
import { SolautoPositionEx } from "../../solautoPosition";
|
7
6
|
import {
|
8
7
|
fromBps,
|
9
8
|
getLiqUtilzationRateBps,
|
10
9
|
maxRepayToBps,
|
11
10
|
toBps,
|
12
11
|
} from "../../utils";
|
12
|
+
import { SolautoPositionEx } from "../../solautoPosition";
|
13
13
|
import { SolautoFeesBps } from "./solautoFees";
|
14
14
|
|
15
15
|
export interface PositionValues {
|
@@ -37,10 +37,9 @@ export class SolautoFeesBps {
|
|
37
37
|
|
38
38
|
let feeBps: number = 0;
|
39
39
|
|
40
|
-
if (
|
41
|
-
|
42
|
-
|
43
|
-
) {
|
40
|
+
if (this.targetLiqUtilizationRateBps !== undefined) {
|
41
|
+
feeBps = 15;
|
42
|
+
} else if (rebalanceDirection === RebalanceDirection.Repay) {
|
44
43
|
feeBps = 25;
|
45
44
|
} else if (this.positionNetWorthUsd <= minSize) {
|
46
45
|
feeBps = maxFeeBps;
|
@@ -1,10 +1,5 @@
|
|
1
1
|
import "rpc-websockets/dist/lib/client";
|
2
|
-
import {
|
3
|
-
AddressLookupTableProgram,
|
4
|
-
PublicKey,
|
5
|
-
RpcResponseAndContext,
|
6
|
-
TokenAmount,
|
7
|
-
} from "@solana/web3.js";
|
2
|
+
import { AddressLookupTableProgram, PublicKey } from "@solana/web3.js";
|
8
3
|
import {
|
9
4
|
TransactionBuilder,
|
10
5
|
isOption,
|
@@ -28,15 +23,13 @@ import {
|
|
28
23
|
import {
|
29
24
|
getSolautoPositionAccount,
|
30
25
|
getTokenAccount,
|
31
|
-
} from "../../utils/accountUtils";
|
32
|
-
import { SOLAUTO_FEES_WALLET } from "../../constants/generalAccounts";
|
33
|
-
import {
|
34
26
|
getWalletSplBalances,
|
35
27
|
getWrappedInstruction,
|
36
28
|
splTokenTransferUmiIx,
|
37
|
-
|
38
|
-
|
39
|
-
import {
|
29
|
+
ContextUpdates,
|
30
|
+
} from "../../utils";
|
31
|
+
import { SOLAUTO_FEES_WALLET, SOLAUTO_LUT } from "../../constants";
|
32
|
+
import { ProgramEnv, RebalanceDetails } from "../../types";
|
40
33
|
import {
|
41
34
|
ReferralStateManager,
|
42
35
|
ReferralStateManagerArgs,
|
@@ -45,8 +38,7 @@ import {
|
|
45
38
|
getOrCreatePositionEx,
|
46
39
|
SolautoPositionEx,
|
47
40
|
} from "../../solautoPosition";
|
48
|
-
import {
|
49
|
-
import { FlProviderAggregator } from "../flashLoans/flProviderAggregator";
|
41
|
+
import { FlProviderAggregator } from "../flashLoans";
|
50
42
|
|
51
43
|
export interface SolautoClientArgs extends ReferralStateManagerArgs {
|
52
44
|
new?: boolean;
|
@@ -59,6 +51,7 @@ export interface SolautoClientArgs extends ReferralStateManagerArgs {
|
|
59
51
|
|
60
52
|
export abstract class SolautoClient extends ReferralStateManager {
|
61
53
|
public lendingPlatform!: LendingPlatform;
|
54
|
+
public lpEnv!: ProgramEnv;
|
62
55
|
|
63
56
|
public authority!: PublicKey;
|
64
57
|
|
@@ -153,7 +146,8 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
153
146
|
this.signer,
|
154
147
|
this.authority,
|
155
148
|
this.pos.supplyMint(),
|
156
|
-
this.pos.debtMint()
|
149
|
+
this.pos.debtMint(),
|
150
|
+
this.lpEnv
|
157
151
|
);
|
158
152
|
await this.flProvider.initialize();
|
159
153
|
this.otherSigners.push(...this.flProvider.otherSigners());
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
|
2
2
|
import {
|
3
3
|
Signer,
|
4
4
|
TransactionBuilder,
|
@@ -6,13 +6,12 @@ import {
|
|
6
6
|
PublicKey as UmiPublicKey,
|
7
7
|
createSignerFromKeypair,
|
8
8
|
} from "@metaplex-foundation/umi";
|
9
|
-
import {
|
10
|
-
import {
|
11
|
-
import { MarginfiAssetAccounts } from "../../types/accounts";
|
9
|
+
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
10
|
+
import { MarginfiAssetAccounts, RebalanceDetails } from "../../types";
|
12
11
|
import {
|
13
12
|
MARGINFI_ACCOUNTS,
|
14
13
|
MARGINFI_ACCOUNTS_LOOKUP_TABLE,
|
15
|
-
} from "../../constants
|
14
|
+
} from "../../constants";
|
16
15
|
import {
|
17
16
|
DCASettingsInpArgs,
|
18
17
|
LendingPlatform,
|
@@ -29,9 +28,13 @@ import {
|
|
29
28
|
marginfiRebalance,
|
30
29
|
marginfiRefreshData,
|
31
30
|
} from "../../generated";
|
32
|
-
import { getTokenAccount } from "../../utils/accountUtils";
|
33
31
|
import {
|
34
|
-
|
32
|
+
getAllMarginfiAccountsByAuthority,
|
33
|
+
marginfiAccountEmpty,
|
34
|
+
getTokenAccount,
|
35
|
+
hasFirstRebalance,
|
36
|
+
} from "../../utils";
|
37
|
+
import {
|
35
38
|
lendingAccountBorrow,
|
36
39
|
lendingAccountDeposit,
|
37
40
|
lendingAccountRepay,
|
@@ -39,12 +42,7 @@ import {
|
|
39
42
|
marginfiAccountInitialize,
|
40
43
|
safeFetchAllMarginfiAccount,
|
41
44
|
} from "../../marginfi-sdk";
|
42
|
-
import {
|
43
|
-
getAllMarginfiAccountsByAuthority,
|
44
|
-
marginfiAccountEmpty,
|
45
|
-
} from "../../utils/marginfiUtils";
|
46
|
-
import { hasFirstRebalance } from "../../utils/solautoUtils";
|
47
|
-
import { RebalanceDetails } from "../../types";
|
45
|
+
import { SolautoClient, SolautoClientArgs } from "./solautoClient";
|
48
46
|
|
49
47
|
export class SolautoMarginfiClient extends SolautoClient {
|
50
48
|
public lendingPlatform = LendingPlatform.Marginfi;
|
@@ -64,6 +62,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
64
62
|
async initialize(args: SolautoClientArgs) {
|
65
63
|
await super.initialize(args);
|
66
64
|
|
65
|
+
this.marginfiProgram = toWeb3JsPublicKey(
|
66
|
+
this.umi.programs.get("marginfi").publicKey
|
67
|
+
);
|
68
|
+
|
67
69
|
this.marginfiGroup = await this.pos.lendingPool();
|
68
70
|
|
69
71
|
if (this.selfManaged) {
|
@@ -169,7 +171,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
169
171
|
|
170
172
|
return marginfiOpenPosition(this.umi, {
|
171
173
|
signer: this.signer,
|
172
|
-
marginfiProgram: publicKey(
|
174
|
+
marginfiProgram: publicKey(this.marginfiProgram),
|
173
175
|
signerReferralState: publicKey(this.referralState),
|
174
176
|
referredByState: this.referredByState
|
175
177
|
? publicKey(this.referredByState)
|
@@ -214,7 +216,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
214
216
|
refreshIx(): TransactionBuilder {
|
215
217
|
return marginfiRefreshData(this.umi, {
|
216
218
|
signer: this.signer,
|
217
|
-
marginfiProgram: publicKey(
|
219
|
+
marginfiProgram: publicKey(this.marginfiProgram),
|
218
220
|
marginfiGroup: publicKey(this.marginfiGroup),
|
219
221
|
marginfiAccount: publicKey(this.marginfiAccount),
|
220
222
|
supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
|
@@ -342,7 +344,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
342
344
|
|
343
345
|
return marginfiProtocolInteraction(this.umi, {
|
344
346
|
signer: this.signer,
|
345
|
-
marginfiProgram: publicKey(
|
347
|
+
marginfiProgram: publicKey(this.marginfiProgram),
|
346
348
|
solautoPosition: publicKey(this.pos.publicKey),
|
347
349
|
marginfiGroup: publicKey(this.marginfiGroup),
|
348
350
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
@@ -393,7 +395,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
393
395
|
|
394
396
|
return marginfiRebalance(this.umi, {
|
395
397
|
signer: this.signer,
|
396
|
-
marginfiProgram: publicKey(
|
398
|
+
marginfiProgram: publicKey(this.marginfiProgram),
|
397
399
|
ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
|
398
400
|
solautoFeesTa: publicKey(
|
399
401
|
data.values.rebalanceDirection === RebalanceDirection.Boost
|
@@ -425,9 +427,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
425
427
|
supplyPriceOracle: publicKey(this.supplyPriceOracle),
|
426
428
|
positionSupplyTa: publicKey(this.positionSupplyTa),
|
427
429
|
authoritySupplyTa: addAuthorityTas
|
428
|
-
? publicKey(
|
429
|
-
getTokenAccount(this.authority, this.pos.supplyMint())
|
430
|
-
)
|
430
|
+
? publicKey(getTokenAccount(this.authority, this.pos.supplyMint()))
|
431
431
|
: undefined,
|
432
432
|
vaultSupplyTa: needSupplyAccounts
|
433
433
|
? publicKey(this.marginfiSupplyAccounts.liquidityVault)
|
@@ -439,9 +439,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
439
439
|
debtPriceOracle: publicKey(this.debtPriceOracle),
|
440
440
|
positionDebtTa: publicKey(this.positionDebtTa),
|
441
441
|
authorityDebtTa: addAuthorityTas
|
442
|
-
? publicKey(
|
443
|
-
getTokenAccount(this.authority, this.pos.debtMint())
|
444
|
-
)
|
442
|
+
? publicKey(getTokenAccount(this.authority, this.pos.debtMint()))
|
445
443
|
: undefined,
|
446
444
|
vaultDebtTa: needDebtAccounts
|
447
445
|
? publicKey(this.marginfiDebtAccounts.liquidityVault)
|
@@ -1,11 +1,12 @@
|
|
1
|
-
import { Signer, signerIdentity, Umi } from "@metaplex-foundation/umi";
|
2
1
|
import { Connection, PublicKey } from "@solana/web3.js";
|
3
|
-
import {
|
4
|
-
import { SOLAUTO_PROD_PROGRAM } from "../../constants";
|
2
|
+
import { Signer, signerIdentity, Umi } from "@metaplex-foundation/umi";
|
5
3
|
import {
|
6
4
|
WalletAdapter,
|
7
5
|
walletAdapterIdentity,
|
8
6
|
} from "@metaplex-foundation/umi-signer-wallet-adapters";
|
7
|
+
import { consoleLog, getSolanaRpcConnection } from "../../utils";
|
8
|
+
import { SOLAUTO_PROD_PROGRAM } from "../../constants";
|
9
|
+
import { ProgramEnv } from "../../types";
|
9
10
|
|
10
11
|
export interface TxHandlerProps {
|
11
12
|
signer?: Signer;
|
@@ -13,13 +14,14 @@ export interface TxHandlerProps {
|
|
13
14
|
rpcUrl: string;
|
14
15
|
showLogs?: boolean;
|
15
16
|
programId?: PublicKey;
|
16
|
-
|
17
|
+
lpEnv?: ProgramEnv;
|
17
18
|
}
|
18
19
|
|
19
20
|
export abstract class TxHandler {
|
20
21
|
public rpcUrl!: string;
|
21
22
|
public showLogs = false;
|
22
|
-
public programId
|
23
|
+
public programId!: PublicKey;
|
24
|
+
public lpEnv!: ProgramEnv;
|
23
25
|
|
24
26
|
public connection!: Connection;
|
25
27
|
public umi!: Umi;
|
@@ -27,15 +29,14 @@ export abstract class TxHandler {
|
|
27
29
|
public otherSigners: Signer[] = [];
|
28
30
|
|
29
31
|
constructor(props: TxHandlerProps) {
|
30
|
-
|
31
|
-
|
32
|
-
}
|
32
|
+
this.programId = props.programId ?? SOLAUTO_PROD_PROGRAM;
|
33
|
+
this.lpEnv = props.lpEnv ?? "Prod";
|
33
34
|
|
34
35
|
this.rpcUrl = props.rpcUrl;
|
35
36
|
const [connection, umi] = getSolanaRpcConnection(
|
36
37
|
this.rpcUrl,
|
37
38
|
this.programId,
|
38
|
-
|
39
|
+
this.lpEnv
|
39
40
|
);
|
40
41
|
this.connection = connection;
|
41
42
|
this.umi = umi;
|
@@ -1,24 +1,25 @@
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
1
2
|
import {
|
2
3
|
Signer,
|
3
4
|
TransactionBuilder,
|
4
5
|
transactionBuilder,
|
5
6
|
} from "@metaplex-foundation/umi";
|
7
|
+
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
6
8
|
import {
|
7
9
|
createJupiterApiClient,
|
8
10
|
QuoteResponse,
|
9
11
|
SwapInstructionsResponse,
|
10
12
|
} from "@jup-ag/api";
|
11
|
-
import { getWrappedInstruction } from "../../utils/solanaUtils";
|
12
|
-
import { fromBps, toBps } from "../../utils/numberUtils";
|
13
|
-
import { getTokenAccount } from "../../utils/accountUtils";
|
14
|
-
import { PublicKey } from "@solana/web3.js";
|
15
13
|
import {
|
16
14
|
consoleLog,
|
17
|
-
jupIxToSolanaIx,
|
18
15
|
retryWithExponentialBackoff,
|
16
|
+
getWrappedInstruction,
|
17
|
+
fromBps,
|
18
|
+
toBps,
|
19
|
+
getTokenAccount,
|
20
|
+
jupIxToSolanaIx,
|
19
21
|
} from "../../utils";
|
20
22
|
import { TransactionItemInputs } from "../../types";
|
21
|
-
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
22
23
|
|
23
24
|
export interface SwapInput {
|
24
25
|
inputMint: PublicKey;
|
@@ -1,3 +1,8 @@
|
|
1
|
+
import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
|
2
|
+
import {
|
3
|
+
ACCOUNT_SIZE as TOKEN_ACCOUNT_SIZE,
|
4
|
+
NATIVE_MINT,
|
5
|
+
} from "@solana/spl-token";
|
1
6
|
import {
|
2
7
|
Instruction,
|
3
8
|
ProgramError,
|
@@ -8,11 +13,6 @@ import {
|
|
8
13
|
transactionBuilder,
|
9
14
|
} from "@metaplex-foundation/umi";
|
10
15
|
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
11
|
-
import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
|
12
|
-
import {
|
13
|
-
ACCOUNT_SIZE as TOKEN_ACCOUNT_SIZE,
|
14
|
-
NATIVE_MINT,
|
15
|
-
} from "@solana/spl-token";
|
16
16
|
import {
|
17
17
|
InvalidRebalanceConditionError,
|
18
18
|
SolautoAction,
|
@@ -27,19 +27,20 @@ import {
|
|
27
27
|
isSolautoAction,
|
28
28
|
solautoAction,
|
29
29
|
} from "../../generated";
|
30
|
-
import { SolautoClient } from "../solauto
|
30
|
+
import { SolautoClient, ReferralStateManager } from "../solauto";
|
31
31
|
import {
|
32
32
|
closeTokenAccountUmiIx,
|
33
33
|
createAssociatedTokenAccountUmiIx,
|
34
34
|
systemTransferUmiIx,
|
35
|
-
} from "../../utils/solanaUtils";
|
36
|
-
import {
|
37
35
|
consoleLog,
|
38
36
|
getSolanaAccountCreated,
|
39
37
|
rpcAccountCreated,
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
uint8ArrayToBigInt,
|
39
|
+
getTokenAccount,
|
40
|
+
getTokenAccountData,
|
41
|
+
isMarginfiClient,
|
42
|
+
isMarginfiProgram,
|
43
|
+
} from "../../utils";
|
43
44
|
import {
|
44
45
|
createMarginfiProgram,
|
45
46
|
getLendingAccountBorrowInstructionDataSerializer,
|
@@ -47,17 +48,14 @@ import {
|
|
47
48
|
getLendingAccountRepayInstructionDataSerializer,
|
48
49
|
getLendingAccountWithdrawInstructionDataSerializer,
|
49
50
|
getMarginfiErrorFromCode,
|
50
|
-
MARGINFI_PROGRAM_ID,
|
51
51
|
} from "../../marginfi-sdk";
|
52
|
-
import { JupSwapManager
|
52
|
+
import { JupSwapManager } from "../swap";
|
53
53
|
import {
|
54
54
|
createJupiterProgram,
|
55
55
|
getJupiterErrorFromCode,
|
56
56
|
JUPITER_PROGRAM_ID,
|
57
57
|
} from "../../jupiter-sdk";
|
58
|
-
import { TransactionItemInputs } from "../../types";
|
59
|
-
import { isMarginfiClient } from "../../utils";
|
60
|
-
import { BundleSimulationError } from "../../types/transactions";
|
58
|
+
import { TransactionItemInputs, BundleSimulationError } from "../../types";
|
61
59
|
|
62
60
|
interface wSolTokenUsage {
|
63
61
|
wSolTokenAccount: PublicKey;
|
@@ -410,7 +408,7 @@ function getSolautoActions(umi: Umi, tx: TransactionBuilder): SolautoAction[] {
|
|
410
408
|
} catch {}
|
411
409
|
}
|
412
410
|
|
413
|
-
if (x.programId
|
411
|
+
if (isMarginfiProgram(toWeb3JsPublicKey(x.programId))) {
|
414
412
|
try {
|
415
413
|
const serializer = getLendingAccountDepositInstructionDataSerializer();
|
416
414
|
const discriminator = uint8ArrayToBigInt(
|
@@ -680,7 +678,8 @@ export function getErrorInfo(
|
|
680
678
|
}
|
681
679
|
} else if (
|
682
680
|
errCode !== undefined &&
|
683
|
-
errIx
|
681
|
+
errIx &&
|
682
|
+
isMarginfiProgram(toWeb3JsPublicKey(errIx.programId))
|
684
683
|
) {
|
685
684
|
programName = "Marginfi";
|
686
685
|
programError = marginfiError;
|
@@ -1,37 +1,38 @@
|
|
1
1
|
import bs58 from "bs58";
|
2
|
+
import {
|
3
|
+
PublicKey,
|
4
|
+
TransactionExpiredBlockheightExceededError,
|
5
|
+
} from "@solana/web3.js";
|
2
6
|
import {
|
3
7
|
AddressLookupTableInput,
|
4
8
|
transactionBuilder,
|
5
9
|
TransactionBuilder,
|
6
10
|
Umi,
|
7
11
|
} from "@metaplex-foundation/umi";
|
8
|
-
import { SolautoClient } from "../solauto/solautoClient";
|
9
|
-
import {
|
10
|
-
addTxOptimizations,
|
11
|
-
getAddressLookupInputs,
|
12
|
-
sendSingleOptimizedTransaction,
|
13
|
-
} from "../../utils/solanaUtils";
|
14
|
-
import {
|
15
|
-
consoleLog,
|
16
|
-
ErrorsToThrow,
|
17
|
-
retryWithExponentialBackoff,
|
18
|
-
} from "../../utils/generalUtils";
|
19
|
-
import { getErrorInfo, getTransactionChores } from "./transactionUtils";
|
20
12
|
import {
|
21
13
|
PriorityFeeSetting,
|
22
14
|
priorityFeeSettingValues,
|
23
15
|
TransactionItemInputs,
|
24
16
|
TransactionRunType,
|
25
17
|
} from "../../types";
|
26
|
-
import { ReferralStateManager, TxHandler } from "..";
|
27
18
|
import {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
import {
|
33
|
-
|
34
|
-
|
19
|
+
SOLAUTO_PROD_PROGRAM,
|
20
|
+
SOLAUTO_TEST_PROGRAM,
|
21
|
+
SWITCHBOARD_PRICE_FEED_IDS,
|
22
|
+
} from "../../constants";
|
23
|
+
import {
|
24
|
+
consoleLog,
|
25
|
+
ErrorsToThrow,
|
26
|
+
retryWithExponentialBackoff,
|
27
|
+
addTxOptimizations,
|
28
|
+
getAddressLookupInputs,
|
29
|
+
sendSingleOptimizedTransaction,
|
30
|
+
buildSwbSubmitResponseTx,
|
31
|
+
getSwitchboardFeedData,
|
32
|
+
sendJitoBundledTransactions,
|
33
|
+
} from "../../utils";
|
34
|
+
import { SolautoClient, ReferralStateManager, TxHandler } from "../solauto";
|
35
|
+
import { getErrorInfo, getTransactionChores } from "./transactionUtils";
|
35
36
|
|
36
37
|
const CHORES_TX_NAME = "account chores";
|
37
38
|
const MAX_SUPPORTED_ACCOUNT_LOCKS = 64;
|
@@ -257,7 +258,7 @@ export class TransactionsManager {
|
|
257
258
|
private statusCallback?: (statuses: TransactionManagerStatuses) => void,
|
258
259
|
private txType?: TransactionRunType,
|
259
260
|
private priorityFeeSetting: PriorityFeeSetting = PriorityFeeSetting.Min,
|
260
|
-
private atomically: boolean =
|
261
|
+
private atomically: boolean = true,
|
261
262
|
private errorsToThrow?: ErrorsToThrow,
|
262
263
|
retryConfig?: RetryConfig
|
263
264
|
) {
|
@@ -266,7 +267,7 @@ export class TransactionsManager {
|
|
266
267
|
this.txHandler.umi
|
267
268
|
);
|
268
269
|
this.signableRetries =
|
269
|
-
retryConfig?.signableRetries ?? retryConfig?.totalRetries ??
|
270
|
+
retryConfig?.signableRetries ?? retryConfig?.totalRetries ?? 4;
|
270
271
|
this.totalRetries =
|
271
272
|
retryConfig?.totalRetries ?? retryConfig?.signableRetries ?? 4;
|
272
273
|
this.retryDelay = retryConfig?.retryDelay ?? 150;
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
|
-
import { SolautoPositionEx } from "./solautoPositionEx";
|
3
2
|
import {
|
4
3
|
Bank,
|
5
4
|
fetchMarginfiAccount,
|
@@ -14,9 +13,9 @@ import {
|
|
14
13
|
fromBaseUnit,
|
15
14
|
getBankLiquidityAvailableBaseUnit,
|
16
15
|
getMarginfiAccountPositionState,
|
17
|
-
toBps,
|
18
16
|
} from "../utils";
|
19
17
|
import { DEFAULT_MARGINFI_GROUP, MARGINFI_ACCOUNTS } from "../constants";
|
18
|
+
import { SolautoPositionEx } from "./solautoPositionEx";
|
20
19
|
|
21
20
|
export class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
22
21
|
private marginfiAccountData: MarginfiAccount | null = null;
|
@@ -1,4 +1,9 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
|
+
import { Umi } from "@metaplex-foundation/umi";
|
3
|
+
import {
|
4
|
+
fromWeb3JsPublicKey,
|
5
|
+
toWeb3JsPublicKey,
|
6
|
+
} from "@metaplex-foundation/umi-web3js-adapters";
|
2
7
|
import {
|
3
8
|
DCASettings,
|
4
9
|
fetchSolautoPosition,
|
@@ -7,7 +12,6 @@ import {
|
|
7
12
|
SolautoPosition,
|
8
13
|
SolautoSettingsParameters,
|
9
14
|
} from "../generated";
|
10
|
-
import { Umi } from "@metaplex-foundation/umi";
|
11
15
|
import {
|
12
16
|
calcDebtUsd,
|
13
17
|
calcNetWorth,
|
@@ -40,10 +44,6 @@ import {
|
|
40
44
|
SolautoFeesBps,
|
41
45
|
} from "../services/rebalance";
|
42
46
|
import { MIN_POSITION_STATE_FRESHNESS_SECS, TokenInfo } from "../constants";
|
43
|
-
import {
|
44
|
-
fromWeb3JsPublicKey,
|
45
|
-
toWeb3JsPublicKey,
|
46
|
-
} from "@metaplex-foundation/umi-web3js-adapters";
|
47
47
|
|
48
48
|
export interface PositionCustomArgs {
|
49
49
|
lendingPlatform: LendingPlatform;
|
@@ -1,4 +1,9 @@
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
1
2
|
import { Umi } from "@metaplex-foundation/umi";
|
3
|
+
import {
|
4
|
+
fromWeb3JsPublicKey,
|
5
|
+
toWeb3JsPublicKey,
|
6
|
+
} from "@metaplex-foundation/umi-web3js-adapters";
|
2
7
|
import {
|
3
8
|
LendingPlatform,
|
4
9
|
PositionState,
|
@@ -7,13 +12,6 @@ import {
|
|
7
12
|
SolautoSettingsParameters,
|
8
13
|
SolautoSettingsParametersInpArgs,
|
9
14
|
} from "../generated";
|
10
|
-
import { PublicKey } from "@solana/web3.js";
|
11
|
-
import { PositionCustomArgs, SolautoPositionEx } from "./solautoPositionEx";
|
12
|
-
import {
|
13
|
-
fromWeb3JsPublicKey,
|
14
|
-
toWeb3JsPublicKey,
|
15
|
-
} from "@metaplex-foundation/umi-web3js-adapters";
|
16
|
-
import { MarginfiSolautoPositionEx } from "./marginfiSolautoPositionEx";
|
17
15
|
import {
|
18
16
|
ContextUpdates,
|
19
17
|
currentUnixSeconds,
|
@@ -24,6 +22,8 @@ import {
|
|
24
22
|
tokenInfo,
|
25
23
|
toRoundedUsdValue,
|
26
24
|
} from "../utils";
|
25
|
+
import { PositionCustomArgs, SolautoPositionEx } from "./solautoPositionEx";
|
26
|
+
import { MarginfiSolautoPositionEx } from "./marginfiSolautoPositionEx";
|
27
27
|
|
28
28
|
export function createSolautoSettings(
|
29
29
|
settings: SolautoSettingsParametersInpArgs
|
package/src/types/solauto.ts
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
+
import axios from "axios";
|
1
2
|
import { PublicKey } from "@solana/web3.js";
|
2
3
|
import { MaybeRpcAccount, publicKey, Umi } from "@metaplex-foundation/umi";
|
3
4
|
import { TOKEN_INFO, TokenInfo } from "../constants";
|
4
|
-
|
5
|
+
|
6
|
+
export function buildHeliusApiUrl(heliusApiKey: string) {
|
7
|
+
return `https://mainnet.helius-rpc.com/?api-key=${heliusApiKey}`;
|
8
|
+
}
|
9
|
+
|
10
|
+
export function buildIronforgeApiUrl(ironforgeApiKey: string) {
|
11
|
+
return `https://rpc.ironforge.network/mainnet?apiKey=${ironforgeApiKey}`;
|
12
|
+
}
|
5
13
|
|
6
14
|
export function consoleLog(...args: any[]): void {
|
7
15
|
if ((globalThis as any).SHOW_LOGS) {
|
package/src/utils/index.ts
CHANGED
package/src/utils/jitoUtils.ts
CHANGED
@@ -5,8 +5,6 @@ import {
|
|
5
5
|
TransactionExpiredBlockheightExceededError,
|
6
6
|
VersionedTransaction,
|
7
7
|
} from "@solana/web3.js";
|
8
|
-
import { toWeb3JsTransaction } from "@metaplex-foundation/umi-web3js-adapters";
|
9
|
-
import { JITO_TIP_ACCOUNTS } from "../constants/solautoConstants";
|
10
8
|
import {
|
11
9
|
Signer,
|
12
10
|
TransactionBuilder,
|
@@ -14,6 +12,10 @@ import {
|
|
14
12
|
WrappedInstruction,
|
15
13
|
TransactionMessage,
|
16
14
|
} from "@metaplex-foundation/umi";
|
15
|
+
import { toWeb3JsTransaction } from "@metaplex-foundation/umi-web3js-adapters";
|
16
|
+
import { JITO_TIP_ACCOUNTS } from "../constants";
|
17
|
+
import { PriorityFeeSetting, TransactionRunType } from "../types";
|
18
|
+
import { BundleSimulationError } from "../types";
|
17
19
|
import {
|
18
20
|
assembleFinalTransaction,
|
19
21
|
getComputeUnitPriceEstimate,
|
@@ -25,10 +27,7 @@ import {
|
|
25
27
|
customRpcCall,
|
26
28
|
retryWithExponentialBackoff,
|
27
29
|
} from "./generalUtils";
|
28
|
-
import { PriorityFeeSetting, TransactionRunType } from "../types";
|
29
30
|
import base58 from "bs58";
|
30
|
-
import { BundleSimulationError } from "../types/transactions";
|
31
|
-
import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes";
|
32
31
|
|
33
32
|
export function getRandomTipAccount(): PublicKey {
|
34
33
|
const randomInt = Math.floor(Math.random() * JITO_TIP_ACCOUNTS.length);
|
@@ -190,14 +189,18 @@ async function pollBundleStatus(
|
|
190
189
|
while (Date.now() < endTime) {
|
191
190
|
await new Promise((resolve) => setTimeout(resolve, interval));
|
192
191
|
|
193
|
-
const statuses = await retryWithExponentialBackoff(
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
192
|
+
const statuses = await retryWithExponentialBackoff(
|
193
|
+
async () => {
|
194
|
+
const resp = await getBundleStatus(umi, bundleId);
|
195
|
+
// TODO: remove me
|
196
|
+
if (resp?.value?.length > 0 && resp.value[0] === null) {
|
197
|
+
throw new Error("No confirmation status");
|
198
|
+
}
|
199
|
+
return resp;
|
200
|
+
},
|
201
|
+
3,
|
202
|
+
250
|
203
|
+
);
|
201
204
|
|
202
205
|
if (statuses?.value?.length > 0) {
|
203
206
|
consoleLog("Statuses:", statuses);
|
@@ -283,7 +286,7 @@ export async function sendJitoBundledTransactions(
|
|
283
286
|
priorityFeeSetting,
|
284
287
|
onAwaitingSign
|
285
288
|
);
|
286
|
-
return resp ? [
|
289
|
+
return resp ? [base58.encode(resp)] : undefined;
|
287
290
|
}
|
288
291
|
|
289
292
|
consoleLog("Sending Jito bundle...");
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
|
2
|
-
import { retryWithExponentialBackoff } from "./generalUtils";
|
3
2
|
import { Instruction } from "@jup-ag/api";
|
3
|
+
import { retryWithExponentialBackoff } from "./generalUtils";
|
4
4
|
|
5
5
|
export function jupIxToSolanaIx(
|
6
6
|
instruction: Instruction
|