@haven-fi/solauto-sdk 1.0.624 → 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 +2 -3
- 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 +3 -4
- 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
@@ -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
|
@@ -1,16 +1,30 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
|
-
import { publicKey, Umi } from "@metaplex-foundation/umi";
|
2
|
+
import { Program, publicKey, Umi } from "@metaplex-foundation/umi";
|
3
3
|
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
4
|
+
import { ProgramEnv, MarginfiAssetAccounts } from "../types";
|
5
|
+
import { PositionState, PositionTokenState } from "../generated";
|
6
|
+
import {
|
7
|
+
DEFAULT_MARGINFI_GROUP,
|
8
|
+
MARGINFI_ACCOUNTS,
|
9
|
+
ALL_SUPPORTED_TOKENS,
|
10
|
+
MARGINFI_PROD_PROGRAM,
|
11
|
+
MARGINFI_STAGING_PROGRAM,
|
12
|
+
TOKEN_INFO,
|
13
|
+
USD_DECIMALS,
|
14
|
+
} from "../constants";
|
4
15
|
import {
|
5
16
|
Bank,
|
6
17
|
deserializeMarginfiAccount,
|
7
18
|
getMarginfiAccountSize,
|
8
|
-
|
19
|
+
getMarginfiErrorFromCode,
|
20
|
+
getMarginfiErrorFromName,
|
9
21
|
MarginfiAccount,
|
10
22
|
OracleSetup,
|
11
23
|
safeFetchBank,
|
12
24
|
safeFetchMarginfiAccount,
|
13
25
|
} from "../marginfi-sdk";
|
26
|
+
import { ContextUpdates } from "./solautoUtils";
|
27
|
+
import { fetchTokenPrices, safeGetPrice } from "./priceUtils";
|
14
28
|
import { currentUnixSeconds } from "./generalUtils";
|
15
29
|
import {
|
16
30
|
bytesToI80F48,
|
@@ -20,16 +34,44 @@ import {
|
|
20
34
|
toBaseUnit,
|
21
35
|
toBps,
|
22
36
|
} from "./numberUtils";
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
}
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
37
|
+
|
38
|
+
export function getMarginfiProgram(env: ProgramEnv) {
|
39
|
+
return env === "Prod" ? MARGINFI_PROD_PROGRAM : MARGINFI_STAGING_PROGRAM;
|
40
|
+
}
|
41
|
+
|
42
|
+
export function isMarginfiProgram(programId: PublicKey) {
|
43
|
+
return (
|
44
|
+
programId.equals(MARGINFI_PROD_PROGRAM) ||
|
45
|
+
programId.equals(MARGINFI_STAGING_PROGRAM)
|
46
|
+
);
|
47
|
+
}
|
48
|
+
|
49
|
+
export function createDynamicMarginfiProgram(env?: ProgramEnv): Program {
|
50
|
+
return {
|
51
|
+
name: "marginfi",
|
52
|
+
publicKey: publicKey(getMarginfiProgram(env ?? "Prod")),
|
53
|
+
getErrorFromCode(code: number, cause?: Error) {
|
54
|
+
return getMarginfiErrorFromCode(code, this, cause);
|
55
|
+
},
|
56
|
+
getErrorFromName(name: string, cause?: Error) {
|
57
|
+
return getMarginfiErrorFromName(name, this, cause);
|
58
|
+
},
|
59
|
+
isOnCluster() {
|
60
|
+
return true;
|
61
|
+
},
|
62
|
+
};
|
63
|
+
}
|
64
|
+
|
65
|
+
export function umiWithMarginfiProgram(umi: Umi, marginfiEnv?: ProgramEnv) {
|
66
|
+
return umi.use({
|
67
|
+
install(umi) {
|
68
|
+
umi.programs.add(
|
69
|
+
createDynamicMarginfiProgram(marginfiEnv ?? "Prod"),
|
70
|
+
false
|
71
|
+
);
|
72
|
+
},
|
73
|
+
});
|
74
|
+
}
|
33
75
|
|
34
76
|
interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
|
35
77
|
mint: PublicKey;
|
@@ -149,7 +191,7 @@ export async function getEmptyMarginfiAccountsByAuthority(
|
|
149
191
|
authority: PublicKey
|
150
192
|
): Promise<MarginfiAccount[]> {
|
151
193
|
const marginfiAccounts = await umi.rpc.getProgramAccounts(
|
152
|
-
|
194
|
+
umi.programs.get("marginfi").publicKey,
|
153
195
|
{
|
154
196
|
commitment: "confirmed",
|
155
197
|
filters: [
|
@@ -187,7 +229,7 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
187
229
|
{ marginfiAccount: PublicKey; supplyMint?: PublicKey; debtMint?: PublicKey }[]
|
188
230
|
> {
|
189
231
|
const marginfiAccounts = await umi.rpc.getProgramAccounts(
|
190
|
-
|
232
|
+
umi.programs.get("marginfi").publicKey,
|
191
233
|
{
|
192
234
|
commitment: "confirmed",
|
193
235
|
dataSlice: {
|
package/src/utils/numberUtils.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { BASIS_POINTS, MIN_REPAY_GAP_BPS, USD_DECIMALS } from "../constants";
|
2
2
|
import { PositionState } from "../generated";
|
3
|
-
import { tokenInfo } from "./generalUtils";
|
4
3
|
|
5
4
|
export function calcNetWorthUsd(state?: PositionState) {
|
6
5
|
return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0));
|
package/src/utils/priceUtils.ts
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { PublicKey as UmiPublicKey } from "@metaplex-foundation/umi";
|
3
|
-
import
|
4
|
-
import {
|
5
|
-
|
6
|
-
|
3
|
+
import * as SwbCommon from "@switchboard-xyz/common";
|
4
|
+
import {
|
5
|
+
PYTH_PRICE_FEED_IDS,
|
6
|
+
PRICES,
|
7
|
+
SWITCHBOARD_PRICE_FEED_IDS,
|
8
|
+
} from "../constants";
|
9
|
+
import { fromBaseUnit, toBaseUnit } from "./numberUtils";
|
7
10
|
import {
|
8
11
|
consoleLog,
|
9
12
|
currentUnixSeconds,
|
10
13
|
retryWithExponentialBackoff,
|
11
14
|
zip,
|
12
15
|
} from "./generalUtils";
|
13
|
-
import * as SwbCommon from "@switchboard-xyz/common";
|
14
16
|
import { getJupPriceData } from "./jupiterUtils";
|
15
17
|
|
16
18
|
export async function fetchTokenPrices(mints: PublicKey[]): Promise<number[]> {
|
package/src/utils/solanaUtils.ts
CHANGED
@@ -1,19 +1,4 @@
|
|
1
1
|
import bs58 from "bs58";
|
2
|
-
import {
|
3
|
-
AddressLookupTableInput,
|
4
|
-
Signer,
|
5
|
-
TransactionBuilder,
|
6
|
-
Umi,
|
7
|
-
WrappedInstruction,
|
8
|
-
publicKey,
|
9
|
-
transactionBuilder,
|
10
|
-
} from "@metaplex-foundation/umi";
|
11
|
-
import {
|
12
|
-
fromWeb3JsInstruction,
|
13
|
-
toWeb3JsPublicKey,
|
14
|
-
toWeb3JsTransaction,
|
15
|
-
} from "@metaplex-foundation/umi-web3js-adapters";
|
16
|
-
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
|
17
2
|
import {
|
18
3
|
AddressLookupTableAccount,
|
19
4
|
BlockhashWithExpiryBlockHeight,
|
@@ -32,6 +17,26 @@ import {
|
|
32
17
|
createCloseAccountInstruction,
|
33
18
|
createTransferInstruction,
|
34
19
|
} from "@solana/spl-token";
|
20
|
+
import {
|
21
|
+
AddressLookupTableInput,
|
22
|
+
Signer,
|
23
|
+
TransactionBuilder,
|
24
|
+
Umi,
|
25
|
+
WrappedInstruction,
|
26
|
+
publicKey,
|
27
|
+
transactionBuilder,
|
28
|
+
} from "@metaplex-foundation/umi";
|
29
|
+
import {
|
30
|
+
fromWeb3JsInstruction,
|
31
|
+
toWeb3JsPublicKey,
|
32
|
+
toWeb3JsTransaction,
|
33
|
+
} from "@metaplex-foundation/umi-web3js-adapters";
|
34
|
+
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
|
35
|
+
import { PriorityFeeSetting, ProgramEnv, TransactionRunType } from "../types";
|
36
|
+
import {
|
37
|
+
getLendingAccountEndFlashloanInstructionDataSerializer,
|
38
|
+
getLendingAccountStartFlashloanInstructionDataSerializer,
|
39
|
+
} from "../marginfi-sdk";
|
35
40
|
import { getTokenAccount } from "./accountUtils";
|
36
41
|
import {
|
37
42
|
arraysAreEqual,
|
@@ -39,34 +44,21 @@ import {
|
|
39
44
|
customRpcCall,
|
40
45
|
retryWithExponentialBackoff,
|
41
46
|
} from "./generalUtils";
|
42
|
-
import {
|
43
|
-
getLendingAccountEndFlashloanInstructionDataSerializer,
|
44
|
-
getLendingAccountStartFlashloanInstructionDataSerializer,
|
45
|
-
} from "../marginfi-sdk";
|
46
|
-
import { PriorityFeeSetting, TransactionRunType } from "../types";
|
47
|
-
import { SOLAUTO_PROD_PROGRAM } from "../constants";
|
48
47
|
import { createDynamicSolautoProgram } from "./solautoUtils";
|
49
|
-
|
50
|
-
export function buildHeliusApiUrl(heliusApiKey: string) {
|
51
|
-
return `https://mainnet.helius-rpc.com/?api-key=${heliusApiKey}`;
|
52
|
-
}
|
53
|
-
|
54
|
-
export function buildIronforgeApiUrl(ironforgeApiKey: string) {
|
55
|
-
return `https://rpc.ironforge.network/mainnet?apiKey=${ironforgeApiKey}`;
|
56
|
-
}
|
48
|
+
import { createDynamicMarginfiProgram } from "./marginfiUtils";
|
57
49
|
|
58
50
|
export function getSolanaRpcConnection(
|
59
51
|
rpcUrl: string,
|
60
|
-
programId
|
61
|
-
|
52
|
+
programId?: PublicKey,
|
53
|
+
lpEnv?: ProgramEnv
|
62
54
|
): [Connection, Umi] {
|
63
55
|
const connection = new Connection(rpcUrl, {
|
64
56
|
commitment: "confirmed",
|
65
|
-
wsEndpoint: wsEndpoint,
|
66
57
|
});
|
67
58
|
const umi = createUmi(connection).use({
|
68
59
|
install(umi) {
|
69
60
|
umi.programs.add(createDynamicSolautoProgram(programId), false);
|
61
|
+
umi.programs.add(createDynamicMarginfiProgram(lpEnv), false);
|
70
62
|
},
|
71
63
|
});
|
72
64
|
return [connection, umi];
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Program, publicKey, Umi } from "@metaplex-foundation/umi";
|
3
|
+
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
4
|
+
import { QuoteResponse } from "@jup-ag/api";
|
3
5
|
import {
|
4
6
|
AutomationSettings,
|
5
7
|
DCASettings,
|
@@ -17,21 +19,15 @@ import {
|
|
17
19
|
getSolautoPositionAccountDataSerializer,
|
18
20
|
getSolautoPositionSize,
|
19
21
|
} from "../generated";
|
20
|
-
import {
|
21
|
-
import {
|
22
|
-
import { ALL_SUPPORTED_TOKENS } from "../constants";
|
23
|
-
import {
|
24
|
-
findMarginfiAccounts,
|
25
|
-
getAllMarginfiAccountsByAuthority,
|
26
|
-
} from "./marginfiUtils";
|
27
|
-
import { SolautoPositionDetails } from "../types/solauto";
|
28
|
-
import { QuoteResponse } from "@jup-ag/api";
|
29
|
-
import { createSolautoSettings } from "../solautoPosition";
|
22
|
+
import { ALL_SUPPORTED_TOKENS, SOLAUTO_PROD_PROGRAM } from "../constants";
|
23
|
+
import { SolautoPositionDetails } from "../types";
|
30
24
|
import {
|
31
25
|
SolautoClient,
|
32
26
|
SolautoMarginfiClient,
|
33
27
|
TxHandlerProps,
|
34
28
|
} from "../services";
|
29
|
+
import { createSolautoSettings } from "../solautoPosition";
|
30
|
+
import { getReferralState } from "./accountUtils";
|
35
31
|
import {
|
36
32
|
calcTotalDebt,
|
37
33
|
calcTotalSupply,
|
@@ -41,11 +37,15 @@ import {
|
|
41
37
|
toRoundedUsdValue,
|
42
38
|
} from "./numberUtils";
|
43
39
|
import { fetchTokenPrices } from "./priceUtils";
|
40
|
+
import {
|
41
|
+
findMarginfiAccounts,
|
42
|
+
getAllMarginfiAccountsByAuthority,
|
43
|
+
} from "./marginfiUtils";
|
44
44
|
|
45
|
-
export function createDynamicSolautoProgram(programId
|
45
|
+
export function createDynamicSolautoProgram(programId?: PublicKey): Program {
|
46
46
|
return {
|
47
47
|
name: "solauto",
|
48
|
-
publicKey: publicKey(programId),
|
48
|
+
publicKey: publicKey(programId ?? SOLAUTO_PROD_PROGRAM),
|
49
49
|
getErrorFromCode(code: number, cause?: Error) {
|
50
50
|
return getSolautoErrorFromCode(code, this, cause);
|
51
51
|
},
|
@@ -471,4 +471,4 @@ export function hasLastRebalance(rebalanceType: SolautoRebalanceType) {
|
|
471
471
|
SolautoRebalanceType.DoubleRebalanceWithFL,
|
472
472
|
SolautoRebalanceType.FLSwapThenRebalance,
|
473
473
|
].includes(rebalanceType);
|
474
|
-
}
|
474
|
+
}
|
package/src/utils/stringUtils.ts
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
1
2
|
import { NATIVE_MINT } from "@solana/spl-token";
|
2
3
|
import { WBTC, WETH } from "../constants";
|
3
|
-
import { PublicKey } from "@solana/web3.js";
|
4
4
|
import { tokenInfo } from "./generalUtils";
|
5
5
|
|
6
6
|
export const StrategyTypes = ["Long", "Short", "Ratio"] as const;
|
7
7
|
export type StrategyType = (typeof StrategyTypes)[number];
|
8
8
|
|
9
9
|
const MAJORS_PRIO = {
|
10
|
-
[WBTC
|
11
|
-
[WETH
|
10
|
+
[WBTC]: 0,
|
11
|
+
[WETH]: 1,
|
12
12
|
[NATIVE_MINT.toString()]: 2,
|
13
13
|
};
|
14
14
|
|
@@ -1,16 +1,16 @@
|
|
1
|
-
import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor";
|
2
|
-
import switchboardIdl from "../idls/switchboard.json";
|
3
1
|
import {
|
4
2
|
Connection,
|
5
3
|
PublicKey,
|
6
4
|
Transaction,
|
7
5
|
VersionedTransaction,
|
8
6
|
} from "@solana/web3.js";
|
9
|
-
import { SWITCHBOARD_PRICE_FEED_IDS } from "../constants/switchboardConstants";
|
10
|
-
import { TransactionItemInputs } from "../types";
|
11
7
|
import { Signer, transactionBuilder } from "@metaplex-foundation/umi";
|
12
8
|
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
9
|
+
import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor";
|
13
10
|
import * as OnDemand from "@switchboard-xyz/on-demand";
|
11
|
+
import switchboardIdl from "../idls/switchboard.json";
|
12
|
+
import { SWITCHBOARD_PRICE_FEED_IDS } from "../constants";
|
13
|
+
import { TransactionItemInputs } from "../types";
|
14
14
|
import { retryWithExponentialBackoff } from "./generalUtils";
|
15
15
|
import { getWrappedInstruction } from "./solanaUtils";
|
16
16
|
|