From 10d54ef75ab36d1bc01a6de4bbbb349a17309ba1 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 27 Apr 2025 17:09:12 -0400 Subject: [PATCH 01/83] more token info --- solauto-sdk/package.json | 2 +- solauto-sdk/src/constants/tokenConstants.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 09e334b6..bf683164 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.729", + "version": "1.0.730", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/constants/tokenConstants.ts b/solauto-sdk/src/constants/tokenConstants.ts index 05c72e13..7e98f955 100644 --- a/solauto-sdk/src/constants/tokenConstants.ts +++ b/solauto-sdk/src/constants/tokenConstants.ts @@ -53,6 +53,7 @@ export const ALL_SUPPORTED_TOKENS = [ export interface TokenInfo { ticker: string; + name?: string; decimals: number; isStableCoin?: boolean; isLST?: boolean; @@ -67,21 +68,25 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [NATIVE_MINT.toString()]: { ticker: "SOL", + name: "Solana", decimals: 9, isMajor: true, }, [B_SOL]: { ticker: "bSOL", + name: "Blaze SOL", decimals: 9, isLST: true, }, [M_SOL]: { ticker: "mSOL", + name: "Marinade SOL", decimals: 9, isLST: true, }, [JITO_SOL]: { ticker: "JitoSOL", + name: "JITO SOL", decimals: 9, isLST: true, }, @@ -92,43 +97,52 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [INF]: { ticker: "INF", + name: "Infinity", decimals: 9, isLST: true, }, [H_SOL]: { ticker: "hSOL", + name: "Helius SOL", decimals: 9, isLST: true, }, [JUP_SOL]: { ticker: "JupSOL", + name: "Jupiter SOL", decimals: 9, isLST: true, }, [JUP]: { ticker: "JUP", + name: "Jupiter", decimals: 6, }, [JTO]: { ticker: "JTO", + name: "Jito", decimals: 9, }, [JLP]: { ticker: "JLP", + name: "Jupiter Liquidity Provider", decimals: 6, }, [WBTC]: { ticker: "WBTC", + name: "Wrapped Bitcoin", decimals: 8, isMajor: true, }, [WETH]: { ticker: "WETH", + name: "Wrapped Ethereum", decimals: 8, isMajor: true, }, [HNT]: { ticker: "HNT", + name: "Helium Network Token", decimals: 8, }, [PYTH]: { @@ -137,11 +151,13 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [USDC]: { ticker: "USDC", + name: "USD Circle", decimals: 6, isStableCoin: true, }, [USDT]: { ticker: "USDT", + name: "USD Tether", decimals: 6, isStableCoin: true, }, @@ -152,6 +168,7 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [WIF]: { ticker: "WIF", + name: "Dog Wif Hat", decimals: 6, isMeme: true, }, @@ -172,6 +189,7 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [HMTR]: { ticker: "HMTR", + name: "Hampter", decimals: 0, isMeme: true, }, From 86e7784f9aa9af54f07aba229a81eeac2af7c727 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 27 Apr 2025 21:53:29 -0400 Subject: [PATCH 02/83] fixes --- solauto-sdk/package.json | 2 +- .../services/rebalance/rebalanceTxBuilder.ts | 37 ++++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index bf683164..e5f1c198 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.730", + "version": "1.0.732", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts b/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts index 57fd60f4..a106b4d2 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts @@ -82,37 +82,38 @@ export class RebalanceTxBuilder { } private getFlLiquiditySource( + attemptNum: number, supplyLiquidityAvailable: bigint, debtLiquidityAvailable: bigint ): TokenType | undefined { const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd); - const insufficientLiquidity = ( - amountNeededUsd: number, + const calcLiquidityAvailable = ( liquidityAvailable: bigint, tokenMint: PublicKey - ) => { - const liquidityUsd = - fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) * - (safeGetPrice(tokenMint) ?? 0); - return amountNeededUsd > liquidityUsd * 0.95; - }; + ) => + fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) * + (safeGetPrice(tokenMint) ?? 0); - const insufficientSupplyLiquidity = insufficientLiquidity( - debtAdjustmentUsd, + const supplyLiquidityUsdAvailable = calcLiquidityAvailable( supplyLiquidityAvailable, this.client.pos.supplyMint ); + const insufficientSupplyLiquidity = + debtAdjustmentUsd > supplyLiquidityUsdAvailable * 0.95; - const insufficientDebtLiquidity = insufficientLiquidity( - debtAdjustmentUsd, + const debtLiquidityUsdAvailable = calcLiquidityAvailable( debtLiquidityAvailable, this.client.pos.debtMint ); + const insufficientDebtLiquidity = + debtAdjustmentUsd > debtLiquidityUsdAvailable * 0.95; let useDebtLiquidity = this.values.rebalanceDirection === RebalanceDirection.Boost || - insufficientSupplyLiquidity; + insufficientSupplyLiquidity || + (attemptNum > 2 && + debtLiquidityUsdAvailable > supplyLiquidityUsdAvailable * 5); if (useDebtLiquidity) { return !insufficientDebtLiquidity ? TokenType.Debt : undefined; @@ -153,9 +154,9 @@ export class RebalanceTxBuilder { return intermediaryLiqUtilizationRateBps; } - private async flashLoanRequirements(): Promise< - FlashLoanRequirements | undefined - > { + private async flashLoanRequirements( + attemptNum: number + ): Promise { const intermediaryLiqUtilizationRateBps = this.intermediaryLiqUtilizationRateBps(); const maxLtvRateBps = getMaxLiqUtilizationRateBps( @@ -168,6 +169,7 @@ export class RebalanceTxBuilder { } const stdFlLiquiditySource = this.getFlLiquiditySource( + attemptNum, this.client.flProvider.liquidityAvailable(TokenType.Supply), this.client.flProvider.liquidityAvailable(TokenType.Debt) ); @@ -175,6 +177,7 @@ export class RebalanceTxBuilder { if (stdFlLiquiditySource === undefined || this.optimizeSize) { const { supplyBalance, debtBalance } = await this.client.signerBalances(); const signerFlLiquiditySource = this.getFlLiquiditySource( + attemptNum, supplyBalance, debtBalance ); @@ -278,7 +281,7 @@ export class RebalanceTxBuilder { } this.values = rebalanceValues; - this.flRequirements = await this.flashLoanRequirements(); + this.flRequirements = await this.flashLoanRequirements(attemptNum); if (this.flRequirements?.flFeeBps) { this.values = this.getRebalanceValues()!; } From 03ec162d82420c255b683a70dd54480d56253456 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 30 Apr 2025 03:27:59 -0400 Subject: [PATCH 03/83] export function --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/stringUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index e5f1c198..da3c1875 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.732", + "version": "1.0.733", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/stringUtils.ts b/solauto-sdk/src/utils/stringUtils.ts index 4f6593e4..73e59753 100644 --- a/solauto-sdk/src/utils/stringUtils.ts +++ b/solauto-sdk/src/utils/stringUtils.ts @@ -6,7 +6,7 @@ import { tokenInfo } from "./generalUtils"; export const StrategyTypes = ["Long", "Short", "Ratio"] as const; export type StrategyType = (typeof StrategyTypes)[number]; -function adjustedTicker(mint?: PublicKey) { +export function adjustedTicker(mint?: PublicKey) { const info = tokenInfo(mint); if (info.ticker.toLowerCase() === "wbtc") { From 31d240581af744825bafdfdbd1487e75327a751f Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 30 Apr 2025 14:10:38 -0400 Subject: [PATCH 04/83] fixes --- programs/solauto/src/utils/validation_utils.rs | 4 ++-- solauto-sdk/package.json | 2 +- solauto-sdk/src/services/swap/jupSwapManager.ts | 6 ++---- .../transactions/manager/transactionsManager.ts | 13 ++++++++++--- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/programs/solauto/src/utils/validation_utils.rs b/programs/solauto/src/utils/validation_utils.rs index 84c9c861..131d9cf3 100644 --- a/programs/solauto/src/utils/validation_utils.rs +++ b/programs/solauto/src/utils/validation_utils.rs @@ -444,11 +444,11 @@ pub fn validate_rebalance(solauto_position: &SolautoPosition) -> ProgramResult { curr_debt_usd ); check!( - value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.1), + value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.2), SolautoError::InvalidRebalanceMade ); check!( - value_lte_with_threshold(curr_debt_usd, target_debt_usd, 0.1), + value_lte_with_threshold(curr_debt_usd, target_debt_usd, 0.2), SolautoError::InvalidRebalanceMade ); diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index da3c1875..d2f29d4e 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.733", + "version": "1.0.736", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/swap/jupSwapManager.ts b/solauto-sdk/src/services/swap/jupSwapManager.ts index 3918524a..28ae971e 100644 --- a/solauto-sdk/src/services/swap/jupSwapManager.ts +++ b/solauto-sdk/src/services/swap/jupSwapManager.ts @@ -57,10 +57,8 @@ export class JupSwapManager { const inputMintInfo: TokenInfo | undefined = tokenInfo(data.inputMint); const outputMintInfo: TokenInfo | undefined = tokenInfo(data.outputMint); const lowLiquidityMint = - !inputMintInfo || - inputMintInfo?.isMeme || - !outputMintInfo || - outputMintInfo?.isMeme; + (!inputMintInfo?.isMajor && !inputMintInfo?.isLST) || + (!outputMintInfo?.isMajor && !outputMintInfo?.isLST); const slippageBps = data.slippageBps ?? (lowLiquidityMint ? 250 : 100); return await retryWithExponentialBackoff( diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index dcbe96f4..3d89fbb7 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -415,7 +415,9 @@ export class TransactionsManager { e, itemSets.filter( (x) => - this.statuses.find((y) => x.name() === y.name)?.simulationSuccessful + this.statuses.find( + (y) => x.name() === y.name && y.attemptNum === num + )?.simulationSuccessful ).length === itemSets.length, this.priorityFeeSetting ); @@ -480,7 +482,10 @@ export class TransactionsManager { ); } else { await this.debugAccounts(itemSet, tx); - this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting(prevError, attemptNum); + this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting( + prevError, + attemptNum + ); await this.sendTransaction( tx, itemSet.name(), @@ -582,7 +587,9 @@ export class TransactionsManager { this.txHandler.umi, [tx], e, - this.statuses.find((x) => x.name === txName)?.simulationSuccessful, + this.statuses.find( + (x) => x.name === txName && x.attemptNum === attemptNum + )?.simulationSuccessful, priorityFeeSetting ); From f5b4c5b2693b0e6653e74deb64058a16cd82eb22 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 30 Apr 2025 18:45:27 -0400 Subject: [PATCH 05/83] small fix --- .../src/services/rebalance/rebalanceSwapManager.ts | 2 +- solauto-sdk/src/services/swap/jupSwapManager.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts index e8a4b1df..b14a5bc7 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts @@ -33,7 +33,7 @@ export class RebalanceSwapManager { private targetLiqUtilizationRateBps?: number, private priceType?: PriceType ) { - this.jupSwapManager = new JupSwapManager(client.signer); + this.jupSwapManager = new JupSwapManager(client.signer, true); this.solautoFeeBps = SolautoFeesBps.create( this.client.isReferred, this.targetLiqUtilizationRateBps, diff --git a/solauto-sdk/src/services/swap/jupSwapManager.ts b/solauto-sdk/src/services/swap/jupSwapManager.ts index 28ae971e..6ca7e97d 100644 --- a/solauto-sdk/src/services/swap/jupSwapManager.ts +++ b/solauto-sdk/src/services/swap/jupSwapManager.ts @@ -51,7 +51,10 @@ export class JupSwapManager { public jupQuote: QuoteResponse | undefined = undefined; - constructor(private signer: Signer) {} + constructor( + private signer: Signer, + private limitSize?: boolean + ) {} public async getQuote(data: SwapInput): Promise { const inputMintInfo: TokenInfo | undefined = tokenInfo(data.inputMint); @@ -73,9 +76,10 @@ export class JupSwapManager { ? "ExactIn" : undefined, slippageBps, - maxAccounts: !data.exactOut - ? (lowLiquidityMint ? 25 : 15) + attemptNum * 5 - : undefined, + maxAccounts: + !data.exactOut && this.limitSize + ? (lowLiquidityMint ? 25 : 15) + attemptNum * 5 + : undefined, }), 6, 250 From e49dd6a7294a22d1f7a6e173b6d0e8ce7c98ce83 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 30 Apr 2025 19:55:41 -0400 Subject: [PATCH 06/83] unused imports --- solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts index b14a5bc7..6579144c 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts @@ -6,12 +6,10 @@ import { JupSwapManager, SwapParams, SwapInput } from "../swap"; import { applyDebtAdjustmentUsd, RebalanceValues } from "./rebalanceValues"; import { PriceType, RebalanceDirection, TokenType } from "../../generated"; import { - bytesToI80F48, consoleLog, fromBaseUnit, fromBps, getLiqUtilzationRateBps, - isMarginfiPosition, safeGetPrice, toBaseUnit, tokenInfo, From 4c3fa12041a2be08e891dc30de4f3039b8ef00da Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 1 May 2025 00:16:36 -0400 Subject: [PATCH 07/83] fixes --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/jitoUtils.ts | 47 +++++++++++++++--------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index d2f29d4e..800e1c55 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.736", + "version": "1.0.737", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/jitoUtils.ts b/solauto-sdk/src/utils/jitoUtils.ts index e145c6a9..ee6f4d6a 100644 --- a/solauto-sdk/src/utils/jitoUtils.ts +++ b/solauto-sdk/src/utils/jitoUtils.ts @@ -160,17 +160,15 @@ async function umiToVersionedTransactions( feeEstimates?: number[], computeUnitLimits?: number[] ): Promise { - let builtTxs = await Promise.all( - txs.map(async (tx, i) => { - return assembleFinalTransaction( - umi, - tx, - feeEstimates ? feeEstimates[i] : undefined, - computeUnitLimits ? computeUnitLimits[i] : undefined - ) - .setBlockhash(blockhash) - .build(umi); - }) + let builtTxs = txs.map((tx, i) => + assembleFinalTransaction( + umi, + tx, + feeEstimates ? feeEstimates[i] : undefined, + computeUnitLimits ? computeUnitLimits[i] : undefined + ) + .setBlockhash(blockhash) + .build(umi) ); if (sign) { @@ -280,7 +278,7 @@ export async function sendJitoBundledTransactions( abortController?: AbortController ): Promise { const txs = [...transactions]; - + if (txs.length === 1) { const resp = await sendSingleOptimizedTransaction( umi, @@ -313,6 +311,7 @@ export async function sendJitoBundledTransactions( if (abortController?.signal.aborted) { return; } + let builtTxs: VersionedTransaction[] = []; let simulationResults: SimulatedTransactionResponse[] | undefined; if (txType !== "skip-simulation") { @@ -324,24 +323,24 @@ export async function sendJitoBundledTransactions( txs, false, undefined, - Array(txs.length).map(_ => 1_400_000) + Array(txs.length).map((_) => 1_400_000) ); simulationResults = await simulateJitoBundle(umi, builtTxs); } const feeEstimates = usePriorityFee(priorityFeeSetting) - ? await Promise.all( - txs.map( - async (x) => - (await getComputeUnitPriceEstimate( - umi, - x, - priorityFeeSetting, - true - )) ?? 1000000 + ? await Promise.all( + txs.map( + async (x) => + (await getComputeUnitPriceEstimate( + umi, + x, + priorityFeeSetting, + true + )) ?? 1000000 + ) ) - ) - : undefined; + : undefined; if (abortController?.signal.aborted) { return; From 773a441bc93a1172fb44810b3d58de81a975ba55 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 1 May 2025 21:24:53 -0400 Subject: [PATCH 08/83] unused imports --- programs/solauto/src/rebalance/rebalancer.rs | 6 ++---- solauto-sdk/package.json | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/programs/solauto/src/rebalance/rebalancer.rs b/programs/solauto/src/rebalance/rebalancer.rs index b6981768..b6180542 100644 --- a/programs/solauto/src/rebalance/rebalancer.rs +++ b/programs/solauto/src/rebalance/rebalancer.rs @@ -3,7 +3,7 @@ use std::{ ops::{Add, Mul}, }; -use solana_program::{entrypoint::ProgramResult, msg, program_error::ProgramError, pubkey::Pubkey}; +use solana_program::{entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey}; use crate::{ check, @@ -22,9 +22,7 @@ use crate::{ }, utils::{ math_utils::{calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit}, - validation_utils::{ - correct_token_account, value_gte_with_threshold, value_lte_with_threshold, - }, + validation_utils::correct_token_account, }, }; diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 800e1c55..374102d1 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.737", + "version": "1.0.738", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", From e8cdfa5b9aaeaf4e3c98a87ed55a1759aa0baea9 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 03:39:27 -0400 Subject: [PATCH 09/83] fixes --- solauto-sdk/package.json | 2 +- .../manager/transactionsManager.ts | 508 +++++++++--------- .../services/transactions/transactionUtils.ts | 4 +- solauto-sdk/src/utils/jitoUtils.ts | 3 +- 4 files changed, 251 insertions(+), 266 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 374102d1..aab03d89 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.738", + "version": "1.0.745", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index 3d89fbb7..99c86301 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -33,14 +33,16 @@ export enum TransactionStatus { Failed = "Failed", } -export type TransactionManagerStatuses = { +export interface TransactionManagerStatus { name: string; attemptNum: number; status: TransactionStatus; moreInfo?: string; simulationSuccessful?: boolean; txSig?: string; -}[]; +} + +export type TransactionManagerStatuses = TransactionManagerStatus[]; interface RetryConfig { signableRetries?: number; @@ -137,48 +139,34 @@ export class TransactionsManager { return transactionSets; } - private updateStatus( - name: string, - status: TransactionStatus, - attemptNum: number, - txSig?: string, - simulationSuccessful?: boolean, - moreInfo?: string - ) { - if (!this.statuses.filter((x) => x.name === name)) { - this.statuses.push({ - name, - status, - txSig, - attemptNum, - simulationSuccessful, - moreInfo, - }); + private updateStatus(args: TransactionManagerStatus, reset?: boolean) { + if (!this.statuses.filter((x) => x.name === args.name)) { + this.statuses.push(args); } else { const idx = this.statuses.findIndex( - (x) => x.name === name && x.attemptNum === attemptNum + (x) => x.name === args.name && x.attemptNum === args.attemptNum ); if (idx !== -1) { - this.statuses[idx].status = status; - this.statuses[idx].txSig = txSig; - if (simulationSuccessful) { - this.statuses[idx].simulationSuccessful = simulationSuccessful; + this.statuses[idx].status = args.status; + this.statuses[idx].txSig = args.txSig; + if (args.simulationSuccessful) { + this.statuses[idx].simulationSuccessful = args.simulationSuccessful; + } + if (args.moreInfo) { + this.statuses[idx].moreInfo = args.moreInfo; } - if (moreInfo) { - this.statuses[idx].moreInfo = moreInfo; + if (reset) { + this.statuses[idx].txSig = undefined; + this.statuses[idx].simulationSuccessful = undefined; + this.statuses[idx].moreInfo = undefined; } } else { - this.statuses.push({ - name, - status, - txSig, - attemptNum, - simulationSuccessful, - moreInfo, - }); + this.statuses.push(args); } } - this.txHandler.log(`${name} is ${status.toString().toLowerCase()}`); + this.txHandler.log( + `${args.name} ${args.attemptNum} is ${args.status.toString().toLowerCase()}` + ); this.statusCallback?.([...this.statuses]); } @@ -219,21 +207,19 @@ export class TransactionsManager { } private updateStatusForSets( - itemSets: TransactionSet[], - status: TransactionStatus, - attemptNum: number, + txNames: string[], + args: Omit, txSigs?: string[], - simulationSuccessful?: boolean, - moreInfo?: string + reset?: boolean ) { - itemSets.forEach((itemSet, i) => { + txNames.forEach((name, i) => { this.updateStatus( - itemSet.name(), - status, - attemptNum, - txSigs !== undefined ? txSigs[i] : undefined, - simulationSuccessful, - moreInfo + { + name, + txSig: txSigs && txSigs.length > i ? txSigs[i] : undefined, + ...args, + }, + reset ); }); } @@ -254,7 +240,13 @@ export class TransactionsManager { return await this.assembleTransactionSets(items); }, this.totalRetries); - this.updateStatusForSets(itemSets, TransactionStatus.Queued, 0); + this.updateStatusForSets( + itemSets.map((x) => x.name()), + { + status: TransactionStatus.Queued, + attemptNum: 0, + } + ); this.txHandler.log("Initial item sets:", itemSets.length); if (this.atomically) { @@ -271,7 +263,7 @@ export class TransactionsManager { } private shouldProceedToSend(itemSets: TransactionSet[], attemptNum: number) { - if (!itemSets) { + if (itemSets.length === 0) { return false; } @@ -283,19 +275,83 @@ export class TransactionsManager { newItemSetNames[0] === this.updateOracleTxName ) { consoleLog("Skipping unnecessary oracle update"); - this.updateStatusForSets(itemSets, TransactionStatus.Skipped, attemptNum); + this.updateStatusForSets( + itemSets.map((x) => x.name()), + { + status: TransactionStatus.Skipped, + attemptNum, + } + ); return false; } return true; } - private async processTransactionsAtomically(itemSets: TransactionSet[]) { - let num = 0; - let transactions: TransactionBuilder[] = []; + private getTrueAttemptNum(itemSetName: string) { + const prevAttempts = this.statuses.filter( + (x) => x.name === itemSetName && x.status !== TransactionStatus.Queued + ); + const attemptNum = + prevAttempts.length - + prevAttempts.filter((x) => x.status === TransactionStatus.Skipped) + ?.length; + return attemptNum; + } + + private async refreshItemSets( + itemSets: TransactionSet[], + attemptNum: number, + prevError?: Error, + currentIndex?: number + ): Promise { + if (currentIndex !== undefined) { + const itemSet = itemSets[currentIndex]; + await itemSet.reset(); + await itemSet.refetchAll(attemptNum, prevError); + } else { + await Promise.all(itemSets.map((itemSet) => itemSet.reset())); + for (const itemSet of itemSets) { + await itemSet.refetchAll(attemptNum, prevError); + } + } + + const newItemSets = await this.assembleTransactionSets( + currentIndex !== undefined + ? [ + ...itemSets[currentIndex].items, + ...itemSets.slice(currentIndex + 1).flatMap((set) => set.items), + ] + : itemSets.flatMap((set) => set.items) + ); + + if (currentIndex !== undefined && newItemSets.length > 1) { + itemSets.splice( + currentIndex, + itemSets.length - currentIndex, + ...newItemSets + ); + const startOfQueuedStatuses = this.statuses.findIndex( + (x) => x.status === TransactionStatus.Queued + ); + this.statuses.splice( + startOfQueuedStatuses, + this.statuses.length - startOfQueuedStatuses, + ...newItemSets.map((x, i) => ({ + name: x.name(), + attemptNum: i === 0 ? attemptNum : 0, + status: + i === 0 ? TransactionStatus.Processing : TransactionStatus.Queued, + })) + ); + } + + return newItemSets; + } + private async processTransactionsAtomically(itemSets: TransactionSet[]) { await retryWithExponentialBackoff( - async (attemptNum, prevError) => { + async (retryNum, prevError) => { if ( prevError && this.statuses.filter((x) => x.simulationSuccessful).length > @@ -304,13 +360,16 @@ export class TransactionsManager { throw prevError; } - num = attemptNum; + const attemptNum = Math.max( + ...itemSets.map((x) => this.getTrueAttemptNum(x?.name() ?? "")) + ); + this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting( prevError, attemptNum ); - if (attemptNum > 0) { + if (retryNum > 0) { const refreshedSets = await this.refreshItemSets( itemSets, attemptNum, @@ -327,122 +386,86 @@ export class TransactionsManager { return; } - transactions = []; - for (const set of itemSets) { - transactions.push(await set.getSingleTransaction()); - } - transactions = transactions.filter( - (x) => x.getInstructions().length > 0 - ); - if (transactions.length === 0) { - this.updateStatusForSets( - itemSets, - TransactionStatus.Skipped, - attemptNum - ); - return; - } + await this.sendJitoBundle(itemSets, attemptNum); + }, + this.totalRetries, + this.retryDelay, + this.errorsToThrow + ); + } - this.updateStatusForSets( - itemSets, - TransactionStatus.Processing, - attemptNum - ); - for (const itemSet of itemSets) { - await this.debugAccounts( - itemSet, - await itemSet.getSingleTransaction() - ); - } + private async sendJitoBundle(itemSets: TransactionSet[], attemptNum: number) { + let transactions: TransactionBuilder[] = []; + let txNames: string[] = []; - let txSigs: string[] | undefined; - let error: Error | undefined; - try { - txSigs = await sendJitoBundledTransactions( - this.txHandler.umi, - this.txHandler.connection, - this.txHandler.signer, - this.txHandler.otherSigners, - transactions, - this.txRunType, - this.priorityFeeSetting, - () => - this.updateStatusForSets( - itemSets, - TransactionStatus.Processing, - attemptNum, - undefined, - true - ), - this.abortController - ); - } catch (e: any) { - error = e as Error; - } + try { + for (const set of itemSets) { + transactions.push(await set.getSingleTransaction()); + } + transactions = transactions.filter((x) => x.getInstructions().length > 0); - if ( - error || - (this.txRunType !== "only-simulate" && - (!Boolean(txSigs) || txSigs?.length === 0) && - !this.abortController?.signal.aborted) - ) { - this.updateStatusForSets( - itemSets, - TransactionStatus.Failed, - attemptNum, - txSigs, - undefined, - error?.message - ); - throw error ? error : new Error("Unknown error"); - } + txNames = itemSets.map((x) => x.name()); + if (transactions.length === 0) { + this.updateStatusForSets(txNames, { + status: TransactionStatus.Skipped, + attemptNum, + }); + return; + } - this.updateStatusForSets( - itemSets, - TransactionStatus.Successful, + this.updateStatusForSets( + txNames, + { + status: TransactionStatus.Processing, attemptNum, - txSigs - ); - }, - this.totalRetries, - this.retryDelay, - this.errorsToThrow - ).catch((e: Error) => { - this.txHandler.log("Capturing error info..."); - const errorDetails = getErrorInfo( + }, + undefined, + true + ); + for (const itemSet of itemSets) { + await this.debugAccounts(itemSet, await itemSet.getSingleTransaction()); + } + + const txSigs = await sendJitoBundledTransactions( this.txHandler.umi, + this.txHandler.connection, + this.txHandler.signer, + this.txHandler.otherSigners, transactions, - e, - itemSets.filter( - (x) => - this.statuses.find( - (y) => x.name() === y.name && y.attemptNum === num - )?.simulationSuccessful - ).length === itemSets.length, - this.priorityFeeSetting + this.txRunType, + this.priorityFeeSetting, + () => + this.updateStatusForSets(txNames, { + status: TransactionStatus.Processing, + attemptNum, + simulationSuccessful: true, + }), + this.abortController ); - const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`; - const errorInfo = - errorDetails.errorName || errorDetails.errorInfo - ? errorString - : e.message; + if ( + this.txRunType !== "only-simulate" && + (!Boolean(txSigs) || txSigs?.length === 0) && + !this.abortController?.signal.aborted + ) { + this.updateStatusForSets( + txNames, + { + status: TransactionStatus.Failed, + attemptNum, + }, + txSigs + ); + } + this.updateStatusForSets( - itemSets, - errorDetails.canBeIgnored - ? TransactionStatus.Skipped - : TransactionStatus.Failed, - num, - undefined, - undefined, - errorInfo + txNames, + { status: TransactionStatus.Successful, attemptNum }, + txSigs ); - consoleLog(errorString); - - if (!errorDetails.canBeIgnored) { - throw new Error(errorInfo); - } - }); + } catch (e: any) { + this.captureErrorInfo(transactions, txNames, attemptNum, e); + } } private async processTransactionSet( @@ -451,7 +474,7 @@ export class TransactionsManager { ) { let itemSet: TransactionSet | undefined = itemSets[currentIndex]; await retryWithExponentialBackoff( - async (attemptNum, prevError) => { + async (retryNum, prevError) => { if ( prevError && this.statuses.filter((x) => x.simulationSuccessful).length > @@ -460,7 +483,8 @@ export class TransactionsManager { throw prevError; } - if (currentIndex > 0 || attemptNum > 0) { + const attemptNum = this.getTrueAttemptNum(itemSet?.name() ?? ""); + if (currentIndex > 0 || retryNum > 0) { const refreshedSets = await this.refreshItemSets( itemSets, attemptNum, @@ -475,11 +499,11 @@ export class TransactionsManager { const tx = await itemSet.getSingleTransaction(); if (tx.getInstructions().length === 0) { - this.updateStatus( - itemSet.name(), - TransactionStatus.Skipped, - attemptNum - ); + this.updateStatus({ + name: itemSet.name(), + status: TransactionStatus.Skipped, + attemptNum, + }); } else { await this.debugAccounts(itemSet, tx); this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting( @@ -500,64 +524,21 @@ export class TransactionsManager { ); } - private async refreshItemSets( - itemSets: TransactionSet[], - attemptNum: number, - prevError?: Error, - currentIndex?: number - ): Promise { - if (currentIndex !== undefined) { - const itemSet = itemSets[currentIndex]; - await itemSet.reset(); - await itemSet.refetchAll(attemptNum, prevError); - } else { - await Promise.all(itemSets.map((itemSet) => itemSet.reset())); - for (const itemSet of itemSets) { - await itemSet.refetchAll(attemptNum, prevError); - } - } - - const newItemSets = await this.assembleTransactionSets( - currentIndex !== undefined - ? [ - ...itemSets[currentIndex].items, - ...itemSets.slice(currentIndex + 1).flatMap((set) => set.items), - ] - : itemSets.flatMap((set) => set.items) - ); - - if (currentIndex !== undefined && newItemSets.length > 1) { - itemSets.splice( - currentIndex, - itemSets.length - currentIndex, - ...newItemSets - ); - const startOfQueuedStatuses = this.statuses.findIndex( - (x) => x.status === TransactionStatus.Queued - ); - this.statuses.splice( - startOfQueuedStatuses, - this.statuses.length - startOfQueuedStatuses, - ...newItemSets.map((x, i) => ({ - name: x.name(), - attemptNum: i === 0 ? attemptNum : 0, - status: - i === 0 ? TransactionStatus.Processing : TransactionStatus.Queued, - })) - ); - } - - return newItemSets; - } - protected async sendTransaction( tx: TransactionBuilder, - txName: string, + name: string, attemptNum: number, priorityFeeSetting?: PriorityFeeSetting, txRunType?: TransactionRunType ) { - this.updateStatus(txName, TransactionStatus.Processing, attemptNum); + this.updateStatus( + { + name, + status: TransactionStatus.Processing, + attemptNum, + }, + true + ); try { const txSig = await sendSingleOptimizedTransaction( this.txHandler.umi, @@ -566,53 +547,60 @@ export class TransactionsManager { txRunType ?? this.txRunType, priorityFeeSetting, () => - this.updateStatus( - txName, - TransactionStatus.Processing, + this.updateStatus({ + name, + status: TransactionStatus.Processing, attemptNum, - undefined, - true - ), + simulationSuccessful: true, + }), this.abortController ); - this.updateStatus( - txName, - TransactionStatus.Successful, + this.updateStatus({ + name, + status: TransactionStatus.Successful, attemptNum, - txSig ? bs58.encode(txSig) : undefined - ); + txSig: txSig ? bs58.encode(txSig) : undefined, + }); } catch (e: any) { - this.txHandler.log("Capturing error info..."); - const errorDetails = getErrorInfo( - this.txHandler.umi, - [tx], - e, - this.statuses.find( - (x) => x.name === txName && x.attemptNum === attemptNum - )?.simulationSuccessful, - priorityFeeSetting - ); + this.captureErrorInfo([tx], [name], attemptNum, e); + } + } - const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`; - const errorInfo = - errorDetails.errorName || errorDetails.errorInfo - ? errorString - : e.message; - this.updateStatus( - txName, - errorDetails.canBeIgnored - ? TransactionStatus.Skipped - : TransactionStatus.Failed, - attemptNum, - undefined, - undefined, - errorInfo - ); - consoleLog(errorString); + private captureErrorInfo( + transactions: TransactionBuilder[], + txNames: string[], + attemptNum: number, + error: any + ) { + this.txHandler.log("Capturing error info..."); + const errorDetails = getErrorInfo( + this.txHandler.umi, + transactions, + error, + txNames.filter( + (x) => + this.statuses.find((y) => x === y.name && y.attemptNum === attemptNum) + ?.simulationSuccessful + ).length === txNames.length, + this.priorityFeeSetting + ); - if (!errorDetails.canBeIgnored) { - throw new Error(errorInfo); - } + const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`; + const errorInfo = + errorDetails.errorName || errorDetails.errorInfo + ? errorString + : error.message; + this.updateStatusForSets(txNames, { + status: errorDetails.canBeIgnored + ? TransactionStatus.Skipped + : TransactionStatus.Failed, + attemptNum, + moreInfo: errorInfo, + }); + consoleLog(errorString); + + if (!errorDetails.canBeIgnored) { + throw new Error(errorInfo); } } } diff --git a/solauto-sdk/src/services/transactions/transactionUtils.ts b/solauto-sdk/src/services/transactions/transactionUtils.ts index 771018cd..d821b923 100644 --- a/solauto-sdk/src/services/transactions/transactionUtils.ts +++ b/solauto-sdk/src/services/transactions/transactionUtils.ts @@ -637,9 +637,7 @@ export function getErrorInfo( try { if (error instanceof BundleSimulationError) { errTxIdx = error.details.transactionIdx; - errIxIdx = - error.details.instructionIdx - - getComputeIxs(error.details.transactionIdx); + errIxIdx = error.details.instructionIdx - getComputeIxs(errTxIdx); errCode = error.details.errorCode; } else if ( typeof error === "object" && diff --git a/solauto-sdk/src/utils/jitoUtils.ts b/solauto-sdk/src/utils/jitoUtils.ts index ee6f4d6a..e65a623a 100644 --- a/solauto-sdk/src/utils/jitoUtils.ts +++ b/solauto-sdk/src/utils/jitoUtils.ts @@ -211,7 +211,6 @@ async function pollBundleStatus( const statuses = await retryWithExponentialBackoff( async () => { const resp = await getBundleStatus(umi, bundleId); - // TODO: remove me if (resp?.value?.length > 0 && resp.value[0] === null) { throw new Error("No confirmation status"); } @@ -323,7 +322,7 @@ export async function sendJitoBundledTransactions( txs, false, undefined, - Array(txs.length).map((_) => 1_400_000) + Array(txs.length).fill(null).map((_) => 1_400_000) ); simulationResults = await simulateJitoBundle(umi, builtTxs); } From 1d84aeb334d2e3aafc85f2fe0ed08b6fa24f5f28 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 03:40:25 -0400 Subject: [PATCH 10/83] fix --- .../transactions/manager/transactionsManager.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index 99c86301..f7f2059d 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -101,7 +101,7 @@ export class TransactionsManager { items: TransactionItem[] ): Promise { let transactionSets: TransactionSet[] = []; - this.txHandler.log(`Reassembling ${items.length} items`); + consoleLog(`Reassembling ${items.length} items`); const txItems = items.sort((a, b) => a.orderPrio - b.orderPrio); @@ -164,7 +164,7 @@ export class TransactionsManager { this.statuses.push(args); } } - this.txHandler.log( + consoleLog( `${args.name} ${args.attemptNum} is ${args.status.toString().toLowerCase()}` ); this.statusCallback?.([...this.statuses]); @@ -178,13 +178,13 @@ export class TransactionsManager { const accountsNotInLut = ixAccounts.filter( (x) => !lutAccounts.includes(x) ); - this.txHandler.log( + consoleLog( `Program ${ix.programId}, data len: ${ix.data.length}, LUT accounts data: ${ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3}` ); if (accountsNotInLut.length > 0) { - this.txHandler.log(`${accountsNotInLut.length} accounts not in LUT:`); + consoleLog(`${accountsNotInLut.length} accounts not in LUT:`); for (const key of accountsNotInLut) { - this.txHandler.log(key.toString()); + consoleLog(key.toString()); } } } @@ -236,7 +236,7 @@ export class TransactionsManager { await item.initialize(); } } - this.txHandler.log("Transaction items:", items.length); + consoleLog("Transaction items:", items.length); return await this.assembleTransactionSets(items); }, this.totalRetries); @@ -247,7 +247,7 @@ export class TransactionsManager { attemptNum: 0, } ); - this.txHandler.log("Initial item sets:", itemSets.length); + consoleLog("Initial item sets:", itemSets.length); if (this.atomically) { await this.processTransactionsAtomically(itemSets); @@ -572,7 +572,7 @@ export class TransactionsManager { attemptNum: number, error: any ) { - this.txHandler.log("Capturing error info..."); + consoleLog("Capturing error info..."); const errorDetails = getErrorInfo( this.txHandler.umi, transactions, From 32552d23587010ac1e7990d239974b0832b1d7e2 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 04:43:20 -0400 Subject: [PATCH 11/83] fix logs --- solauto-sdk/tests/unit/accounts.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/tests/unit/accounts.ts b/solauto-sdk/tests/unit/accounts.ts index d574ab59..0eac09c7 100644 --- a/solauto-sdk/tests/unit/accounts.ts +++ b/solauto-sdk/tests/unit/accounts.ts @@ -24,7 +24,6 @@ async function hasTokenAccounts(wallet: PublicKey) { ) ); for (let i = 0; i < tokenAccounts.length; i++) { - console.log(tokenAccounts[i].publicKey.toString()); if (!tokenAccounts[i].exists) { console.log( `Missing ${wallet.toString()} TA for `, @@ -55,7 +54,9 @@ describe("Assert Solauto fee token accounts are created", async () => { !ismAccounts.find((x) => group.equals(toWeb3JsPublicKey(x.group))) ); - console.log("Missing ISM accounts", missingIsmAccounts); + if (missingIsmAccounts.length > 0) { + console.log("Missing ISM accounts", missingIsmAccounts); + } assert(missingIsmAccounts.length === 0); }); }); From 98aa25aa92ac8910429d3ae4e74ef5647c221afd Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 04:48:29 -0400 Subject: [PATCH 12/83] readmes --- README.md | 6 +++--- solauto-sdk/README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 848249f5..6852fb18 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ pnpm add @haven-fi/solauto-sdk ```typescript import { PublicKey } from "@solana/web3.js"; +import { NATIVE_MINT } from "@solana/spl-token"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client @@ -73,8 +74,8 @@ const client = solauto.getClient(solauto.LendingPlatform.MARGINFI, { }); // Initialize the client -const supplyMint = new PublicKey(NATIVE_MINT); -const debtMint = new PublicKey(USDC); +const supplyMint = NATIVE_MINT; +const debtMint = new PublicKey(solauto.USDC); await client.initializeNewSolautoPosition({ positionId: 1, lpPoolAccount: solauto.getMarginfiAccounts().defaultGroup, @@ -133,7 +134,6 @@ const statuses = txManager.send(transactionItems); ## Rebalancing an existing position ```typescript -import { PublicKey } from "@solana/web3.js"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client diff --git a/solauto-sdk/README.md b/solauto-sdk/README.md index 73c4d0f8..23280571 100644 --- a/solauto-sdk/README.md +++ b/solauto-sdk/README.md @@ -6,6 +6,7 @@ Solauto is a program on the Solana blockchain that lets you manage leveraged lon ```typescript import { PublicKey } from "@solana/web3.js"; +import { NATIVE_MINT } from "@solana/spl-token"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client @@ -15,8 +16,8 @@ const client = solauto.getClient(solauto.LendingPlatform.MARGINFI, { }); // Initialize the client -const supplyMint = new PublicKey(NATIVE_MINT); -const debtMint = new PublicKey(USDC); +const supplyMint = NATIVE_MINT; +const debtMint = new PublicKey(solauto.USDC); await client.initializeNewSolautoPosition({ positionId: 1, lpPoolAccount: solauto.getMarginfiAccounts().defaultGroup, @@ -75,7 +76,6 @@ const statuses = txManager.send(transactionItems); ## Rebalancing an existing position ```typescript -import { PublicKey } from "@solana/web3.js"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client From 241c15c66435cd2d4f7df05a3cfa5aafe6a24952 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 13:10:44 -0400 Subject: [PATCH 13/83] fix --- solauto-sdk/package.json | 2 +- .../manager/transactionsManager.ts | 24 ++++--------------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index aab03d89..8906fff0 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.745", + "version": "1.0.746", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index f7f2059d..40a385b8 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -288,17 +288,6 @@ export class TransactionsManager { return true; } - private getTrueAttemptNum(itemSetName: string) { - const prevAttempts = this.statuses.filter( - (x) => x.name === itemSetName && x.status !== TransactionStatus.Queued - ); - const attemptNum = - prevAttempts.length - - prevAttempts.filter((x) => x.status === TransactionStatus.Skipped) - ?.length; - return attemptNum; - } - private async refreshItemSets( itemSets: TransactionSet[], attemptNum: number, @@ -351,7 +340,7 @@ export class TransactionsManager { private async processTransactionsAtomically(itemSets: TransactionSet[]) { await retryWithExponentialBackoff( - async (retryNum, prevError) => { + async (attemptNum, prevError) => { if ( prevError && this.statuses.filter((x) => x.simulationSuccessful).length > @@ -360,16 +349,12 @@ export class TransactionsManager { throw prevError; } - const attemptNum = Math.max( - ...itemSets.map((x) => this.getTrueAttemptNum(x?.name() ?? "")) - ); - this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting( prevError, attemptNum ); - if (retryNum > 0) { + if (attemptNum > 0) { const refreshedSets = await this.refreshItemSets( itemSets, attemptNum, @@ -474,7 +459,7 @@ export class TransactionsManager { ) { let itemSet: TransactionSet | undefined = itemSets[currentIndex]; await retryWithExponentialBackoff( - async (retryNum, prevError) => { + async (attemptNum, prevError) => { if ( prevError && this.statuses.filter((x) => x.simulationSuccessful).length > @@ -483,8 +468,7 @@ export class TransactionsManager { throw prevError; } - const attemptNum = this.getTrueAttemptNum(itemSet?.name() ?? ""); - if (currentIndex > 0 || retryNum > 0) { + if (currentIndex > 0 || attemptNum > 0) { const refreshedSets = await this.refreshItemSets( itemSets, attemptNum, From b8a7d5e4d463c52209c41a71a78ed399b48ced36 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 15:44:14 -0400 Subject: [PATCH 14/83] fixes --- solauto-sdk/package.json | 2 +- .../transactions/manager/clientTransactionsManager.ts | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 8906fff0..2bd5a72b 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.746", + "version": "1.0.748", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts index f5c4cc34..bc8a9dfb 100644 --- a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts @@ -75,7 +75,7 @@ export class ClientTransactionsManager extends TransactionsManager 4)) { + const updateLutInSepTx = updateLut?.new || (updateLut?.accountsToAdd ?? []).length > 4; + if (updateLut && updateLutInSepTx) { await this.updateLut(updateLut.tx, updateLut.new); } this.lookupTables.defaultLuts = client.defaultLookupTables(); @@ -124,7 +125,7 @@ export class ClientTransactionsManager extends TransactionsManager { From 2f1a7c028289ab5c7450b82b086da4b8e89dffb0 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 16:41:28 -0400 Subject: [PATCH 15/83] add patch lut --- package.json | 1 + solauto-sdk/local/patchLUT.ts | 93 +++++++++++++++++++ solauto-sdk/local/shared.ts | 1 + solauto-sdk/src/constants/solautoConstants.ts | 3 + solauto-sdk/src/utils/solautoUtils.ts | 2 +- 5 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 solauto-sdk/local/patchLUT.ts diff --git a/package.json b/package.json index 1095f5da..c81239e0 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "sandbox": "cd solauto-sdk && npx ts-node local/txSandbox.ts", "update-lut:solauto": "cd solauto-sdk && npx ts-node local/updateSolautoLUT.ts", "update-lut:marginfi": "cd solauto-sdk && npx ts-node local/updateMarginfiLUT.ts", + "patch-lut": "cd solauto-sdk && npx ts-node local/patchLUT.ts", "create-token-accounts": "cd solauto-sdk && npx ts-node local/createTokenAccounts.ts", "prepare-accounts": "pnpm create-token-accounts && pnpm update-lut:solauto && pnpm update-lut:marginfi", "log-pos": "cd solauto-sdk && npx ts-node local/logPositions.ts", diff --git a/solauto-sdk/local/patchLUT.ts b/solauto-sdk/local/patchLUT.ts new file mode 100644 index 00000000..9ad01fd5 --- /dev/null +++ b/solauto-sdk/local/patchLUT.ts @@ -0,0 +1,93 @@ +import { + fromWeb3JsPublicKey, + toWeb3JsPublicKey, +} from "@metaplex-foundation/umi-web3js-adapters"; +import { + fetchAllReferralState, + getPositionExBulk, + getReferralState, + getSolanaRpcConnection, + getSolautoManagedPositions, + getTokenAccount, + LOCAL_IRONFORGE_API_URL, + PATCH_LUT, + SOLAUTO_PROD_PROGRAM, +} from "../src"; +import { PublicKey } from "@solana/web3.js"; +import { updateLookupTable } from "./shared"; + +let [conn, umi] = getSolanaRpcConnection( + LOCAL_IRONFORGE_API_URL, + SOLAUTO_PROD_PROGRAM +); + +async function getMissingAccounts() { + const allMissingAccounts: string[] = []; + const allPositions = await getSolautoManagedPositions(umi); + const positions = await getPositionExBulk( + umi, + allPositions.map((x) => x.publicKey!) + ); + + const referralStates = positions.map((x) => + getReferralState( + x.authority, + toWeb3JsPublicKey(umi.programs.get("solauto").publicKey) + ) + ); + const referralStatesData = await fetchAllReferralState( + umi, + referralStates.map((x) => fromWeb3JsPublicKey(x)) + ); + + const users = Array.from( + new Set(positions.map((x) => x.authority.toString())) + ); + for (const user of users) { + const authority = new PublicKey(user); + const referralState = referralStatesData.find((x) => + toWeb3JsPublicKey(x.authority).equals(authority) + )!; + const lookupTable = referralState.lookupTable; + + const existingUserLUTAccounts = + ( + await conn.getAddressLookupTable(toWeb3JsPublicKey(lookupTable), { + commitment: "confirmed", + }) + ).value?.state?.addresses ?? []; + + const userPositions = positions.filter((x) => + x.authority.equals(authority) + ); + + let requiredAccounts = userPositions.flatMap((x) => { + return [ + getTokenAccount(authority, x.supplyMint), + getTokenAccount(authority, x.debtMint), + x.publicKey, + x.lpUserAccount!, + getTokenAccount(x.publicKey, x.supplyMint), + getTokenAccount(x.publicKey, x.debtMint), + ].map((x) => x.toString()); + }); + requiredAccounts = Array.from(new Set(requiredAccounts)); + + const missingAccounts = requiredAccounts.filter( + (x) => + existingUserLUTAccounts.find((y) => y.toString() === x) === undefined + ); + + if (missingAccounts.length) { + console.log("\nMissing accounts for", referralState.publicKey.toString()); + console.log(missingAccounts); + allMissingAccounts.push(...missingAccounts); + } + } + + return allMissingAccounts; +} + +getMissingAccounts().then(async (accs) => { + await updateLookupTable(accs, new PublicKey(PATCH_LUT)); +}); diff --git a/solauto-sdk/local/shared.ts b/solauto-sdk/local/shared.ts index c81e1c51..1f162236 100644 --- a/solauto-sdk/local/shared.ts +++ b/solauto-sdk/local/shared.ts @@ -110,6 +110,7 @@ export async function updateLookupTable( lookupTableAddress = addr; console.log("Lookup Table Address:", lookupTableAddress.toString()); await createAndSendV0Tx([createLutIx], keypair); + CACHE[lookupTableAddress.toString()] = []; } const existingAccounts = CACHE[lookupTableAddress.toString()]; diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index c87fb8db..eb9a7150 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -65,3 +65,6 @@ export const STANDARD_LUT_ACCOUNTS = [ SYSVAR_INSTRUCTIONS_PUBKEY, JUPITER_PROGRAM_ID, ].map((x) => x.toString()); + +// TODO: remove me +export const PATCH_LUT = "CmPZfu3tkeoMutytxhVKT7Hemuwd5jM65VdLNGdBddxQ"; \ No newline at end of file diff --git a/solauto-sdk/src/utils/solautoUtils.ts b/solauto-sdk/src/utils/solautoUtils.ts index f98ef1f4..6703aeaf 100644 --- a/solauto-sdk/src/utils/solautoUtils.ts +++ b/solauto-sdk/src/utils/solautoUtils.ts @@ -19,7 +19,7 @@ import { getSolautoPositionAccountDataSerializer, getSolautoPositionSize, } from "../generated"; -import { ALL_SUPPORTED_TOKENS, SOLAUTO_PROD_PROGRAM } from "../constants"; +import { SOLAUTO_PROD_PROGRAM } from "../constants"; import { SolautoPositionDetails } from "../types"; import { SolautoClient, From f03cce374c78fbe3f96fe96b2cfb045363fbd131 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 2 May 2025 17:17:58 -0400 Subject: [PATCH 16/83] add patch lut --- solauto-sdk/package.json | 2 +- solauto-sdk/src/constants/solautoConstants.ts | 12 +++++++++++- solauto-sdk/src/services/solauto/solautoClient.ts | 12 +++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 2bd5a72b..ef3bff57 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.748", + "version": "1.0.749", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index eb9a7150..fd6e98a7 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -67,4 +67,14 @@ export const STANDARD_LUT_ACCOUNTS = [ ].map((x) => x.toString()); // TODO: remove me -export const PATCH_LUT = "CmPZfu3tkeoMutytxhVKT7Hemuwd5jM65VdLNGdBddxQ"; \ No newline at end of file +export const PATCH_LUT = "CmPZfu3tkeoMutytxhVKT7Hemuwd5jM65VdLNGdBddxQ"; +export const AUTHORITIES_REQUIRING_PATCH_LUT = [ + "5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe", + "F2uk8zsKMex8MztU7saFNq6tNbj4esWnKLJXyfo2egax", + "8Vo5ScTZ1qNTYhMEibq2fekRe5DotmdqpcD2nprmRzJg", + "HLDgPtVv2Yyzzze462P89igFnyLxaCM3f9hVFmCuAX97", + "48CDX2mhhj9iAZthMWJKHFV9wvii9cxzDdtQKuAVwqEu", + "BRgwGasCSz1zA4yqdcvurAGV7ZroAJ9bvDNvdYj7az4X", + "9PCRbk8Gvt2zqewLKbxaSyTxA2JMtdQGhMff8EdELXNq", + "C4cnE5kDRRnqfiLuWShvoGNDstq6yk91N2PWTxQ6Hmk2", +]; diff --git a/solauto-sdk/src/services/solauto/solautoClient.ts b/solauto-sdk/src/services/solauto/solautoClient.ts index 074ec385..364428db 100644 --- a/solauto-sdk/src/services/solauto/solautoClient.ts +++ b/solauto-sdk/src/services/solauto/solautoClient.ts @@ -29,7 +29,12 @@ import { splTokenTransferUmiIx, ContextUpdates, } from "../../utils"; -import { SOLAUTO_FEES_WALLET, SOLAUTO_LUT } from "../../constants"; +import { + AUTHORITIES_REQUIRING_PATCH_LUT, + PATCH_LUT, + SOLAUTO_FEES_WALLET, + SOLAUTO_LUT, +} from "../../constants"; import { ProgramEnv, RebalanceDetails } from "../../types"; import { ReferralStateManager, @@ -221,6 +226,11 @@ export abstract class SolautoClient extends ReferralStateManager { ...(this.authorityLutAddress ? [this.authorityLutAddress.toString()] : []), + ...(AUTHORITIES_REQUIRING_PATCH_LUT.includes( + this.pos.authority.toString() + ) + ? [PATCH_LUT] + : []), ]; } From 540bbd57c600518c3adabdd42ab4a873425244ce Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 3 May 2025 15:04:32 -0400 Subject: [PATCH 17/83] some re-organizing files --- generateClients.cjs | 6 +++--- solauto-sdk/src/constants/solautoConstants.ts | 2 +- solauto-sdk/src/externalSdks/index.ts | 3 +++ .../{jupiter-sdk => externalSdks/jupiter}/errors/index.ts | 0 .../{jupiter-sdk => externalSdks/jupiter}/errors/jupiter.ts | 0 .../src/{jupiter-sdk => externalSdks/jupiter}/index.ts | 0 .../{jupiter-sdk => externalSdks/jupiter}/programs/index.ts | 0 .../jupiter}/programs/jupiter.ts | 0 .../marginfi}/accounts/bank.ts | 0 .../marginfi}/accounts/index.ts | 0 .../marginfi}/accounts/marginfiAccount.ts | 0 .../marginfi}/accounts/marginfiGroup.ts | 0 .../{marginfi-sdk => externalSdks/marginfi}/errors/index.ts | 0 .../marginfi}/errors/marginfi.ts | 0 .../src/{marginfi-sdk => externalSdks/marginfi}/index.ts | 0 .../marginfi}/instructions/index.ts | 0 .../marginfi}/instructions/lendingAccountBorrow.ts | 0 .../marginfi}/instructions/lendingAccountCloseBalance.ts | 0 .../marginfi}/instructions/lendingAccountDeposit.ts | 0 .../marginfi}/instructions/lendingAccountEndFlashloan.ts | 0 .../marginfi}/instructions/lendingAccountLiquidate.ts | 0 .../marginfi}/instructions/lendingAccountRepay.ts | 0 .../marginfi}/instructions/lendingAccountSettleEmissions.ts | 0 .../marginfi}/instructions/lendingAccountStartFlashloan.ts | 0 .../marginfi}/instructions/lendingAccountWithdraw.ts | 0 .../instructions/lendingAccountWithdrawEmissions.ts | 0 .../marginfi}/instructions/lendingPoolAccrueBankInterest.ts | 0 .../marginfi}/instructions/lendingPoolAddBank.ts | 0 .../marginfi}/instructions/lendingPoolAddBankWithSeed.ts | 0 .../marginfi}/instructions/lendingPoolCollectBankFees.ts | 0 .../marginfi}/instructions/lendingPoolConfigureBank.ts | 0 .../marginfi}/instructions/lendingPoolHandleBankruptcy.ts | 0 .../marginfi}/instructions/lendingPoolSetupEmissions.ts | 0 .../instructions/lendingPoolUpdateEmissionsParameters.ts | 0 .../marginfi}/instructions/marginfiAccountInitialize.ts | 0 .../marginfi}/instructions/marginfiGroupConfigure.ts | 0 .../marginfi}/instructions/marginfiGroupInitialize.ts | 0 .../marginfi}/instructions/setAccountFlag.ts | 0 .../marginfi}/instructions/setNewAccountAuthority.ts | 0 .../marginfi}/instructions/unsetAccountFlag.ts | 0 .../marginfi}/programs/index.ts | 0 .../marginfi}/programs/marginfi.ts | 0 .../{marginfi-sdk => externalSdks/marginfi}/shared/index.ts | 0 .../marginfi}/types/accountEventHeader.ts | 0 .../marginfi}/types/balance.ts | 0 .../marginfi}/types/balanceDecreaseType.ts | 0 .../marginfi}/types/balanceIncreaseType.ts | 0 .../marginfi}/types/balanceSide.ts | 0 .../marginfi}/types/bankConfig.ts | 0 .../marginfi}/types/bankConfigCompact.ts | 0 .../marginfi}/types/bankOperationalState.ts | 0 .../marginfi}/types/bankVaultType.ts | 0 .../marginfi}/types/groupEventHeader.ts | 0 .../{marginfi-sdk => externalSdks/marginfi}/types/index.ts | 0 .../marginfi}/types/interestRateConfig.ts | 0 .../marginfi}/types/interestRateConfigCompact.ts | 0 .../marginfi}/types/interestRateConfigOpt.ts | 0 .../marginfi}/types/lendingAccount.ts | 0 .../marginfi}/types/liquidationBalances.ts | 0 .../marginfi}/types/oracleConfig.ts | 0 .../marginfi}/types/oraclePriceType.ts | 0 .../marginfi}/types/oracleSetup.ts | 0 .../marginfi}/types/priceBias.ts | 0 .../marginfi}/types/requirementType.ts | 0 .../marginfi}/types/riskRequirementType.ts | 0 .../marginfi}/types/riskTier.ts | 0 .../marginfi}/types/wrappedI80F48.ts | 0 .../src/{pyth-sdk => externalSdks/pyth}/accounts/index.ts | 0 .../pyth}/accounts/priceUpdateV2Account.ts | 0 solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/index.ts | 0 .../src/{pyth-sdk => externalSdks/pyth}/types/index.ts | 0 .../{pyth-sdk => externalSdks/pyth}/types/priceMessage.ts | 0 .../{pyth-sdk => externalSdks/pyth}/types/priceUpdateV2.ts | 0 solauto-sdk/src/index.ts | 6 +++--- solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts | 2 +- solauto-sdk/src/services/solauto/solautoMarginfiClient.ts | 2 +- solauto-sdk/src/services/transactions/transactionUtils.ts | 4 ++-- .../src/solautoPosition/marginfiSolautoPositionEx.ts | 2 +- solauto-sdk/src/utils/marginfi/data.ts | 2 +- solauto-sdk/src/utils/marginfi/general.ts | 2 +- solauto-sdk/src/utils/priceUtils.ts | 2 +- solauto-sdk/src/utils/pythUtils.ts | 2 +- solauto-sdk/src/utils/solanaUtils.ts | 2 +- 83 files changed, 20 insertions(+), 17 deletions(-) create mode 100644 solauto-sdk/src/externalSdks/index.ts rename solauto-sdk/src/{jupiter-sdk => externalSdks/jupiter}/errors/index.ts (100%) rename solauto-sdk/src/{jupiter-sdk => externalSdks/jupiter}/errors/jupiter.ts (100%) rename solauto-sdk/src/{jupiter-sdk => externalSdks/jupiter}/index.ts (100%) rename solauto-sdk/src/{jupiter-sdk => externalSdks/jupiter}/programs/index.ts (100%) rename solauto-sdk/src/{jupiter-sdk => externalSdks/jupiter}/programs/jupiter.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/accounts/bank.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/accounts/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/accounts/marginfiAccount.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/accounts/marginfiGroup.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/errors/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/errors/marginfi.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountBorrow.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountCloseBalance.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountDeposit.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountEndFlashloan.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountLiquidate.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountRepay.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountSettleEmissions.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountStartFlashloan.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountWithdraw.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingAccountWithdrawEmissions.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolAccrueBankInterest.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolAddBank.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolAddBankWithSeed.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolCollectBankFees.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolConfigureBank.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolHandleBankruptcy.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolSetupEmissions.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/lendingPoolUpdateEmissionsParameters.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/marginfiAccountInitialize.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/marginfiGroupConfigure.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/marginfiGroupInitialize.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/setAccountFlag.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/setNewAccountAuthority.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/instructions/unsetAccountFlag.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/programs/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/programs/marginfi.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/shared/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/accountEventHeader.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/balance.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/balanceDecreaseType.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/balanceIncreaseType.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/balanceSide.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/bankConfig.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/bankConfigCompact.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/bankOperationalState.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/bankVaultType.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/groupEventHeader.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/index.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/interestRateConfig.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/interestRateConfigCompact.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/interestRateConfigOpt.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/lendingAccount.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/liquidationBalances.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/oracleConfig.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/oraclePriceType.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/oracleSetup.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/priceBias.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/requirementType.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/riskRequirementType.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/riskTier.ts (100%) rename solauto-sdk/src/{marginfi-sdk => externalSdks/marginfi}/types/wrappedI80F48.ts (100%) rename solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/accounts/index.ts (100%) rename solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/accounts/priceUpdateV2Account.ts (100%) rename solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/index.ts (100%) rename solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/types/index.ts (100%) rename solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/types/priceMessage.ts (100%) rename solauto-sdk/src/{pyth-sdk => externalSdks/pyth}/types/priceUpdateV2.ts (100%) diff --git a/generateClients.cjs b/generateClients.cjs index bb81b02c..c65890e3 100644 --- a/generateClients.cjs +++ b/generateClients.cjs @@ -98,7 +98,7 @@ generateSolautoSDK(); // "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" // ); // generateTypescriptSDKForAnchorIDL( -// "marginfi-sdk", +// "marginfiSdk", // "marginfi.json", // "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" // ); @@ -109,12 +109,12 @@ generateSolautoSDK(); // "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" // ); // generateTypescriptSDKForAnchorIDL( -// "jupiter-sdk", +// "jupiterSdk", // "jupiter.json", // "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" // ); // generateTypescriptSDKForAnchorIDL( -// "pyth-sdk", +// "pythSdk", // "pyth.json", // "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" // ); diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index fd6e98a7..e9f6837a 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -10,7 +10,7 @@ import { TOKEN_PROGRAM_ID, } from "@solana/spl-token"; import { SOLAUTO_MANAGER } from "./generalConstants"; -import { JUPITER_PROGRAM_ID } from "../jupiter-sdk"; +import { JUPITER_PROGRAM_ID } from "../externalSdks/jupiter"; export const SOLAUTO_PROD_PROGRAM = new PublicKey( "AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV" diff --git a/solauto-sdk/src/externalSdks/index.ts b/solauto-sdk/src/externalSdks/index.ts new file mode 100644 index 00000000..993974aa --- /dev/null +++ b/solauto-sdk/src/externalSdks/index.ts @@ -0,0 +1,3 @@ +export * from "./jupiter"; +export * from "./marginfi"; +export * from "./pyth"; \ No newline at end of file diff --git a/solauto-sdk/src/jupiter-sdk/errors/index.ts b/solauto-sdk/src/externalSdks/jupiter/errors/index.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/errors/index.ts rename to solauto-sdk/src/externalSdks/jupiter/errors/index.ts diff --git a/solauto-sdk/src/jupiter-sdk/errors/jupiter.ts b/solauto-sdk/src/externalSdks/jupiter/errors/jupiter.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/errors/jupiter.ts rename to solauto-sdk/src/externalSdks/jupiter/errors/jupiter.ts diff --git a/solauto-sdk/src/jupiter-sdk/index.ts b/solauto-sdk/src/externalSdks/jupiter/index.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/index.ts rename to solauto-sdk/src/externalSdks/jupiter/index.ts diff --git a/solauto-sdk/src/jupiter-sdk/programs/index.ts b/solauto-sdk/src/externalSdks/jupiter/programs/index.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/programs/index.ts rename to solauto-sdk/src/externalSdks/jupiter/programs/index.ts diff --git a/solauto-sdk/src/jupiter-sdk/programs/jupiter.ts b/solauto-sdk/src/externalSdks/jupiter/programs/jupiter.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/programs/jupiter.ts rename to solauto-sdk/src/externalSdks/jupiter/programs/jupiter.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/bank.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/bank.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/bank.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/bank.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/index.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/index.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/marginfiAccount.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/marginfiAccount.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/marginfiAccount.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/marginfiAccount.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/marginfiGroup.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/marginfiGroup.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/marginfiGroup.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/marginfiGroup.ts diff --git a/solauto-sdk/src/marginfi-sdk/errors/index.ts b/solauto-sdk/src/externalSdks/marginfi/errors/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/errors/index.ts rename to solauto-sdk/src/externalSdks/marginfi/errors/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/errors/marginfi.ts b/solauto-sdk/src/externalSdks/marginfi/errors/marginfi.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/errors/marginfi.ts rename to solauto-sdk/src/externalSdks/marginfi/errors/marginfi.ts diff --git a/solauto-sdk/src/marginfi-sdk/index.ts b/solauto-sdk/src/externalSdks/marginfi/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/index.ts rename to solauto-sdk/src/externalSdks/marginfi/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/index.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/index.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountBorrow.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountBorrow.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountBorrow.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountBorrow.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountCloseBalance.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountCloseBalance.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountCloseBalance.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountCloseBalance.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountDeposit.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountDeposit.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountDeposit.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountDeposit.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountEndFlashloan.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountEndFlashloan.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountEndFlashloan.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountEndFlashloan.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountLiquidate.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountLiquidate.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountLiquidate.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountLiquidate.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountRepay.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountRepay.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountRepay.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountRepay.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountSettleEmissions.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountSettleEmissions.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountSettleEmissions.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountSettleEmissions.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountStartFlashloan.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountStartFlashloan.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountStartFlashloan.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountStartFlashloan.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdraw.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdraw.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdraw.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdraw.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdrawEmissions.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdrawEmissions.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdrawEmissions.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdrawEmissions.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAccrueBankInterest.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAccrueBankInterest.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAccrueBankInterest.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAccrueBankInterest.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBank.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBank.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBank.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBank.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBankWithSeed.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBankWithSeed.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBankWithSeed.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBankWithSeed.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolCollectBankFees.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolCollectBankFees.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolCollectBankFees.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolCollectBankFees.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolConfigureBank.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolConfigureBank.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolConfigureBank.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolConfigureBank.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolHandleBankruptcy.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolHandleBankruptcy.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolHandleBankruptcy.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolHandleBankruptcy.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolSetupEmissions.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolSetupEmissions.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolSetupEmissions.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolSetupEmissions.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolUpdateEmissionsParameters.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolUpdateEmissionsParameters.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolUpdateEmissionsParameters.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolUpdateEmissionsParameters.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/marginfiAccountInitialize.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/marginfiAccountInitialize.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/marginfiAccountInitialize.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/marginfiAccountInitialize.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupConfigure.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupConfigure.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupConfigure.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupConfigure.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupInitialize.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupInitialize.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupInitialize.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupInitialize.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/setAccountFlag.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/setAccountFlag.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/setAccountFlag.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/setAccountFlag.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/setNewAccountAuthority.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/setNewAccountAuthority.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/setNewAccountAuthority.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/setNewAccountAuthority.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/unsetAccountFlag.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/unsetAccountFlag.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/unsetAccountFlag.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/unsetAccountFlag.ts diff --git a/solauto-sdk/src/marginfi-sdk/programs/index.ts b/solauto-sdk/src/externalSdks/marginfi/programs/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/programs/index.ts rename to solauto-sdk/src/externalSdks/marginfi/programs/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/programs/marginfi.ts b/solauto-sdk/src/externalSdks/marginfi/programs/marginfi.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/programs/marginfi.ts rename to solauto-sdk/src/externalSdks/marginfi/programs/marginfi.ts diff --git a/solauto-sdk/src/marginfi-sdk/shared/index.ts b/solauto-sdk/src/externalSdks/marginfi/shared/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/shared/index.ts rename to solauto-sdk/src/externalSdks/marginfi/shared/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/accountEventHeader.ts b/solauto-sdk/src/externalSdks/marginfi/types/accountEventHeader.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/accountEventHeader.ts rename to solauto-sdk/src/externalSdks/marginfi/types/accountEventHeader.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balance.ts b/solauto-sdk/src/externalSdks/marginfi/types/balance.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balance.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balance.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balanceDecreaseType.ts b/solauto-sdk/src/externalSdks/marginfi/types/balanceDecreaseType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balanceDecreaseType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balanceDecreaseType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balanceIncreaseType.ts b/solauto-sdk/src/externalSdks/marginfi/types/balanceIncreaseType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balanceIncreaseType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balanceIncreaseType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balanceSide.ts b/solauto-sdk/src/externalSdks/marginfi/types/balanceSide.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balanceSide.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balanceSide.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankConfig.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankConfig.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankConfig.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankConfig.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankConfigCompact.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankConfigCompact.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankConfigCompact.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankConfigCompact.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankOperationalState.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankOperationalState.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankOperationalState.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankOperationalState.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankVaultType.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankVaultType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankVaultType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankVaultType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/groupEventHeader.ts b/solauto-sdk/src/externalSdks/marginfi/types/groupEventHeader.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/groupEventHeader.ts rename to solauto-sdk/src/externalSdks/marginfi/types/groupEventHeader.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/index.ts b/solauto-sdk/src/externalSdks/marginfi/types/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/index.ts rename to solauto-sdk/src/externalSdks/marginfi/types/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/interestRateConfig.ts b/solauto-sdk/src/externalSdks/marginfi/types/interestRateConfig.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/interestRateConfig.ts rename to solauto-sdk/src/externalSdks/marginfi/types/interestRateConfig.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/interestRateConfigCompact.ts b/solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigCompact.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/interestRateConfigCompact.ts rename to solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigCompact.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/interestRateConfigOpt.ts b/solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigOpt.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/interestRateConfigOpt.ts rename to solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigOpt.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/lendingAccount.ts b/solauto-sdk/src/externalSdks/marginfi/types/lendingAccount.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/lendingAccount.ts rename to solauto-sdk/src/externalSdks/marginfi/types/lendingAccount.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/liquidationBalances.ts b/solauto-sdk/src/externalSdks/marginfi/types/liquidationBalances.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/liquidationBalances.ts rename to solauto-sdk/src/externalSdks/marginfi/types/liquidationBalances.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/oracleConfig.ts b/solauto-sdk/src/externalSdks/marginfi/types/oracleConfig.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/oracleConfig.ts rename to solauto-sdk/src/externalSdks/marginfi/types/oracleConfig.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/oraclePriceType.ts b/solauto-sdk/src/externalSdks/marginfi/types/oraclePriceType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/oraclePriceType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/oraclePriceType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/oracleSetup.ts b/solauto-sdk/src/externalSdks/marginfi/types/oracleSetup.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/oracleSetup.ts rename to solauto-sdk/src/externalSdks/marginfi/types/oracleSetup.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/priceBias.ts b/solauto-sdk/src/externalSdks/marginfi/types/priceBias.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/priceBias.ts rename to solauto-sdk/src/externalSdks/marginfi/types/priceBias.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/requirementType.ts b/solauto-sdk/src/externalSdks/marginfi/types/requirementType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/requirementType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/requirementType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/riskRequirementType.ts b/solauto-sdk/src/externalSdks/marginfi/types/riskRequirementType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/riskRequirementType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/riskRequirementType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/riskTier.ts b/solauto-sdk/src/externalSdks/marginfi/types/riskTier.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/riskTier.ts rename to solauto-sdk/src/externalSdks/marginfi/types/riskTier.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/wrappedI80F48.ts b/solauto-sdk/src/externalSdks/marginfi/types/wrappedI80F48.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/wrappedI80F48.ts rename to solauto-sdk/src/externalSdks/marginfi/types/wrappedI80F48.ts diff --git a/solauto-sdk/src/pyth-sdk/accounts/index.ts b/solauto-sdk/src/externalSdks/pyth/accounts/index.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/accounts/index.ts rename to solauto-sdk/src/externalSdks/pyth/accounts/index.ts diff --git a/solauto-sdk/src/pyth-sdk/accounts/priceUpdateV2Account.ts b/solauto-sdk/src/externalSdks/pyth/accounts/priceUpdateV2Account.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/accounts/priceUpdateV2Account.ts rename to solauto-sdk/src/externalSdks/pyth/accounts/priceUpdateV2Account.ts diff --git a/solauto-sdk/src/pyth-sdk/index.ts b/solauto-sdk/src/externalSdks/pyth/index.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/index.ts rename to solauto-sdk/src/externalSdks/pyth/index.ts diff --git a/solauto-sdk/src/pyth-sdk/types/index.ts b/solauto-sdk/src/externalSdks/pyth/types/index.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/types/index.ts rename to solauto-sdk/src/externalSdks/pyth/types/index.ts diff --git a/solauto-sdk/src/pyth-sdk/types/priceMessage.ts b/solauto-sdk/src/externalSdks/pyth/types/priceMessage.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/types/priceMessage.ts rename to solauto-sdk/src/externalSdks/pyth/types/priceMessage.ts diff --git a/solauto-sdk/src/pyth-sdk/types/priceUpdateV2.ts b/solauto-sdk/src/externalSdks/pyth/types/priceUpdateV2.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/types/priceUpdateV2.ts rename to solauto-sdk/src/externalSdks/pyth/types/priceUpdateV2.ts diff --git a/solauto-sdk/src/index.ts b/solauto-sdk/src/index.ts index 97be5854..8d3f84bb 100644 --- a/solauto-sdk/src/index.ts +++ b/solauto-sdk/src/index.ts @@ -2,9 +2,9 @@ export * from "./constants"; export * from "./generated/accounts"; export * from "./generated/instructions"; export * from "./generated/types"; -export * from "./marginfi-sdk/accounts"; -export * from "./marginfi-sdk/instructions"; -export * from "./marginfi-sdk/types"; +export * from "./externalSdks/marginfi/accounts"; +export * from "./externalSdks/marginfi/instructions"; +export * from "./externalSdks/marginfi/types"; export * from "./services"; export * from "./solautoPosition"; export * from "./types"; diff --git a/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts b/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts index cf6bb9b0..a9dec13f 100644 --- a/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts +++ b/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts @@ -19,7 +19,7 @@ import { MarginfiAccount, marginfiAccountInitialize, safeFetchAllBank, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { FlProviderBase } from "./flProviderBase"; import { bytesToI80F48, diff --git a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts index 0a5aca49..99bcd79a 100644 --- a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts +++ b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts @@ -47,7 +47,7 @@ import { lendingAccountWithdraw, marginfiAccountInitialize, safeFetchAllMarginfiAccount, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { SolautoClient, SolautoClientArgs } from "./solautoClient"; function isSigner(account: PublicKey | Signer): account is Signer { diff --git a/solauto-sdk/src/services/transactions/transactionUtils.ts b/solauto-sdk/src/services/transactions/transactionUtils.ts index d821b923..f0a6c484 100644 --- a/solauto-sdk/src/services/transactions/transactionUtils.ts +++ b/solauto-sdk/src/services/transactions/transactionUtils.ts @@ -49,13 +49,13 @@ import { getLendingAccountRepayInstructionDataSerializer, getLendingAccountWithdrawInstructionDataSerializer, getMarginfiErrorFromCode, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { JupSwapManager } from "../swap"; import { createJupiterProgram, getJupiterErrorFromCode, JUPITER_PROGRAM_ID, -} from "../../jupiter-sdk"; +} from "../../externalSdks/jupiter"; import { TransactionItemInputs, BundleSimulationError, diff --git a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts index 81a925dc..e959157b 100644 --- a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@solana/web3.js"; -import { Bank, PriceBias, safeFetchAllBank } from "../marginfi-sdk"; +import { Bank, PriceBias, safeFetchAllBank } from "../externalSdks/marginfi"; import { publicKey } from "@metaplex-foundation/umi"; import { calcMarginfiMaxLtvAndLiqThresholdBps, diff --git a/solauto-sdk/src/utils/marginfi/data.ts b/solauto-sdk/src/utils/marginfi/data.ts index 31be84f7..019f6aa9 100644 --- a/solauto-sdk/src/utils/marginfi/data.ts +++ b/solauto-sdk/src/utils/marginfi/data.ts @@ -16,7 +16,7 @@ import { OracleSetup, safeFetchBank, safeFetchMarginfiAccount, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { ContextUpdates } from "../solautoUtils"; import { fetchTokenPrices, safeGetPrice } from "../priceUtils"; import { currentUnixSeconds, validPubkey } from "../generalUtils"; diff --git a/solauto-sdk/src/utils/marginfi/general.ts b/solauto-sdk/src/utils/marginfi/general.ts index c07a550d..3d3a1a72 100644 --- a/solauto-sdk/src/utils/marginfi/general.ts +++ b/solauto-sdk/src/utils/marginfi/general.ts @@ -20,7 +20,7 @@ import { MarginfiAccount, OracleSetup, safeFetchAllBank, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { bytesToI80F48, fromBaseUnit, toBps } from "../numberUtils"; import { getTokenAccountData } from "../accountUtils"; import { diff --git a/solauto-sdk/src/utils/priceUtils.ts b/solauto-sdk/src/utils/priceUtils.ts index dffa57b1..268b44f4 100644 --- a/solauto-sdk/src/utils/priceUtils.ts +++ b/solauto-sdk/src/utils/priceUtils.ts @@ -16,7 +16,7 @@ import { } from "./generalUtils"; import { getJupPriceData } from "./jupiterUtils"; import { PriceType } from "../generated"; -import { PriceBias } from "../marginfi-sdk"; +import { PriceBias } from "../externalSdks/marginfi"; interface PriceResult { realtimePrice: number; diff --git a/solauto-sdk/src/utils/pythUtils.ts b/solauto-sdk/src/utils/pythUtils.ts index 95f6d751..68595692 100644 --- a/solauto-sdk/src/utils/pythUtils.ts +++ b/solauto-sdk/src/utils/pythUtils.ts @@ -2,7 +2,7 @@ import { PublicKey } from "@solana/web3.js"; import { publicKey, Umi } from "@metaplex-foundation/umi"; import { PYTH_PUSH_PROGRAM } from "../constants"; import { u16ToArrayBufferLE, zip } from "./generalUtils"; -import { safeFetchAllPriceUpdateV2Account } from "../pyth-sdk"; +import { safeFetchAllPriceUpdateV2Account } from "../externalSdks/pyth"; export async function getMostUpToDatePythOracle( umi: Umi, diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index 4abdeb2c..360fde99 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -38,7 +38,7 @@ import { PriorityFeeSetting, ProgramEnv, TransactionRunType } from "../types"; import { getLendingAccountEndFlashloanInstructionDataSerializer, getLendingAccountStartFlashloanInstructionDataSerializer, -} from "../marginfi-sdk"; +} from "../externalSdks/marginfi"; import { getTokenAccount } from "./accountUtils"; import { arraysAreEqual, From e712b3c9fcbc5600ce721aa65e899169d4023021 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 3 May 2025 22:10:00 -0400 Subject: [PATCH 18/83] pull price unchecked --- programs/solauto/src/clients/marginfi.rs | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index 18c24126..9bc6dea0 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -334,14 +334,10 @@ impl<'a> MarginfiClient<'a> { let price_feed = SolanaPriceAccount::account_info_to_feed(price_oracle)?; let price = if price_type == PriceType::Ema { - let price_result = price_feed - .get_price_no_older_than(clock.unix_timestamp, max_price_age) - .unwrap(); + let price_result = price_feed.get_price_unchecked(); derive_value(price_result.price, price_result.expo) } else { - let price_result = price_feed - .get_price_no_older_than(clock.unix_timestamp, max_price_age) - .unwrap(); + let price_result = price_feed.get_price_unchecked(); derive_value(price_result.price, price_result.expo) }; @@ -361,13 +357,7 @@ impl<'a> MarginfiClient<'a> { ) } else { let feed_id = &bank.data.config.oracle_keys[0].to_bytes(); - let price_result = price_feed - .get_price_no_older_than_with_custom_verification_level( - &clock, - max_price_age, - feed_id, - VerificationLevel::Full, - ) + let price_result = price_feed.get_price_unchecked(feed_id) .map_err(|e| { msg!("Pyth push oracle error: {:?}", e); ProgramError::Custom(0) From 897bba47adb47716329a82acda4f79794b5cb74c Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 3 May 2025 22:10:23 -0400 Subject: [PATCH 19/83] remove unused import --- programs/solauto/src/clients/marginfi.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index 9bc6dea0..804c98a8 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -6,7 +6,7 @@ use marginfi_sdk::generated::{ types::{Balance, OracleSetup}, }; use pyth_sdk_solana::state::SolanaPriceAccount; -use pyth_solana_receiver_sdk::price_update::{PriceUpdateV2, VerificationLevel}; +use pyth_solana_receiver_sdk::price_update::PriceUpdateV2; use solana_program::{ account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, program_error::ProgramError, pubkey::Pubkey, sysvar::Sysvar, From 604200bd33cd58cbfd63f4ea17a36e17a429dc54 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 3 May 2025 22:11:55 -0400 Subject: [PATCH 20/83] tweak --- programs/solauto/src/clients/marginfi.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index 804c98a8..a1c2c836 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -357,11 +357,7 @@ impl<'a> MarginfiClient<'a> { ) } else { let feed_id = &bank.data.config.oracle_keys[0].to_bytes(); - let price_result = price_feed.get_price_unchecked(feed_id) - .map_err(|e| { - msg!("Pyth push oracle error: {:?}", e); - ProgramError::Custom(0) - })?; + let price_result = price_feed.get_price_unchecked(feed_id).unwrap(); ( derive_value(price_result.price, price_result.exponent), derive_value(price_result.conf as i64, price_result.exponent), From 1fca7bc0c36a5ec8bf2845c7376eed8a0266ec99 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 7 May 2025 15:29:02 -0400 Subject: [PATCH 21/83] fixes --- solauto-sdk/local/patchLUT.ts | 4 ++++ solauto-sdk/src/constants/solautoConstants.ts | 17 +++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/solauto-sdk/local/patchLUT.ts b/solauto-sdk/local/patchLUT.ts index 9ad01fd5..14c8cc3d 100644 --- a/solauto-sdk/local/patchLUT.ts +++ b/solauto-sdk/local/patchLUT.ts @@ -43,6 +43,7 @@ async function getMissingAccounts() { const users = Array.from( new Set(positions.map((x) => x.authority.toString())) ); + const usersRequiringPatchLut = []; for (const user of users) { const authority = new PublicKey(user); const referralState = referralStatesData.find((x) => @@ -82,9 +83,12 @@ async function getMissingAccounts() { console.log("\nMissing accounts for", referralState.publicKey.toString()); console.log(missingAccounts); allMissingAccounts.push(...missingAccounts); + usersRequiringPatchLut.push(user); } } + console.log("Users requiring patch LUT:"); + console.log(Array.from(new Set(usersRequiringPatchLut))); return allMissingAccounts; } diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index e9f6837a..89522450 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -69,12 +69,13 @@ export const STANDARD_LUT_ACCOUNTS = [ // TODO: remove me export const PATCH_LUT = "CmPZfu3tkeoMutytxhVKT7Hemuwd5jM65VdLNGdBddxQ"; export const AUTHORITIES_REQUIRING_PATCH_LUT = [ - "5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe", - "F2uk8zsKMex8MztU7saFNq6tNbj4esWnKLJXyfo2egax", - "8Vo5ScTZ1qNTYhMEibq2fekRe5DotmdqpcD2nprmRzJg", - "HLDgPtVv2Yyzzze462P89igFnyLxaCM3f9hVFmCuAX97", - "48CDX2mhhj9iAZthMWJKHFV9wvii9cxzDdtQKuAVwqEu", - "BRgwGasCSz1zA4yqdcvurAGV7ZroAJ9bvDNvdYj7az4X", - "9PCRbk8Gvt2zqewLKbxaSyTxA2JMtdQGhMff8EdELXNq", - "C4cnE5kDRRnqfiLuWShvoGNDstq6yk91N2PWTxQ6Hmk2", + 'BRgwGasCSz1zA4yqdcvurAGV7ZroAJ9bvDNvdYj7az4X', + '5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe', + 'HLDgPtVv2Yyzzze462P89igFnyLxaCM3f9hVFmCuAX97', + 'C4cnE5kDRRnqfiLuWShvoGNDstq6yk91N2PWTxQ6Hmk2', + '8Vo5ScTZ1qNTYhMEibq2fekRe5DotmdqpcD2nprmRzJg', + 'F2uk8zsKMex8MztU7saFNq6tNbj4esWnKLJXyfo2egax', + '9PCRbk8Gvt2zqewLKbxaSyTxA2JMtdQGhMff8EdELXNq' ]; + + From 9a806de5a9b8b36b0d6618a6f54caae1e597ad20 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 7 May 2025 15:29:15 -0400 Subject: [PATCH 22/83] space --- solauto-sdk/src/constants/solautoConstants.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index 89522450..338fd833 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -77,5 +77,3 @@ export const AUTHORITIES_REQUIRING_PATCH_LUT = [ 'F2uk8zsKMex8MztU7saFNq6tNbj4esWnKLJXyfo2egax', '9PCRbk8Gvt2zqewLKbxaSyTxA2JMtdQGhMff8EdELXNq' ]; - - From 0660387cea1f1456ed96121c8666b8d5ffbe10ed Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 9 May 2025 01:27:07 -0400 Subject: [PATCH 23/83] optimize stack memory usage in program --- .../solauto/src/instructions/rebalance.rs | 146 +++---- programs/solauto/src/processors/position.rs | 36 +- programs/solauto/src/rebalance/rebalancer.rs | 314 +++++++------- .../solauto/src/rebalance/rebalancer_tests.rs | 410 +++++++++--------- .../solauto/src/rebalance/solauto_fees.rs | 10 - programs/solauto/src/types/solauto.rs | 26 +- programs/solauto/src/types/solauto_manager.rs | 159 +++---- solauto-sdk/package.json | 2 +- .../src/services/rebalance/solautoFees.ts | 9 - .../manager/transactionsManager.ts | 5 +- 10 files changed, 532 insertions(+), 585 deletions(-) diff --git a/programs/solauto/src/instructions/rebalance.rs b/programs/solauto/src/instructions/rebalance.rs index 0ca6fe95..d097edf9 100644 --- a/programs/solauto/src/instructions/rebalance.rs +++ b/programs/solauto/src/instructions/rebalance.rs @@ -2,7 +2,10 @@ use std::ops::Sub; use marginfi_sdk::generated::accounts::Bank; use solana_program::{ - clock::Clock, entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey, + clock::Clock, + entrypoint::ProgramResult, + program_error::ProgramError, + pubkey::Pubkey, sysvar::Sysvar, }; @@ -14,12 +17,13 @@ use crate::{ types::{ errors::SolautoError, instruction::{ - accounts::{Context, MarginfiRebalanceAccounts}, - RebalanceSettings, SolautoStandardAccounts, + accounts::{ Context, MarginfiRebalanceAccounts }, + RebalanceSettings, + SolautoStandardAccounts, }, - lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, - shared::{DeserializedAccount, RebalanceStep, SolautoRebalanceType, TokenType}, - solauto_manager::{SolautoManager, SolautoManagerAccounts}, + lending_protocol::{ LendingProtocolClient, LendingProtocolTokenAccounts }, + shared::{ DeserializedAccount, RebalanceStep, SolautoRebalanceType, TokenType }, + solauto_manager::{ SolautoManager, SolautoManagerAccounts }, }, utils::ix_utils, }; @@ -30,46 +34,48 @@ pub fn marginfi_rebalance<'a>( ctx: Context<'a, MarginfiRebalanceAccounts<'a>>, mut std_accounts: Box>, rebalance_step: RebalanceStep, - args: RebalanceSettings, + args: RebalanceSettings ) -> ProgramResult { let supply_tas = LendingProtocolTokenAccounts::from( None, Some(ctx.accounts.position_supply_ta), ctx.accounts.authority_supply_ta, - ctx.accounts.vault_supply_ta, + ctx.accounts.vault_supply_ta )?; let debt_tas = LendingProtocolTokenAccounts::from( None, Some(ctx.accounts.position_debt_ta), ctx.accounts.authority_debt_ta, - ctx.accounts.vault_debt_ta, + ctx.accounts.vault_debt_ta )?; - let marginfi_client = Box::new(MarginfiClient::from( - ctx.accounts.signer, - ctx.accounts.marginfi_program, - ctx.accounts.marginfi_group, - ctx.accounts.marginfi_account, - ctx.accounts.supply_bank, - ctx.accounts.supply_price_oracle, - supply_tas.clone(), - ctx.accounts.supply_vault_authority, - ctx.accounts.debt_bank, - ctx.accounts.debt_price_oracle, - debt_tas.clone(), - ctx.accounts.debt_vault_authority, - )?); - let solauto_manager_accounts = - SolautoManagerAccounts::from(supply_tas, debt_tas, ctx.accounts.intermediary_ta, None)?; - - let rebalance_type = std_accounts - .solauto_position - .data - .rebalance - .ixs - .rebalance_type; - if rebalance_step == RebalanceStep::PreSwap - || rebalance_type == SolautoRebalanceType::FLSwapThenRebalance + let marginfi_client = Box::new( + MarginfiClient::from( + ctx.accounts.signer, + ctx.accounts.marginfi_program, + ctx.accounts.marginfi_group, + ctx.accounts.marginfi_account, + ctx.accounts.supply_bank, + ctx.accounts.supply_price_oracle, + supply_tas.clone(), + ctx.accounts.supply_vault_authority, + ctx.accounts.debt_bank, + ctx.accounts.debt_price_oracle, + debt_tas.clone(), + ctx.accounts.debt_vault_authority + )? + ); + let solauto_manager_accounts = SolautoManagerAccounts::from( + supply_tas, + debt_tas, + ctx.accounts.intermediary_ta, + None + )?; + + let rebalance_type = std_accounts.solauto_position.data.rebalance.ixs.rebalance_type; + if + rebalance_step == RebalanceStep::PreSwap || + rebalance_type == SolautoRebalanceType::FLSwapThenRebalance { if needs_refresh(&std_accounts.solauto_position, &args)? { refresh::marginfi_refresh_accounts( @@ -81,57 +87,41 @@ pub fn marginfi_rebalance<'a>( ctx.accounts.debt_bank, ctx.accounts.debt_price_oracle.unwrap(), &mut std_accounts.solauto_position, - args.price_type.unwrap().clone(), + args.price_type.unwrap().clone() )?; } else { let supply_price = MarginfiClient::load_price( &DeserializedAccount::::zerocopy(Some(ctx.accounts.supply_bank))?.unwrap(), ctx.accounts.supply_price_oracle.unwrap(), args.price_type.unwrap().clone(), - TokenType::Supply, + TokenType::Supply )?; let debt_price = MarginfiClient::load_price( &DeserializedAccount::::zerocopy(Some(ctx.accounts.debt_bank))?.unwrap(), ctx.accounts.debt_price_oracle.unwrap(), args.price_type.unwrap().clone(), - TokenType::Debt, + TokenType::Debt )?; update_token_prices(&mut std_accounts, supply_price, debt_price); } } - rebalance( - marginfi_client, - solauto_manager_accounts, - std_accounts, - rebalance_step, - args, - ) + rebalance(marginfi_client, solauto_manager_accounts, std_accounts, rebalance_step, args) } fn update_token_prices<'a>( std_accounts: &mut Box>, supply_price: f64, - debt_price: f64, + debt_price: f64 ) { - std_accounts - .solauto_position - .data - .state - .supply - .update_market_price(supply_price); - std_accounts - .solauto_position - .data - .state - .debt - .update_market_price(debt_price); + std_accounts.solauto_position.data.state.supply.update_market_price(supply_price); + std_accounts.solauto_position.data.state.debt.update_market_price(debt_price); std_accounts.solauto_position.data.refresh_state(); } fn needs_refresh( solauto_position: &DeserializedAccount, - args: &RebalanceSettings, + args: &RebalanceSettings ) -> Result { if solauto_position.data.self_managed.val { return Ok(true); @@ -144,12 +134,6 @@ fn needs_refresh( return Ok(false); } - if args.target_liq_utilization_rate_bps.is_some() - && args.target_liq_utilization_rate_bps.unwrap() == 0 - { - return Ok(true); - } - Ok(false) } @@ -158,44 +142,28 @@ fn rebalance<'a>( solauto_manager_accounts: SolautoManagerAccounts<'a>, std_accounts: Box>, rebalance_step: RebalanceStep, - args: RebalanceSettings, + args: RebalanceSettings ) -> ProgramResult { check!( - args.target_liq_utilization_rate_bps.is_none() - || std_accounts.signer.key == &std_accounts.solauto_position.data.authority, + args.target_liq_utilization_rate_bps.is_none() || + std_accounts.signer.key == &std_accounts.solauto_position.data.authority, SolautoError::NonAuthorityProvidedTargetLTV ); - check!( - std_accounts.authority_referral_state.is_some(), - SolautoError::IncorrectAccounts - ); - check!( - args.flash_loan_fee_bps.unwrap_or(0) <= 150, - SolautoError::IncorrectInstructions - ); + check!(std_accounts.authority_referral_state.is_some(), SolautoError::IncorrectAccounts); + check!(args.flash_loan_fee_bps.unwrap_or(0) <= 150, SolautoError::IncorrectInstructions); let fees_bps = SolautoFeesBps::from( - std_accounts - .authority_referral_state - .as_ref() - .unwrap() - .data - .referred_by_state - != Pubkey::default(), + std_accounts.authority_referral_state.as_ref().unwrap().data.referred_by_state != + Pubkey::default(), args.target_liq_utilization_rate_bps, - std_accounts - .solauto_position - .data - .state - .net_worth - .usd_value(), + std_accounts.solauto_position.data.state.net_worth.usd_value() ); let mut solauto_manager = SolautoManager::from( client, solauto_manager_accounts, std_accounts, - Some(fees_bps), + Some(fees_bps) )?; solauto_manager.rebalance(args, rebalance_step)?; diff --git a/programs/solauto/src/processors/position.rs b/programs/solauto/src/processors/position.rs index ffc9cba8..c9d20fc9 100644 --- a/programs/solauto/src/processors/position.rs +++ b/programs/solauto/src/processors/position.rs @@ -1,29 +1,27 @@ -use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, msg}; +use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult, msg }; use crate::{ - check, - instructions::{close_position, update_position}, + instructions::{ close_position, update_position }, state::solauto_position::SolautoPosition, types::{ - errors::SolautoError, instruction::{ - accounts::{CancelDCAAccounts, ClosePositionAccounts, UpdatePositionAccounts}, + accounts::{ ClosePositionAccounts, UpdatePositionAccounts }, UpdatePositionData, }, shared::DeserializedAccount, }, - utils::{ix_utils, solauto_utils, validation_utils}, + utils::validation_utils, }; pub fn process_update_position_instruction<'a>( accounts: &'a [AccountInfo<'a>], - args: UpdatePositionData, + args: UpdatePositionData ) -> ProgramResult { msg!("Instruction: Update position"); let ctx = UpdatePositionAccounts::context(accounts)?; - let solauto_position = - DeserializedAccount::::zerocopy(Some(ctx.accounts.solauto_position))? - .unwrap(); + let solauto_position = DeserializedAccount:: + ::zerocopy(Some(ctx.accounts.solauto_position))? + .unwrap(); validation_utils::validate_instruction(ctx.accounts.signer, &solauto_position, true, true)?; validation_utils::validate_standard_programs( @@ -31,7 +29,7 @@ pub fn process_update_position_instruction<'a>( Some(ctx.accounts.token_program), None, None, - None, + None )?; if args.dca.is_some() { @@ -39,7 +37,7 @@ pub fn process_update_position_instruction<'a>( &solauto_position, ctx.accounts.position_dca_ta, Some(args.dca.as_ref().unwrap().token_type), - None, + None )?; } @@ -49,9 +47,9 @@ pub fn process_update_position_instruction<'a>( pub fn process_close_position_instruction<'a>(accounts: &'a [AccountInfo<'a>]) -> ProgramResult { msg!("Instruction: Close position"); let ctx = ClosePositionAccounts::context(accounts)?; - let solauto_position = - DeserializedAccount::::zerocopy(Some(ctx.accounts.solauto_position))? - .unwrap(); + let solauto_position = DeserializedAccount:: + ::zerocopy(Some(ctx.accounts.solauto_position))? + .unwrap(); validation_utils::validate_instruction(ctx.accounts.signer, &solauto_position, true, true)?; validation_utils::validate_standard_programs( @@ -59,25 +57,25 @@ pub fn process_close_position_instruction<'a>(accounts: &'a [AccountInfo<'a>]) - Some(ctx.accounts.token_program), Some(ctx.accounts.ata_program), None, - None, + None )?; validation_utils::validate_token_accounts( &solauto_position, Some(ctx.accounts.position_supply_ta), - Some(ctx.accounts.position_debt_ta), + Some(ctx.accounts.position_debt_ta) )?; validation_utils::validate_token_accounts( &solauto_position, Some(ctx.accounts.signer_supply_ta), - Some(ctx.accounts.signer_debt_ta), + Some(ctx.accounts.signer_debt_ta) )?; if !cfg!(feature = "local") { validation_utils::validate_no_active_balances( ctx.accounts.lp_user_account, - solauto_position.data.position.lending_platform, + solauto_position.data.position.lending_platform )?; } diff --git a/programs/solauto/src/rebalance/rebalancer.rs b/programs/solauto/src/rebalance/rebalancer.rs index b6180542..da9e9f5e 100644 --- a/programs/solauto/src/rebalance/rebalancer.rs +++ b/programs/solauto/src/rebalance/rebalancer.rs @@ -1,46 +1,53 @@ -use std::{ - cmp::min, - ops::{Add, Mul}, -}; +use std::{ cmp::min, ops::{ Add, Mul } }; -use solana_program::{entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey}; +use solana_program::{ entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey }; use crate::{ check, constants::SOLAUTO_FEES_WALLET, state::solauto_position::{ - PositionTokenState, RebalanceData, SolautoPosition, TokenBalanceChangeType, + PositionTokenState, + RebalanceData, + SolautoPosition, + TokenBalanceChangeType, }, types::{ errors::SolautoError, instruction::RebalanceSettings, shared::{ - BareSplTokenTransferArgs, RebalanceDirection, RebalanceStep, SolautoRebalanceType, - SwapType, TokenBalanceAmount, + RebalanceDirection, + RebalanceStep, + SolautoRebalanceType, + SwapType, + TokenBalanceAmount, + }, + solauto::{ + FromLendingPlatformAction, + SolautoAccount, + SolautoCpiAction, + SolautoSplTokenTransferArgs, }, - solauto::{FromLendingPlatformAction, SolautoCpiAction}, }, utils::{ - math_utils::{calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit}, + math_utils::{ calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit }, validation_utils::correct_token_account, }, }; use super::{ solauto_fees::SolautoFeesBps, - utils::{eligible_for_rebalance, get_rebalance_values}, + utils::{ eligible_for_rebalance, get_rebalance_values }, }; pub struct TokenAccountData { - pub pk: Pubkey, pub balance: u64, } impl TokenAccountData { - pub fn from(pk: Pubkey, balance: u64) -> Self { - Self { pk, balance } + pub fn from(balance: u64) -> Self { + Self { balance } } - pub fn without_balance(pk: Pubkey) -> Self { - Self { pk, balance: 0 } + pub fn new() -> Self { + Self { balance: 0 } } } @@ -53,9 +60,6 @@ pub struct SolautoPositionData<'a> { pub struct RebalancerData<'a> { pub rebalance_args: RebalanceSettings, pub solauto_position: SolautoPositionData<'a>, - pub intermediary_ta: TokenAccountData, - pub authority_supply_ta: Option, - pub authority_debt_ta: Option, pub solauto_fees_bps: SolautoFeesBps, pub solauto_fees_ta: Option, pub referred_by_state: Option, @@ -113,18 +117,15 @@ impl<'a> Rebalancer<'a> { } check!( - self.data - .rebalance_args - .target_liq_utilization_rate_bps - .is_some() - || eligible_for_rebalance(self.position_data()), + self.data.rebalance_args.target_liq_utilization_rate_bps.is_some() || + eligible_for_rebalance(self.position_data()), SolautoError::InvalidRebalanceCondition ); self.data.solauto_position.data.rebalance.values = get_rebalance_values( self.position_data(), &self.data.rebalance_args, - &self.data.solauto_fees_bps, + &self.data.solauto_fees_bps )?; Ok(()) @@ -134,12 +135,12 @@ impl<'a> Rebalancer<'a> { &self, rounded_usd_value: u64, token_usage: PositionTokenState, - max: Option, + max: Option ) -> u64 { let base_unit_amount = usd_value_to_base_unit( from_rounded_usd_value(rounded_usd_value), token_usage.decimals, - token_usage.market_price(), + token_usage.market_price() ); if max.is_some() { @@ -149,50 +150,52 @@ impl<'a> Rebalancer<'a> { } } - fn get_dynamic_balance(&self) -> (u64, &TokenAccountData) { - let ta = if self.is_boost() { - self.position_supply_ta() + fn get_dynamic_balance(&self) -> (u64, SolautoAccount) { + let (ta, account) = if self.is_boost() { + (self.position_supply_ta(), SolautoAccount::SolautoPositionSupplyTa) } else { - self.position_debt_ta() + (self.position_debt_ta(), SolautoAccount::SolautoPositionDebtTa) }; let balance = ta.balance; // Subtract current balances that are attributed to DCA / limit order in - (balance, ta) + (balance, account) } fn transfer_to_authority_if_needed(&mut self, base_unit_amount: u64) { if self.position_data().self_managed.val { let (solauto_position_ta, authority_ta) = if self.is_boost() { - (self.position_supply_ta().pk, &self.data.authority_supply_ta) + (SolautoAccount::SolautoPositionSupplyTa, SolautoAccount::AuthoritySupplyTa) } else { - (self.position_debt_ta().pk, &self.data.authority_debt_ta) + (SolautoAccount::SolautoPositionDebtTa, SolautoAccount::AuthorityDebtTa) }; - self.actions.push(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { - from_wallet: self.data.solauto_position.data.pubkey(), + self.actions.push( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: solauto_position_ta, - to_wallet_ta: authority_ta.as_ref().unwrap().pk, + to_wallet_ta: authority_ta, amount: base_unit_amount, - }, - )); + }) + ); } } - fn pull_liquidity_from_lp(&mut self, base_unit_amount: u64, destination_ta: Pubkey) { + fn pull_liquidity_from_lp(&mut self, base_unit_amount: u64, destination_ta: SolautoAccount) { if self.is_boost() { - self.actions - .push(SolautoCpiAction::Borrow(FromLendingPlatformAction { + self.actions.push( + SolautoCpiAction::Borrow(FromLendingPlatformAction { amount: base_unit_amount, to_wallet_ta: destination_ta, - })); + }) + ); } else { - self.actions - .push(SolautoCpiAction::Withdraw(FromLendingPlatformAction { + self.actions.push( + SolautoCpiAction::Withdraw(FromLendingPlatformAction { amount: TokenBalanceAmount::Some(base_unit_amount), to_wallet_ta: destination_ta, - })); + }) + ); } } @@ -200,40 +203,24 @@ impl<'a> Rebalancer<'a> { self.transfer_to_authority_if_needed(base_unit_amount); if self.is_boost() { - self.actions - .push(SolautoCpiAction::Deposit(base_unit_amount)); + self.actions.push(SolautoCpiAction::Deposit(base_unit_amount)); } else { - let token_balance_amount = if self - .data - .rebalance_args - .target_liq_utilization_rate_bps - .is_some() - && self - .data - .rebalance_args - .target_liq_utilization_rate_bps - .unwrap() - == 0 + let token_balance_amount = if + self.data.rebalance_args.target_liq_utilization_rate_bps.is_some() && + self.data.rebalance_args.target_liq_utilization_rate_bps.unwrap() == 0 { TokenBalanceAmount::All } else { - TokenBalanceAmount::Some(min( - self.position_data().state.debt.amount_used.base_unit, - base_unit_amount, - )) + TokenBalanceAmount::Some( + min(self.position_data().state.debt.amount_used.base_unit, base_unit_amount) + ) }; - self.actions - .push(SolautoCpiAction::Repay(token_balance_amount)); + self.actions.push(SolautoCpiAction::Repay(token_balance_amount)); } } fn get_additional_amount_before_swap(&mut self) -> u64 { - if !self - .rebalance_data() - .values - .token_balance_change - .requires_one() - { + if !self.rebalance_data().values.token_balance_change.requires_one() { return 0; } @@ -242,41 +229,45 @@ impl<'a> Rebalancer<'a> { let action = match token_balance_change.change_type { TokenBalanceChangeType::PreSwapDeposit => { - Some(SolautoCpiAction::Deposit(self.calc_additional_amount( - token_balance_change.amount_usd, - self.position_data().state.supply, - Some(self.data.solauto_position.supply_ta.balance), - ))) + Some( + SolautoCpiAction::Deposit( + self.calc_additional_amount( + token_balance_change.amount_usd, + self.position_data().state.supply, + Some(self.data.solauto_position.supply_ta.balance) + ) + ) + ) } TokenBalanceChangeType::PostSwapDeposit => { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.debt, - Some(self.data.solauto_position.debt_ta.balance), + Some(self.data.solauto_position.debt_ta.balance) ); - Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + Some( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_debt_ta().pk, - to_wallet_ta: self.data.intermediary_ta.pk, - }, - )) + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionDebtTa, + to_wallet_ta: SolautoAccount::IntermediaryTa, + }) + ) } TokenBalanceChangeType::PostRebalanceWithdrawDebtToken => { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.supply, - Some(self.position_supply_ta().balance), + Some(self.position_supply_ta().balance) ); - Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + Some( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_supply_ta().pk, - to_wallet_ta: self.data.intermediary_ta.pk, - }, - )) + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionSupplyTa, + to_wallet_ta: SolautoAccount::IntermediaryTa, + }) + ) } _ => None, }; @@ -289,12 +280,7 @@ impl<'a> Rebalancer<'a> { } fn get_additional_amount_after_swap(&mut self) -> u64 { - if !self - .rebalance_data() - .values - .token_balance_change - .requires_one() - { + if !self.rebalance_data().values.token_balance_change.requires_one() { return 0; } @@ -306,31 +292,31 @@ impl<'a> Rebalancer<'a> { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.supply, - None, + None ); - Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + Some( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_supply_ta().pk, - to_wallet_ta: self.data.authority_supply_ta.as_ref().unwrap().pk, // TODO: what if this is native mint - }, - )) + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionSupplyTa, + to_wallet_ta: SolautoAccount::AuthoritySupplyTa, // TODO: what if this is native mint + }) + ) } TokenBalanceChangeType::PostRebalanceWithdrawDebtToken => { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.debt, - None, + None ); - Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + Some( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_debt_ta().pk, - to_wallet_ta: self.data.authority_debt_ta.as_ref().unwrap().pk, // TODO: what if this is native mint - }, - )) + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionDebtTa, + to_wallet_ta: SolautoAccount::AuthorityDebtTa, // TODO: what if this is native mint + }) + ) } _ => None, }; @@ -346,25 +332,18 @@ impl<'a> Rebalancer<'a> { &mut self, available_balance: u64, fee_pct_bps: u16, - token_mint: Pubkey, - position_ta: Pubkey, - destination_wallet: Pubkey, - destination_ta: Pubkey, + position_ta: SolautoAccount, + destination_ta: SolautoAccount ) -> Result { - check!( - correct_token_account(&destination_ta, &destination_wallet, &token_mint), - SolautoError::IncorrectAccounts - ); - let fee_amount = calc_fee_amount(available_balance, fee_pct_bps); - self.actions.push(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { - from_wallet: self.data.solauto_position.data.pubkey(), + self.actions.push( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: position_ta, to_wallet_ta: destination_ta, amount: fee_amount, - }, - )); + }) + ); Ok(fee_amount) } @@ -372,40 +351,47 @@ impl<'a> Rebalancer<'a> { fn payout_fees(&mut self, available_balance: u64) -> Result { let rebalance_direction = &self.rebalance_data().values.rebalance_direction; let (token_mint, position_ta) = if self.is_boost() { - ( - self.position_data().state.supply.mint, - self.position_supply_ta().pk, - ) + (self.position_data().state.supply.mint, SolautoAccount::SolautoPositionSupplyTa) } else { - ( - self.position_data().state.debt.mint, - self.position_debt_ta().pk, - ) + (self.position_data().state.debt.mint, SolautoAccount::SolautoPositionDebtTa) }; let fee_payout = self.data.solauto_fees_bps.fetch_fees(rebalance_direction); if fee_payout.total == 0 { return Ok(available_balance); } + check!( + correct_token_account( + self.data.solauto_fees_ta.as_ref().unwrap(), + &SOLAUTO_FEES_WALLET, + &token_mint + ), + SolautoError::IncorrectAccounts + ); let solauto_fees = self.payout_fee( available_balance, fee_payout.solauto, - token_mint, position_ta, - SOLAUTO_FEES_WALLET, - self.data.solauto_fees_ta.unwrap(), + SolautoAccount::SolautoFeesTa )?; - let referrer_fees = if self.data.referred_by_state.is_some() - && self.data.referred_by_state.unwrap() != Pubkey::default() + let referrer_fees = if + self.data.referred_by_state.is_some() && + self.data.referred_by_state.unwrap() != Pubkey::default() { + check!( + correct_token_account( + self.data.referred_by_ta.as_ref().unwrap(), + self.data.referred_by_state.as_ref().unwrap(), + &token_mint + ), + SolautoError::IncorrectAccounts + ); self.payout_fee( available_balance, fee_payout.referrer, - token_mint, position_ta, - self.data.referred_by_state.unwrap(), - self.data.referred_by_ta.unwrap(), + SolautoAccount::ReferredByTa )? } else { 0 @@ -415,12 +401,14 @@ impl<'a> Rebalancer<'a> { } fn repay_flash_loan_if_necessary(&mut self) -> ProgramResult { - if matches!( - self.rebalance_data().ixs.rebalance_type, - SolautoRebalanceType::DoubleRebalanceWithFL - | SolautoRebalanceType::FLRebalanceThenSwap - | SolautoRebalanceType::FLSwapThenRebalance - ) { + if + matches!( + self.rebalance_data().ixs.rebalance_type, + SolautoRebalanceType::DoubleRebalanceWithFL | + SolautoRebalanceType::FLRebalanceThenSwap | + SolautoRebalanceType::FLSwapThenRebalance + ) + { let flash_loan_amount = self.rebalance_data().ixs.flash_loan_amount; let fl_repay_amount = if self.rebalance_data().ixs.swap_type == SwapType::ExactOut { @@ -429,13 +417,11 @@ impl<'a> Rebalancer<'a> { check!(flash_loan_amount != 0, SolautoError::IncorrectInstructions); let flash_loan_fee_bps = self.data.rebalance_args.flash_loan_fee_bps.unwrap_or(0); flash_loan_amount.add( - (flash_loan_amount as f64) - .mul(from_bps(flash_loan_fee_bps)) - .ceil() as u64, + (flash_loan_amount as f64).mul(from_bps(flash_loan_fee_bps)).ceil() as u64 ) }; - self.pull_liquidity_from_lp(fl_repay_amount, self.data.intermediary_ta.pk); + self.pull_liquidity_from_lp(fl_repay_amount, SolautoAccount::IntermediaryTa); } Ok(()) @@ -460,7 +446,7 @@ impl<'a> Rebalancer<'a> { Ok(RebalanceResult { finished: true }) } else { let amount_to_pull_from_lp = amount_to_swap - additional_amount_to_swap; - self.pull_liquidity_from_lp(amount_to_pull_from_lp, self.data.intermediary_ta.pk); + self.pull_liquidity_from_lp(amount_to_pull_from_lp, SolautoAccount::IntermediaryTa); Ok(RebalanceResult { finished: false }) } } @@ -473,14 +459,14 @@ impl<'a> Rebalancer<'a> { let balance_leftover = dynamic_balance - additional_amount_after_swap; if self.rebalance_data().ixs.swap_type == SwapType::ExactOut { - self.actions.push(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: balance_ta.pk, - to_wallet_ta: self.data.intermediary_ta.pk, + self.actions.push( + SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: balance_ta, + to_wallet_ta: SolautoAccount::IntermediaryTa, amount: balance_leftover, - }, - )); + }) + ); } else { self.finish_rebalance(balance_leftover)?; } @@ -490,7 +476,7 @@ impl<'a> Rebalancer<'a> { pub fn rebalance( &mut self, - rebalance_step: RebalanceStep, + rebalance_step: RebalanceStep ) -> Result { match rebalance_step { RebalanceStep::PreSwap => self.pre_swap_rebalance(), diff --git a/programs/solauto/src/rebalance/rebalancer_tests.rs b/programs/solauto/src/rebalance/rebalancer_tests.rs index 9c836585..e3446fbb 100644 --- a/programs/solauto/src/rebalance/rebalancer_tests.rs +++ b/programs/solauto/src/rebalance/rebalancer_tests.rs @@ -1,4 +1,4 @@ -use std::ops::{Div, Mul}; +use std::ops::{ Div, Mul }; use solana_program::pubkey::Pubkey; use spl_associated_token_account::get_associated_token_address; @@ -6,21 +6,33 @@ use spl_associated_token_account::get_associated_token_address; use crate::{ constants::SOLAUTO_FEES_WALLET, state::solauto_position::{ - PositionData, PositionState, RebalanceData, SolautoPosition, SolautoSettingsParameters, + PositionData, + PositionState, + RebalanceData, + SolautoPosition, + SolautoSettingsParameters, SolautoSettingsParametersInp, }, types::{ instruction::RebalanceSettings, shared::{ - PodBool, PositionType, RebalanceDirection, RefreshedTokenState, SwapType, + PodBool, + PositionType, + RebalanceDirection, + RefreshedTokenState, + SwapType, TokenBalanceAmount, }, - solauto::{PositionValues, SolautoCpiAction}, + solauto::{ PositionValues, SolautoAccount, SolautoCpiAction }, }, utils::{ math_utils::{ - from_base_unit, from_bps, from_rounded_usd_value, get_liq_utilization_rate_bps, - round_to_decimals, to_base_unit, + from_base_unit, + from_bps, + from_rounded_usd_value, + get_liq_utilization_rate_bps, + round_to_decimals, + to_base_unit, }, solauto_utils::update_token_state, validation_utils, @@ -28,7 +40,7 @@ use crate::{ }; use super::{ - rebalancer::{Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData}, + rebalancer::{ Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData }, solauto_fees::SolautoFeesBps, }; @@ -55,7 +67,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { state.liq_utilization_rate_bps = get_liq_utilization_rate_bps( pos.values.supply_usd, pos.values.debt_usd, - from_bps(state.liq_threshold_bps), + from_bps(state.liq_threshold_bps) ); let supply_mint = Pubkey::new_unique(); @@ -72,7 +84,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { decimals: TEST_TOKEN_DECIMALS, market_price: SUPPLY_PRICE, borrow_fee_bps: None, - }), + }) ); update_token_state( &mut state.debt, @@ -83,7 +95,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { decimals: TEST_TOKEN_DECIMALS, market_price: DEBT_PRICE, borrow_fee_bps: Some(BORROW_FEE_BPS), - }), + }) ); let mut position_data = PositionData::default(); @@ -94,7 +106,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { Pubkey::new_unique(), PositionType::Leverage, position_data, - state, + state ); Box::new(position) @@ -110,21 +122,29 @@ pub struct FakeRebalance<'a> { fn create_rebalancer<'a>( data: FakeRebalance<'a>, rebalance_args: RebalanceSettings, - flash_loan_amount: Option, + flash_loan_amount: Option ) -> Rebalancer<'a> { data.pos.rebalance.ixs.rebalance_type = rebalance_args.rebalance_type; data.pos.rebalance.ixs.flash_loan_amount = flash_loan_amount.unwrap_or(0); data.pos.rebalance.ixs.active = PodBool::new(true); data.pos.rebalance.ixs.swap_type = rebalance_args.swap_type.unwrap_or(SwapType::default()); - let position_supply_ta = - get_associated_token_address(&data.pos.pubkey(), &data.pos.state.supply.mint); - let position_debt_ta = - get_associated_token_address(&data.pos.pubkey(), &data.pos.state.debt.mint); - let position_authority_supply_ta = - get_associated_token_address(&data.pos.authority, &data.pos.state.supply.mint); - let position_authority_debt_ta = - get_associated_token_address(&data.pos.authority, &data.pos.state.debt.mint); + let position_supply_ta = get_associated_token_address( + &data.pos.pubkey(), + &data.pos.state.supply.mint + ); + let position_debt_ta = get_associated_token_address( + &data.pos.pubkey(), + &data.pos.state.debt.mint + ); + let position_authority_supply_ta = get_associated_token_address( + &data.pos.authority, + &data.pos.state.supply.mint + ); + let position_authority_debt_ta = get_associated_token_address( + &data.pos.authority, + &data.pos.state.debt.mint + ); let fees_mint = if data.rebalance_direction == RebalanceDirection::Boost { data.pos.state.supply.mint @@ -138,32 +158,24 @@ fn create_rebalancer<'a>( rebalance_args, solauto_position: SolautoPositionData { data: data.pos, - supply_ta: TokenAccountData::from( - position_supply_ta, - data.position_supply_ta_balance.unwrap_or(0), - ), - debt_ta: TokenAccountData::from( - position_debt_ta, - data.position_debt_ta_balance.unwrap_or(0), - ), + supply_ta: TokenAccountData::from(data.position_supply_ta_balance.unwrap_or(0)), + debt_ta: TokenAccountData::from(data.position_debt_ta_balance.unwrap_or(0)), }, - authority_supply_ta: Some(TokenAccountData::without_balance( - position_authority_supply_ta, - )), - authority_debt_ta: Some(TokenAccountData::without_balance( - position_authority_debt_ta, - )), solauto_fees_bps: solauto_fees, referred_by_state: None, referred_by_ta: None, - intermediary_ta: TokenAccountData::without_balance(Pubkey::new_unique()), solauto_fees_ta: Some(solauto_fees_ta), }); rebalancer } -fn credit_token_account<'a>(rebalancer: &mut Rebalancer<'a>, ta_pk: Pubkey, base_unit_amount: i64) { +fn credit_token_account<'a>( + rebalancer: &mut Rebalancer<'a>, + ta_creditor: &mut TaCreditor, + ta_pk: SolautoAccount, + base_unit_amount: i64 +) { let credit_ta = |ta: &mut TokenAccountData| { println!("Crediting token account with {}", base_unit_amount); if base_unit_amount > 0 { @@ -173,106 +185,94 @@ fn credit_token_account<'a>(rebalancer: &mut Rebalancer<'a>, ta_pk: Pubkey, base } }; - if ta_pk == rebalancer.data.solauto_position.supply_ta.pk { + if ta_pk == SolautoAccount::SolautoPositionSupplyTa { credit_ta(&mut rebalancer.data.solauto_position.supply_ta); - } else if ta_pk == rebalancer.data.solauto_position.debt_ta.pk { + } else if ta_pk == SolautoAccount::SolautoPositionDebtTa { credit_ta(&mut rebalancer.data.solauto_position.debt_ta); - } else if ta_pk == rebalancer.data.intermediary_ta.pk { - credit_ta(&mut rebalancer.data.intermediary_ta); - } else if ta_pk == rebalancer.data.authority_supply_ta.as_ref().unwrap().pk { - credit_ta(&mut rebalancer.data.authority_supply_ta.as_mut().unwrap()); - } else if ta_pk == rebalancer.data.authority_debt_ta.as_ref().unwrap().pk { - credit_ta(&mut rebalancer.data.authority_debt_ta.as_mut().unwrap()); + } else if ta_pk == SolautoAccount::IntermediaryTa { + credit_ta(&mut ta_creditor.intermediary_ta); + } else if ta_pk == SolautoAccount::AuthoritySupplyTa { + credit_ta(&mut ta_creditor.authority_supply_ta); + } else if ta_pk == SolautoAccount::AuthorityDebtTa { + credit_ta(&mut ta_creditor.authority_debt_ta); } else { println!("Couldn't find token account"); } } -fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { +fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>, ta_creditor: &mut TaCreditor) { println!("Actions: {}", rebalancer.actions().len()); for action in rebalancer.actions().clone() { match action { SolautoCpiAction::Deposit(amount) => { println!("Deposit {}", amount); - rebalancer - .data - .solauto_position - .data - .state - .supply - .update_usage(amount as i64); + rebalancer.data.solauto_position.data.state.supply.update_usage(amount as i64); credit_token_account( rebalancer, - rebalancer.data.solauto_position.supply_ta.pk, - (amount as i64) * -1, + ta_creditor, + SolautoAccount::SolautoPositionSupplyTa, + (amount as i64) * -1 ); } SolautoCpiAction::Withdraw(data) => { let base_unit_amount = if let TokenBalanceAmount::Some(amount) = data.amount { amount } else { - rebalancer - .data - .solauto_position - .data - .state - .supply - .amount_used - .base_unit + rebalancer.data.solauto_position.data.state.supply.amount_used.base_unit }; println!("Withdraw {}", base_unit_amount); - rebalancer - .data - .solauto_position - .data - .state - .supply - .update_usage((base_unit_amount as i64) * -1); - credit_token_account(rebalancer, data.to_wallet_ta, base_unit_amount as i64); + rebalancer.data.solauto_position.data.state.supply.update_usage( + (base_unit_amount as i64) * -1 + ); + credit_token_account( + rebalancer, + ta_creditor, + data.to_wallet_ta, + base_unit_amount as i64 + ); } SolautoCpiAction::Borrow(data) => { println!("Borrow {}", data.amount); - rebalancer - .data - .solauto_position - .data - .state - .debt - .update_usage(data.amount as i64); - credit_token_account(rebalancer, data.to_wallet_ta, data.amount as i64); + rebalancer.data.solauto_position.data.state.debt.update_usage(data.amount as i64); + credit_token_account( + rebalancer, + ta_creditor, + data.to_wallet_ta, + data.amount as i64 + ); } SolautoCpiAction::Repay(data) => { let base_unit_amount = if let TokenBalanceAmount::Some(amount) = data { amount } else { - rebalancer - .data - .solauto_position - .data - .state - .debt - .amount_used - .base_unit + rebalancer.data.solauto_position.data.state.debt.amount_used.base_unit }; println!("Repay {}", base_unit_amount); - rebalancer - .data - .solauto_position - .data - .state - .debt - .update_usage((base_unit_amount as i64) * -1); + rebalancer.data.solauto_position.data.state.debt.update_usage( + (base_unit_amount as i64) * -1 + ); credit_token_account( rebalancer, - rebalancer.data.solauto_position.debt_ta.pk, - (base_unit_amount as i64) * -1, + ta_creditor, + SolautoAccount::SolautoPositionDebtTa, + (base_unit_amount as i64) * -1 ); } SolautoCpiAction::SplTokenTransfer(args) => { println!("Transfer from {}", args.amount); - credit_token_account(rebalancer, args.from_wallet_ta, (args.amount as i64) * -1); - credit_token_account(rebalancer, args.to_wallet_ta, args.amount as i64); + credit_token_account( + rebalancer, + ta_creditor, + args.from_wallet_ta, + (args.amount as i64) * -1 + ); + credit_token_account( + rebalancer, + ta_creditor, + args.to_wallet_ta, + args.amount as i64 + ); } } } @@ -282,8 +282,9 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { fn perform_swap<'a>( rebalancer: &mut Rebalancer<'a>, + ta_creditor: &mut TaCreditor, rebalance_direction: &RebalanceDirection, - to_solauto_position_ta: bool, + to_solauto_position_ta: bool ) -> u64 { let (input_price, output_price) = if rebalance_direction == &RebalanceDirection::Boost { (DEBT_PRICE, SUPPLY_PRICE) @@ -292,30 +293,33 @@ fn perform_swap<'a>( }; let swap_usd_value = from_base_unit::( - rebalancer.data.intermediary_ta.balance, - TEST_TOKEN_DECIMALS, - ) - .mul(input_price); + ta_creditor.intermediary_ta.balance, + TEST_TOKEN_DECIMALS + ).mul(input_price); println!("Swapping ${}", swap_usd_value); - rebalancer.data.intermediary_ta.balance = 0; + ta_creditor.intermediary_ta.balance = 0; - let output_amount = - to_base_unit::(swap_usd_value.div(output_price), TEST_TOKEN_DECIMALS); + let output_amount = to_base_unit::( + swap_usd_value.div(output_price), + TEST_TOKEN_DECIMALS + ); if to_solauto_position_ta { if rebalance_direction == &RebalanceDirection::Boost { credit_token_account( rebalancer, - rebalancer.data.solauto_position.supply_ta.pk, - output_amount as i64, + ta_creditor, + SolautoAccount::SolautoPositionSupplyTa, + output_amount as i64 ); } else { credit_token_account( rebalancer, - rebalancer.data.solauto_position.debt_ta.pk, - output_amount as i64, + ta_creditor, + SolautoAccount::SolautoPositionDebtTa, + output_amount as i64 ); } } @@ -327,25 +331,12 @@ fn validate_rebalance<'a>(rebalancer: &mut Rebalancer<'a>) { assert_eq!( round_to_decimals( from_rounded_usd_value( - rebalancer - .data - .solauto_position - .data - .rebalance - .values - .target_debt_usd + rebalancer.data.solauto_position.data.rebalance.values.target_debt_usd ), 4 ), round_to_decimals( - rebalancer - .data - .solauto_position - .data - .state - .debt - .amount_used - .usd_value(), + rebalancer.data.solauto_position.data.state.debt.amount_used.usd_value(), 4 ), "Incorrect debt usd. Expected (left) vs. actual (right)" @@ -353,25 +344,12 @@ fn validate_rebalance<'a>(rebalancer: &mut Rebalancer<'a>) { assert_eq!( round_to_decimals( from_rounded_usd_value( - rebalancer - .data - .solauto_position - .data - .rebalance - .values - .target_supply_usd + rebalancer.data.solauto_position.data.rebalance.values.target_supply_usd ), 4 ), round_to_decimals( - rebalancer - .data - .solauto_position - .data - .state - .supply - .amount_used - .usd_value(), + rebalancer.data.solauto_position.data.state.supply.amount_used.usd_value(), 4 ), "Incorrect supply usd. Expected (left) vs. actual (right)" @@ -381,15 +359,30 @@ fn validate_rebalance<'a>(rebalancer: &mut Rebalancer<'a>) { rebalancer.data.solauto_position.data.rebalance = RebalanceData::default(); } +pub struct TaCreditor { + pub intermediary_ta: TokenAccountData, + pub authority_supply_ta: TokenAccountData, + pub authority_debt_ta: TokenAccountData, +} +impl TaCreditor { + pub fn new() -> Self { + Self { + intermediary_ta: TokenAccountData { balance: 0 }, + authority_supply_ta: TokenAccountData { balance: 0 }, + authority_debt_ta: TokenAccountData { balance: 0 }, + } + } +} + mod tests { - use std::ops::{Add, Div}; + use std::ops::{ Add, Div }; use crate::{ types::{ - shared::{RebalanceStep, SolautoRebalanceType, SwapType}, + shared::{ RebalanceStep, SolautoRebalanceType, SwapType }, solauto::RebalanceFeesBps, }, - utils::math_utils::{get_debt_adjustment, get_max_boost_to_bps, get_max_repay_to_bps}, + utils::math_utils::{ get_debt_adjustment, get_max_boost_to_bps, get_max_repay_to_bps }, }; use super::*; @@ -415,7 +408,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }), + }) ); let debt_adjustment = get_debt_adjustment( LIQ_THRESHOLD_BPS, @@ -425,15 +418,17 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }), + }) ); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::Regular, target_liq_utilization_rate_bps: None, - swap_in_amount_base_unit: Some(to_base_unit( - debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), - TEST_TOKEN_DECIMALS, - )), + swap_in_amount_base_unit: Some( + to_base_unit( + debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), + TEST_TOKEN_DECIMALS + ) + ), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactIn), price_type: None, @@ -446,18 +441,19 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None, + None ); + let ta_creditor = &mut TaCreditor::new(); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -483,7 +479,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }), + }) ); let debt_adjustment = get_debt_adjustment( LIQ_THRESHOLD_BPS, @@ -493,15 +489,17 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }), + }) ); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::Regular, target_liq_utilization_rate_bps: None, - swap_in_amount_base_unit: Some(to_base_unit( - debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), - TEST_TOKEN_DECIMALS, - )), + swap_in_amount_base_unit: Some( + to_base_unit( + debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), + TEST_TOKEN_DECIMALS + ) + ), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactIn), price_type: None, @@ -514,18 +512,19 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None, + None ); + let ta_creditor = &mut TaCreditor::new(); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -558,7 +557,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }), + }) ); let debt_adjustment = get_debt_adjustment( @@ -569,11 +568,11 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: FLASH_LOAN_FEE_BPS, - }), + }) ); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(DEBT_PRICE), - TEST_TOKEN_DECIMALS, + TEST_TOKEN_DECIMALS ); let rebalance_args = RebalanceSettings { @@ -592,20 +591,22 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - Some(flash_borrow), + Some(flash_borrow) ); + let ta_creditor = &mut TaCreditor::new(); credit_token_account( rebalancer, - rebalancer.data.intermediary_ta.pk, - flash_borrow as i64, + ta_creditor, + SolautoAccount::IntermediaryTa, + flash_borrow as i64 ); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -631,7 +632,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }), + }) ); let debt_adjustment = get_debt_adjustment( @@ -642,11 +643,11 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: FLASH_LOAN_FEE_BPS, - }), + }) ); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), - TEST_TOKEN_DECIMALS, + TEST_TOKEN_DECIMALS ); let rebalance_args = RebalanceSettings { @@ -665,20 +666,22 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - Some(flash_borrow), + Some(flash_borrow) ); + let ta_creditor = &mut TaCreditor::new(); credit_token_account( rebalancer, - rebalancer.data.intermediary_ta.pk, - flash_borrow as i64, + ta_creditor, + SolautoAccount::IntermediaryTa, + flash_borrow as i64 ); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -706,7 +709,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }), + }) ); let debt_adjustment = get_debt_adjustment( @@ -717,17 +720,19 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }), + }) ); println!("{}", debt_adjustment.debt_adjustment_usd.abs()); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::FLRebalanceThenSwap, target_liq_utilization_rate_bps: None, - swap_in_amount_base_unit: Some(to_base_unit( - debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), - TEST_TOKEN_DECIMALS, - )), + swap_in_amount_base_unit: Some( + to_base_unit( + debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), + TEST_TOKEN_DECIMALS + ) + ), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactOut), price_type: None, @@ -740,26 +745,28 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None, + None ); + let ta_creditor = &mut TaCreditor::new(); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(DEBT_PRICE), - TEST_TOKEN_DECIMALS, + TEST_TOKEN_DECIMALS ); credit_token_account( rebalancer, - rebalancer.data.solauto_position.debt_ta.pk, - flash_borrow, + ta_creditor, + SolautoAccount::SolautoPositionDebtTa, + flash_borrow ); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); - let swap_output_amount = perform_swap(rebalancer, &rebalance_direction, false); + let swap_output_amount = perform_swap(rebalancer, ta_creditor, &rebalance_direction, false); assert_eq!( round_to_decimals(from_base_unit(swap_output_amount, TEST_TOKEN_DECIMALS), 4), @@ -789,7 +796,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }), + }) ); let debt_adjustment = get_debt_adjustment( LIQ_THRESHOLD_BPS, @@ -799,15 +806,17 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }), + }) ); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::Regular, target_liq_utilization_rate_bps: Some(rebalance_to), - swap_in_amount_base_unit: Some(to_base_unit( - debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), - TEST_TOKEN_DECIMALS, - )), + swap_in_amount_base_unit: Some( + to_base_unit( + debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), + TEST_TOKEN_DECIMALS + ) + ), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactIn), price_type: None, @@ -820,18 +829,19 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None, + None ); + let ta_creditor = &mut TaCreditor::new(); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } diff --git a/programs/solauto/src/rebalance/solauto_fees.rs b/programs/solauto/src/rebalance/solauto_fees.rs index 3316d3dc..d0e7bb24 100644 --- a/programs/solauto/src/rebalance/solauto_fees.rs +++ b/programs/solauto/src/rebalance/solauto_fees.rs @@ -61,16 +61,6 @@ impl SolautoFeesBps { let k = 1.5; let mut fee_bps: f64; - if self.target_liq_utilization_rate_bps.is_some() - && self.target_liq_utilization_rate_bps.unwrap() == 0 - { - return FeePayout { - solauto: 0, - referrer: 0, - total: 0, - }; - } - if self.target_liq_utilization_rate_bps.is_some() { fee_bps = 15.0; } else if rebalance_direction == &RebalanceDirection::Repay { diff --git a/programs/solauto/src/types/solauto.rs b/programs/solauto/src/types/solauto.rs index fd2f70ad..aa05bd52 100644 --- a/programs/solauto/src/types/solauto.rs +++ b/programs/solauto/src/types/solauto.rs @@ -1,11 +1,29 @@ -use solana_program::pubkey::Pubkey; +use super::shared::TokenBalanceAmount; -use super::shared::{BareSplTokenTransferArgs, TokenBalanceAmount}; +#[derive(Clone, Copy, Eq, PartialEq, Hash)] +pub enum SolautoAccount { + SolautoPosition, + SolautoPositionSupplyTa, + SolautoPositionDebtTa, + AuthoritySupplyTa, + AuthorityDebtTa, + IntermediaryTa, + SolautoFeesTa, + ReferredByTa +} #[derive(Clone)] pub struct FromLendingPlatformAction { pub amount: T, - pub to_wallet_ta: Pubkey, + pub to_wallet_ta: SolautoAccount, +} + +#[derive(Clone)] +pub struct SolautoSplTokenTransferArgs { + pub from_wallet: SolautoAccount, + pub from_wallet_ta: SolautoAccount, + pub to_wallet_ta: SolautoAccount, + pub amount: u64, } #[derive(Clone)] @@ -14,7 +32,7 @@ pub enum SolautoCpiAction { Borrow(FromLendingPlatformAction), Repay(TokenBalanceAmount), Withdraw(FromLendingPlatformAction), - SplTokenTransfer(BareSplTokenTransferArgs), + SplTokenTransfer(SolautoSplTokenTransferArgs), } #[derive(Copy, Clone)] diff --git a/programs/solauto/src/types/solauto_manager.rs b/programs/solauto/src/types/solauto_manager.rs index d75389e6..e95858fc 100644 --- a/programs/solauto/src/types/solauto_manager.rs +++ b/programs/solauto/src/types/solauto_manager.rs @@ -1,23 +1,32 @@ +use std::collections::HashMap; + use math_utils::to_bps; use solana_program::{ - account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, - program_error::ProgramError, pubkey::Pubkey, + account_info::AccountInfo, + clock::Clock, + entrypoint::ProgramResult, + msg, + program_error::ProgramError, }; use super::{ - instruction::{RebalanceSettings, SolautoAction, SolautoStandardAccounts}, - lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, + instruction::{ RebalanceSettings, SolautoAction, SolautoStandardAccounts }, + lending_protocol::{ LendingProtocolClient, LendingProtocolTokenAccounts }, shared::{ - RebalanceStep, RefreshStateProps, SplTokenTransferArgs, TokenBalanceAmount, TokenType, + RebalanceStep, + RefreshStateProps, + SplTokenTransferArgs, + TokenBalanceAmount, + TokenType, }, - solauto::SolautoCpiAction, + solauto::{ SolautoAccount, SolautoCpiAction }, }; use crate::{ rebalance::{ - rebalancer::{Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData}, + rebalancer::{ Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData }, solauto_fees::SolautoFeesBps, }, - state::solauto_position::{RebalanceData, SolautoPosition}, + state::solauto_position::{ RebalanceData, SolautoPosition }, utils::*, }; @@ -32,7 +41,7 @@ impl<'a> SolautoManagerAccounts<'a> { supply: LendingProtocolTokenAccounts<'a>, debt: LendingProtocolTokenAccounts<'a>, intermediary_ta: Option<&'a AccountInfo<'a>>, - solauto_fees: Option, + solauto_fees: Option ) -> Result { Ok(Self { supply, @@ -55,7 +64,7 @@ impl<'a> SolautoManager<'a> { client: Box + 'a>, accounts: SolautoManagerAccounts<'a>, std_accounts: Box>, - solauto_fees_bps: Option, + solauto_fees_bps: Option ) -> Result { client.validate(&std_accounts)?; Ok(Self { @@ -80,15 +89,14 @@ impl<'a> SolautoManager<'a> { fn borrow(&mut self, base_unit_amount: u64, destination: &'a AccountInfo<'a>) -> ProgramResult { msg!("Borrowing {}", base_unit_amount); self.update_usage(base_unit_amount as i64, TokenType::Debt); - self.client - .borrow(base_unit_amount, destination, &self.std_accounts)?; + self.client.borrow(base_unit_amount, destination, &self.std_accounts)?; Ok(()) } fn withdraw( &mut self, amount: TokenBalanceAmount, - destination: &'a AccountInfo<'a>, + destination: &'a AccountInfo<'a> ) -> ProgramResult { let base_unit_amount = match amount { TokenBalanceAmount::All => self.position_data().state.supply.amount_used.base_unit, @@ -97,8 +105,7 @@ impl<'a> SolautoManager<'a> { msg!("Withdrawing {}", base_unit_amount); self.update_usage((base_unit_amount as i64) * -1, TokenType::Supply); - self.client - .withdraw(amount, destination, &self.std_accounts)?; + self.client.withdraw(amount, destination, &self.std_accounts)?; Ok(()) } @@ -117,41 +124,32 @@ impl<'a> SolautoManager<'a> { fn update_usage(&mut self, base_unit_amount: i64, token_type: TokenType) { let position_data = self.position_data(); if !position_data.self_managed.val || position_data.rebalance.active() { - self.std_accounts - .solauto_position - .data - .update_usage(token_type, base_unit_amount); + self.std_accounts.solauto_position.data.update_usage(token_type, base_unit_amount); } } fn get_token_account_data(&self, account: Option<&'a AccountInfo<'a>>) -> TokenAccountData { TokenAccountData::from( - *account.unwrap().key, - solauto_utils::safe_unpack_token_account(account) - .unwrap() - .unwrap() - .data - .amount, + solauto_utils::safe_unpack_token_account(account).unwrap().unwrap().data.amount ) } - fn pk_to_account_info(&self, pk: Pubkey) -> &'a AccountInfo<'a> { - let accounts = [ - Some(self.std_accounts.solauto_position.account_info), - self.accounts.supply.position_ta, - self.accounts.supply.authority_ta, - self.accounts.debt.position_ta, - self.accounts.debt.authority_ta, - self.accounts.intermediary_ta, - self.std_accounts.solauto_fees_ta, - self.std_accounts.referred_by_ta, - ]; - - accounts - .iter() - .find(|acc| acc.is_some() && acc.unwrap().key == &pk) - .unwrap() - .unwrap() + fn to_account_info(&self, acc: &SolautoAccount) -> &'a AccountInfo<'a> { + let mut map: HashMap> = HashMap::new(); + + map.insert( + SolautoAccount::SolautoPosition, + Some(self.std_accounts.solauto_position.account_info) + ); + map.insert(SolautoAccount::SolautoPositionSupplyTa, self.accounts.supply.position_ta); + map.insert(SolautoAccount::SolautoPositionDebtTa, self.accounts.debt.position_ta); + map.insert(SolautoAccount::AuthoritySupplyTa, self.accounts.supply.authority_ta); + map.insert(SolautoAccount::AuthorityDebtTa, self.accounts.debt.authority_ta); + map.insert(SolautoAccount::IntermediaryTa, self.accounts.intermediary_ta); + map.insert(SolautoAccount::SolautoFeesTa, self.std_accounts.solauto_fees_ta); + map.insert(SolautoAccount::ReferredByTa, self.std_accounts.referred_by_ta); + + map.get(acc).unwrap().unwrap() } fn get_rebalancer(&mut self, rebalance_args: RebalanceSettings) -> Rebalancer { @@ -165,61 +163,51 @@ impl<'a> SolautoManager<'a> { supply_ta: position_supply_ta, debt_ta: position_debt_ta, }, - authority_supply_ta: self.accounts.supply.authority_ta.map_or(None, |acc| { - Some(TokenAccountData::without_balance(*acc.key)) - }), - authority_debt_ta: self.accounts.debt.authority_ta.map_or(None, |acc| { - Some(TokenAccountData::without_balance(*acc.key)) - }), - intermediary_ta: TokenAccountData::without_balance( - *self.accounts.intermediary_ta.unwrap().key, - ), solauto_fees_bps: self.solauto_fees_bps.unwrap().clone(), - solauto_fees_ta: self - .std_accounts - .solauto_fees_ta - .map_or(None, |acc| Some(*acc.key)), - referred_by_state: self - .std_accounts - .authority_referral_state + solauto_fees_ta: self.std_accounts.solauto_fees_ta.map_or(None, |acc| Some(*acc.key)), + referred_by_state: self.std_accounts.authority_referral_state .as_ref() .map_or(None, |acc| Some(acc.data.referred_by_state.clone())), - referred_by_ta: self - .std_accounts - .referred_by_ta - .map_or(None, |acc| Some(*acc.key)), + referred_by_ta: self.std_accounts.referred_by_ta.map_or(None, |acc| Some(*acc.key)), }) } fn execute_cpi_actions(&mut self, actions: Vec) -> ProgramResult { - let sm = self; + let owned_seeds: Vec> = self.std_accounts.solauto_position.data + .seeds_with_bump() + .iter() + .map(|s| s.to_vec()) + .collect(); + let seeds_vec: Vec<&[u8]> = owned_seeds + .iter() + .map(|v| v.as_slice()) + .collect(); for action in actions { match action { - SolautoCpiAction::Deposit(amount) => sm.deposit(amount)?, + SolautoCpiAction::Deposit(amount) => self.deposit(amount)?, SolautoCpiAction::Withdraw(data) => { - sm.withdraw(data.amount, sm.pk_to_account_info(data.to_wallet_ta))?; + self.withdraw(data.amount, self.to_account_info(&data.to_wallet_ta))?; } SolautoCpiAction::Borrow(data) => { - sm.borrow(data.amount, sm.pk_to_account_info(data.to_wallet_ta))?; + self.borrow(data.amount, self.to_account_info(&data.to_wallet_ta))?; } - SolautoCpiAction::Repay(amount) => sm.repay(amount)?, + SolautoCpiAction::Repay(amount) => self.repay(amount)?, SolautoCpiAction::SplTokenTransfer(data) => { - let seeds = - if &data.from_wallet == sm.std_accounts.solauto_position.account_info.key { - Some(sm.std_accounts.solauto_position.data.seeds_with_bump()) - } else { - None - }; + let authority_seeds = if &data.from_wallet == &SolautoAccount::SolautoPosition { + Some(&seeds_vec) + } else { + None + }; solana_utils::spl_token_transfer( - sm.std_accounts.token_program, + self.std_accounts.token_program, SplTokenTransferArgs { amount: data.amount, - source: sm.pk_to_account_info(data.from_wallet_ta), - authority: sm.pk_to_account_info(data.from_wallet), - recipient: sm.pk_to_account_info(data.to_wallet_ta), - authority_seeds: seeds.as_ref(), - }, + source: self.to_account_info(&data.from_wallet_ta), + authority: self.to_account_info(&data.from_wallet), + recipient: self.to_account_info(&data.to_wallet_ta), + authority_seeds, + } )?; } } @@ -230,7 +218,7 @@ impl<'a> SolautoManager<'a> { pub fn refresh_position( solauto_position: &mut SolautoPosition, updated_data: RefreshStateProps, - clock: Clock, + clock: Clock ) -> ProgramResult { // Update mint addresses if self-managed if solauto_position.self_managed.val { @@ -248,11 +236,11 @@ impl<'a> SolautoManager<'a> { solauto_position.state.supply.amount_used.usd_value(), solauto_position.state.debt.amount_used.usd_value(), solauto_position.state.supply.market_price(), - solauto_position.state.supply.decimals, + solauto_position.state.supply.decimals ); solauto_position.state.net_worth.update_usd_value( updated_data.supply.market_price, - solauto_position.state.supply.decimals, + solauto_position.state.supply.decimals ); solauto_position.refresh_state(); @@ -267,10 +255,7 @@ impl<'a> SolautoManager<'a> { self.deposit(base_unit_amount)?; } SolautoAction::Borrow(base_unit_amount) => { - self.borrow( - base_unit_amount, - self.accounts.debt.position_ta.as_ref().unwrap(), - )?; + self.borrow(base_unit_amount, self.accounts.debt.position_ta.as_ref().unwrap())?; } SolautoAction::Repay(amount) => { self.repay(amount)?; @@ -285,7 +270,7 @@ impl<'a> SolautoManager<'a> { pub fn rebalance( &mut self, rebalance_args: RebalanceSettings, - rebalance_step: RebalanceStep, + rebalance_step: RebalanceStep ) -> ProgramResult { let (actions, finished) = { let mut rebalancer = self.get_rebalancer(rebalance_args.clone()); diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index ef3bff57..ac09ace9 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.749", + "version": "1.0.751", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/rebalance/solautoFees.ts b/solauto-sdk/src/services/rebalance/solautoFees.ts index 9f58893c..9d70cd1e 100644 --- a/solauto-sdk/src/services/rebalance/solautoFees.ts +++ b/solauto-sdk/src/services/rebalance/solautoFees.ts @@ -27,16 +27,7 @@ export class SolautoFeesBps { const minFeeBps = 25; // Fee in basis points for maxSize (0.25%) const k = 1.5; - if (this.targetLiqUtilizationRateBps === 0) { - return { - solauto: 0, - referrer: 0, - total: 0, - }; - } - let feeBps: number = 0; - if (this.targetLiqUtilizationRateBps !== undefined) { feeBps = 15; } else if (rebalanceDirection === RebalanceDirection.Repay) { diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index 40a385b8..ac6afc0e 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -125,8 +125,9 @@ export class TransactionsManager { item, ]); for (let j = i; j >= 0; j--) { - if (await newSet.fitsWith(txItems[j])) { - newSet.prepend(txItems[j]); + const tx = txItems[j]; + if ((await newSet.fitsWith(tx))) { + newSet.prepend(tx); i--; } else { break; From d8af1b0b8675a7576987b8d8e7243af4a9387b85 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 9 May 2025 02:39:43 -0400 Subject: [PATCH 24/83] more optimizations for stack mem --- .../src/instructions/close_position.rs | 41 ++-- .../solauto/src/instructions/referral_fees.rs | 78 +++--- programs/solauto/src/rebalance/rebalancer.rs | 42 +--- .../solauto/src/rebalance/rebalancer_tests.rs | 29 +-- programs/solauto/src/state/referral_state.rs | 3 + programs/solauto/src/types/shared.rs | 33 ++- programs/solauto/src/types/solauto.rs | 6 +- programs/solauto/src/types/solauto_manager.rs | 45 +++- programs/solauto/src/utils/solana_utils.rs | 48 ++-- .../solauto/src/utils/validation_utils.rs | 227 ++++++++---------- 10 files changed, 253 insertions(+), 299 deletions(-) diff --git a/programs/solauto/src/instructions/close_position.rs b/programs/solauto/src/instructions/close_position.rs index 106db22b..610346dd 100644 --- a/programs/solauto/src/instructions/close_position.rs +++ b/programs/solauto/src/instructions/close_position.rs @@ -1,37 +1,34 @@ -use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult}; +use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult }; use crate::{ constants::WSOL_MINT, state::solauto_position::SolautoPosition, types::{ - instruction::accounts::{ClosePositionAccounts, Context}, - shared::{DeserializedAccount, SplTokenTransferArgs}, + instruction::accounts::{ ClosePositionAccounts, Context }, + shared::{ DeserializedAccount, SplTokenTransferArgs }, }, - utils::{solana_utils, solauto_utils}, + utils::{ solana_utils, solauto_utils }, }; pub fn close_position_ta<'a>( ctx: &Context>, solauto_position: &DeserializedAccount<'a, SolautoPosition>, position_ta: &'a AccountInfo<'a>, - signer_ta: &'a AccountInfo<'a>, + signer_ta: &'a AccountInfo<'a> ) -> ProgramResult { let solauto_position_seeds = &solauto_position.data.seeds_with_bump(); - let position_ta_data = solauto_utils::safe_unpack_token_account(Some(position_ta))? - .unwrap() - .data; + let position_ta_data = solauto_utils + ::safe_unpack_token_account(Some(position_ta))? + .unwrap().data; if position_ta_data.amount > 0 && position_ta_data.mint != WSOL_MINT { - solana_utils::spl_token_transfer( - ctx.accounts.token_program, - SplTokenTransferArgs { - source: position_ta, - authority: solauto_position.account_info, - recipient: signer_ta, - amount: position_ta_data.amount, - authority_seeds: Some(solauto_position_seeds), - }, - )?; + solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { + source: position_ta, + authority: solauto_position.account_info, + recipient: signer_ta, + amount: position_ta_data.amount, + authority_seeds: Some(solauto_position_seeds), + })?; } solana_utils::close_token_account( @@ -39,25 +36,25 @@ pub fn close_position_ta<'a>( position_ta, ctx.accounts.signer, ctx.accounts.solauto_position, - Some(solauto_position_seeds), + Some(solauto_position_seeds) ) } pub fn close_position<'a>( ctx: &Context>, - solauto_position: &DeserializedAccount<'a, SolautoPosition>, + solauto_position: &DeserializedAccount<'a, SolautoPosition> ) -> ProgramResult { close_position_ta( ctx, solauto_position, ctx.accounts.position_supply_ta, - ctx.accounts.signer_supply_ta, + ctx.accounts.signer_supply_ta )?; close_position_ta( ctx, solauto_position, ctx.accounts.position_debt_ta, - ctx.accounts.signer_debt_ta, + ctx.accounts.signer_debt_ta )?; solana_utils::close_pda(ctx.accounts.solauto_position, ctx.accounts.signer) } diff --git a/programs/solauto/src/instructions/referral_fees.rs b/programs/solauto/src/instructions/referral_fees.rs index 3f3beb44..f80808ad 100644 --- a/programs/solauto/src/instructions/referral_fees.rs +++ b/programs/solauto/src/instructions/referral_fees.rs @@ -1,39 +1,36 @@ -use solana_program::{entrypoint::ProgramResult, program_pack::Pack, rent::Rent, sysvar::Sysvar}; +use solana_program::{ entrypoint::ProgramResult, program_pack::Pack, rent::Rent, sysvar::Sysvar }; use spl_token::state::Account as TokenAccount; use crate::{ constants::WSOL_MINT, state::referral_state::ReferralState, types::{ - instruction::accounts::{ClaimReferralFeesAccounts, Context, ConvertReferralFeesAccounts}, - shared::{DeserializedAccount, SplTokenTransferArgs}, + instruction::accounts::{ ClaimReferralFeesAccounts, Context, ConvertReferralFeesAccounts }, + shared::{ DeserializedAccount, SplTokenTransferArgs }, }, utils::solana_utils, }; pub fn convert_referral_fees( ctx: Context, - referral_state: DeserializedAccount, + referral_state: DeserializedAccount ) -> ProgramResult { let balance = TokenAccount::unpack(&ctx.accounts.referral_fees_ta.data.borrow())?.amount; - solana_utils::spl_token_transfer( - ctx.accounts.token_program, - SplTokenTransferArgs { - source: ctx.accounts.referral_fees_ta, - authority: ctx.accounts.referral_state, - recipient: ctx.accounts.intermediary_ta, - amount: balance, - authority_seeds: Some(&referral_state.data.seeds_with_bump()), - }, - )?; + solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { + source: ctx.accounts.referral_fees_ta, + authority: ctx.accounts.referral_state, + recipient: ctx.accounts.intermediary_ta, + amount: balance, + authority_seeds: Some(&referral_state.data.seeds_with_bump()), + })?; Ok(()) } pub fn claim_referral_fees( ctx: Context, - referral_state: DeserializedAccount, + referral_state: DeserializedAccount ) -> ProgramResult { let referral_state_seeds = &referral_state.data.seeds_with_bump(); @@ -45,28 +42,25 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.signer, ctx.accounts.signer_wsol_ta.unwrap(), - ctx.accounts.referral_fees_dest_mint, + ctx.accounts.referral_fees_dest_mint )?; let rent = Rent::get()?; let account_rent = rent.minimum_balance(TokenAccount::LEN); - solana_utils::spl_token_transfer( - ctx.accounts.token_program, - SplTokenTransferArgs { - source: ctx.accounts.referral_fees_dest_ta, - authority: ctx.accounts.referral_state, - recipient: ctx.accounts.signer_wsol_ta.unwrap(), - amount: account_rent, - authority_seeds: Some(referral_state_seeds), - }, - )?; + solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { + source: ctx.accounts.referral_fees_dest_ta, + authority: ctx.accounts.referral_state, + recipient: ctx.accounts.signer_wsol_ta.unwrap(), + amount: account_rent, + authority_seeds: Some(referral_state_seeds), + })?; solana_utils::close_token_account( ctx.accounts.token_program, ctx.accounts.signer_wsol_ta.unwrap(), ctx.accounts.signer, ctx.accounts.signer, - None, + None )?; solana_utils::init_ata_if_needed( @@ -75,7 +69,7 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.signer, ctx.accounts.signer_wsol_ta.unwrap(), - ctx.accounts.referral_fees_dest_mint, + ctx.accounts.referral_fees_dest_mint )?; } @@ -84,7 +78,7 @@ pub fn claim_referral_fees( ctx.accounts.referral_fees_dest_ta, ctx.accounts.referral_authority, ctx.accounts.referral_state, - Some(referral_state_seeds), + Some(referral_state_seeds) )?; solana_utils::init_ata_if_needed( @@ -93,7 +87,7 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.referral_state, ctx.accounts.referral_fees_dest_ta, - ctx.accounts.referral_fees_dest_mint, + ctx.accounts.referral_fees_dest_mint )?; } else { solana_utils::init_ata_if_needed( @@ -102,22 +96,20 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.referral_authority, ctx.accounts.fees_destination_ta.unwrap(), - ctx.accounts.referral_fees_dest_mint, + ctx.accounts.referral_fees_dest_mint )?; - let balance = - TokenAccount::unpack(&ctx.accounts.referral_fees_dest_ta.data.borrow())?.amount; + let balance = TokenAccount::unpack( + &ctx.accounts.referral_fees_dest_ta.data.borrow() + )?.amount; - solana_utils::spl_token_transfer( - ctx.accounts.token_program, - SplTokenTransferArgs { - source: ctx.accounts.referral_fees_dest_ta, - authority: ctx.accounts.referral_state, - recipient: ctx.accounts.fees_destination_ta.unwrap(), - amount: balance, - authority_seeds: Some(referral_state_seeds), - }, - )?; + solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { + source: ctx.accounts.referral_fees_dest_ta, + authority: ctx.accounts.referral_state, + recipient: ctx.accounts.fees_destination_ta.unwrap(), + amount: balance, + authority_seeds: Some(referral_state_seeds), + })?; } Ok(()) diff --git a/programs/solauto/src/rebalance/rebalancer.rs b/programs/solauto/src/rebalance/rebalancer.rs index da9e9f5e..4b7269af 100644 --- a/programs/solauto/src/rebalance/rebalancer.rs +++ b/programs/solauto/src/rebalance/rebalancer.rs @@ -1,10 +1,9 @@ use std::{ cmp::min, ops::{ Add, Mul } }; -use solana_program::{ entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey }; +use solana_program::{ entrypoint::ProgramResult, program_error::ProgramError }; use crate::{ check, - constants::SOLAUTO_FEES_WALLET, state::solauto_position::{ PositionTokenState, RebalanceData, @@ -28,9 +27,11 @@ use crate::{ SolautoSplTokenTransferArgs, }, }, - utils::{ - math_utils::{ calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit }, - validation_utils::correct_token_account, + utils::math_utils::{ + calc_fee_amount, + from_bps, + from_rounded_usd_value, + usd_value_to_base_unit, }, }; @@ -61,9 +62,7 @@ pub struct RebalancerData<'a> { pub rebalance_args: RebalanceSettings, pub solauto_position: SolautoPositionData<'a>, pub solauto_fees_bps: SolautoFeesBps, - pub solauto_fees_ta: Option, - pub referred_by_state: Option, - pub referred_by_ta: Option, + pub referred_by: bool, } pub struct RebalanceResult { @@ -350,24 +349,16 @@ impl<'a> Rebalancer<'a> { fn payout_fees(&mut self, available_balance: u64) -> Result { let rebalance_direction = &self.rebalance_data().values.rebalance_direction; - let (token_mint, position_ta) = if self.is_boost() { - (self.position_data().state.supply.mint, SolautoAccount::SolautoPositionSupplyTa) + let position_ta = if self.is_boost() { + SolautoAccount::SolautoPositionSupplyTa } else { - (self.position_data().state.debt.mint, SolautoAccount::SolautoPositionDebtTa) + SolautoAccount::SolautoPositionDebtTa }; let fee_payout = self.data.solauto_fees_bps.fetch_fees(rebalance_direction); if fee_payout.total == 0 { return Ok(available_balance); } - check!( - correct_token_account( - self.data.solauto_fees_ta.as_ref().unwrap(), - &SOLAUTO_FEES_WALLET, - &token_mint - ), - SolautoError::IncorrectAccounts - ); let solauto_fees = self.payout_fee( available_balance, fee_payout.solauto, @@ -375,18 +366,7 @@ impl<'a> Rebalancer<'a> { SolautoAccount::SolautoFeesTa )?; - let referrer_fees = if - self.data.referred_by_state.is_some() && - self.data.referred_by_state.unwrap() != Pubkey::default() - { - check!( - correct_token_account( - self.data.referred_by_ta.as_ref().unwrap(), - self.data.referred_by_state.as_ref().unwrap(), - &token_mint - ), - SolautoError::IncorrectAccounts - ); + let referrer_fees = if self.data.referred_by { self.payout_fee( available_balance, fee_payout.referrer, diff --git a/programs/solauto/src/rebalance/rebalancer_tests.rs b/programs/solauto/src/rebalance/rebalancer_tests.rs index e3446fbb..34ce628b 100644 --- a/programs/solauto/src/rebalance/rebalancer_tests.rs +++ b/programs/solauto/src/rebalance/rebalancer_tests.rs @@ -1,10 +1,8 @@ use std::ops::{ Div, Mul }; use solana_program::pubkey::Pubkey; -use spl_associated_token_account::get_associated_token_address; use crate::{ - constants::SOLAUTO_FEES_WALLET, state::solauto_position::{ PositionData, PositionState, @@ -129,29 +127,6 @@ fn create_rebalancer<'a>( data.pos.rebalance.ixs.active = PodBool::new(true); data.pos.rebalance.ixs.swap_type = rebalance_args.swap_type.unwrap_or(SwapType::default()); - let position_supply_ta = get_associated_token_address( - &data.pos.pubkey(), - &data.pos.state.supply.mint - ); - let position_debt_ta = get_associated_token_address( - &data.pos.pubkey(), - &data.pos.state.debt.mint - ); - let position_authority_supply_ta = get_associated_token_address( - &data.pos.authority, - &data.pos.state.supply.mint - ); - let position_authority_debt_ta = get_associated_token_address( - &data.pos.authority, - &data.pos.state.debt.mint - ); - - let fees_mint = if data.rebalance_direction == RebalanceDirection::Boost { - data.pos.state.supply.mint - } else { - data.pos.state.debt.mint - }; - let solauto_fees_ta = get_associated_token_address(&SOLAUTO_FEES_WALLET, &fees_mint); let solauto_fees = SolautoFeesBps::from_mock(SOLAUTO_FEE_BPS, false); let rebalancer = Rebalancer::new(RebalancerData { @@ -162,9 +137,7 @@ fn create_rebalancer<'a>( debt_ta: TokenAccountData::from(data.position_debt_ta_balance.unwrap_or(0)), }, solauto_fees_bps: solauto_fees, - referred_by_state: None, - referred_by_ta: None, - solauto_fees_ta: Some(solauto_fees_ta), + referred_by: false, }); rebalancer diff --git a/programs/solauto/src/state/referral_state.rs b/programs/solauto/src/state/referral_state.rs index 7aa2e445..0b4da833 100644 --- a/programs/solauto/src/state/referral_state.rs +++ b/programs/solauto/src/state/referral_state.rs @@ -49,6 +49,9 @@ impl ReferralState { seeds.push(&self.bump); seeds } + pub fn is_referred(&self) -> bool { + self.referred_by_state != Pubkey::default() + } } mod tests { diff --git a/programs/solauto/src/types/shared.rs b/programs/solauto/src/types/shared.rs index e6945dc1..45557d3b 100644 --- a/programs/solauto/src/types/shared.rs +++ b/programs/solauto/src/types/shared.rs @@ -1,4 +1,4 @@ -use borsh::{BorshDeserialize, BorshSerialize}; +use borsh::{ BorshDeserialize, BorshSerialize }; use bytemuck::AnyBitPattern; use bytemuck::Pod; use bytemuck::Zeroable; @@ -8,7 +8,7 @@ use solana_program::pubkey::Pubkey; use solana_program::{ account_info::AccountInfo, program_error::ProgramError, - program_pack::{IsInitialized, Pack}, + program_pack::{ IsInitialized, Pack }, }; use std::fmt; @@ -122,14 +122,6 @@ pub struct SplTokenTransferArgs<'a, 'b> { pub authority_seeds: Option<&'b Vec<&'b [u8]>>, } -#[derive(Clone)] -pub struct BareSplTokenTransferArgs { - pub from_wallet: Pubkey, - pub from_wallet_ta: Pubkey, - pub to_wallet_ta: Pubkey, - pub amount: u64, -} - #[repr(C)] #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, ShankType, Default, PartialEq, Copy)] pub struct PodBool { @@ -161,10 +153,13 @@ pub struct DeserializedAccount<'a, T> { impl<'a, T: AnyBitPattern> DeserializedAccount<'a, T> { pub fn zerocopy(account: Option<&'a AccountInfo<'a>>) -> Result, ProgramError> { match account { - Some(account_info) => Ok(Some(Self { - account_info, - data: Box::new(*bytemuck::from_bytes::(&account_info.data.borrow())), - })), + Some(account_info) => + Ok( + Some(Self { + account_info, + data: Box::new(*bytemuck::from_bytes::(&account_info.data.borrow())), + }) + ), None => Ok(None), } } @@ -178,10 +173,12 @@ impl<'a, T: Pack + IsInitialized> DeserializedAccount<'a, T> { msg!("Failed to deserialize account data"); SolautoError::FailedAccountDeserialization })?; - Ok(Some(Self { - account_info, - data: Box::new(deserialized_data), - })) + Ok( + Some(Self { + account_info, + data: Box::new(deserialized_data), + }) + ) } None => Ok(None), } diff --git a/programs/solauto/src/types/solauto.rs b/programs/solauto/src/types/solauto.rs index aa05bd52..f7f76979 100644 --- a/programs/solauto/src/types/solauto.rs +++ b/programs/solauto/src/types/solauto.rs @@ -1,4 +1,4 @@ -use super::shared::TokenBalanceAmount; +use super::shared::{ TokenBalanceAmount, TokenType }; #[derive(Clone, Copy, Eq, PartialEq, Hash)] pub enum SolautoAccount { @@ -9,7 +9,9 @@ pub enum SolautoAccount { AuthorityDebtTa, IntermediaryTa, SolautoFeesTa, - ReferredByTa + ReferredByTa, + SupplyMint, + DebtMint, } #[derive(Clone)] diff --git a/programs/solauto/src/types/solauto_manager.rs b/programs/solauto/src/types/solauto_manager.rs index e95858fc..067c4aca 100644 --- a/programs/solauto/src/types/solauto_manager.rs +++ b/programs/solauto/src/types/solauto_manager.rs @@ -22,11 +22,14 @@ use super::{ solauto::{ SolautoAccount, SolautoCpiAction }, }; use crate::{ + check, + constants::SOLAUTO_FEES_WALLET, rebalance::{ rebalancer::{ Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData }, solauto_fees::SolautoFeesBps, }, state::solauto_position::{ RebalanceData, SolautoPosition }, + types::errors::SolautoError, utils::*, }; @@ -164,11 +167,8 @@ impl<'a> SolautoManager<'a> { debt_ta: position_debt_ta, }, solauto_fees_bps: self.solauto_fees_bps.unwrap().clone(), - solauto_fees_ta: self.std_accounts.solauto_fees_ta.map_or(None, |acc| Some(*acc.key)), - referred_by_state: self.std_accounts.authority_referral_state - .as_ref() - .map_or(None, |acc| Some(acc.data.referred_by_state.clone())), - referred_by_ta: self.std_accounts.referred_by_ta.map_or(None, |acc| Some(*acc.key)), + referred_by: self.std_accounts.authority_referral_state.is_some() && + self.std_accounts.authority_referral_state.as_ref().unwrap().data.is_referred(), }) } @@ -267,11 +267,46 @@ impl<'a> SolautoManager<'a> { Ok(()) } + fn validate_fee_token_accounts(&self) -> ProgramResult { + let mints = vec![ + self.std_accounts.solauto_position.data.state.supply.mint, + self.std_accounts.solauto_position.data.state.debt.mint + ]; + + if self.std_accounts.solauto_fees_ta.is_some() { + check!( + validation_utils::valid_token_account_for_mints( + self.std_accounts.solauto_fees_ta.as_ref().unwrap().key, + &SOLAUTO_FEES_WALLET, + &mints + ), + SolautoError::IncorrectAccounts + ); + } + + if self.std_accounts.referred_by_ta.is_some() { + check!( + validation_utils::valid_token_account_for_mints( + self.std_accounts.referred_by_ta.as_ref().unwrap().key, + &self.std_accounts.authority_referral_state + .as_ref() + .unwrap().data.referred_by_state, + &mints + ), + SolautoError::IncorrectAccounts + ); + } + + Ok(()) + } + pub fn rebalance( &mut self, rebalance_args: RebalanceSettings, rebalance_step: RebalanceStep ) -> ProgramResult { + self.validate_fee_token_accounts()?; + let (actions, finished) = { let mut rebalancer = self.get_rebalancer(rebalance_args.clone()); let rebalance_result = rebalancer.rebalance(rebalance_step)?; diff --git a/programs/solauto/src/utils/solana_utils.rs b/programs/solauto/src/utils/solana_utils.rs index 3c4cc00c..96f08a90 100644 --- a/programs/solauto/src/utils/solana_utils.rs +++ b/programs/solauto/src/utils/solana_utils.rs @@ -2,7 +2,7 @@ use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult, instruction::Instruction, - program::{invoke, invoke_signed}, + program::{ invoke, invoke_signed }, pubkey::Pubkey, rent::Rent, system_instruction, @@ -13,7 +13,7 @@ use spl_token::instruction as spl_instruction; use crate::{ check, - types::{errors::SolautoError, shared::SplTokenTransferArgs}, + types::{ errors::SolautoError, shared::SplTokenTransferArgs }, utils::validation_utils::correct_token_account, }; @@ -24,7 +24,7 @@ pub fn account_has_data(account: &AccountInfo) -> bool { pub fn invoke_instruction( instruction: &Instruction, account_infos: &[AccountInfo], - seeds: Option<&Vec<&[u8]>>, + seeds: Option<&Vec<&[u8]>> ) -> ProgramResult { if let Some(seeds) = seeds { invoke_signed(instruction, account_infos, &[seeds.as_slice()]) @@ -39,14 +39,12 @@ pub fn init_account<'a>( account: &'a AccountInfo<'a>, new_owner: &Pubkey, account_seed: Option>, - space: usize, + space: usize ) -> ProgramResult { check!(!account_has_data(account), SolautoError::IncorrectAccounts); let rent = &Rent::from_account_info(rent_sysvar)?; - let required_lamports = rent - .minimum_balance(space) - .saturating_sub(account.lamports()); + let required_lamports = rent.minimum_balance(space).saturating_sub(account.lamports()); if required_lamports > 0 { system_transfer(payer, account, required_lamports, None)?; } @@ -56,13 +54,13 @@ pub fn init_account<'a>( invoke_instruction( &system_instruction::allocate(account.key, space.try_into().unwrap()), accounts, - account_seed.as_ref(), + account_seed.as_ref() )?; invoke_instruction( &system_instruction::assign(account.key, &new_owner), accounts, - account_seed.as_ref(), + account_seed.as_ref() )?; Ok(()) @@ -74,7 +72,7 @@ pub fn init_ata_if_needed<'a, 'b>( payer: &'a AccountInfo<'a>, wallet: &'a AccountInfo<'a>, token_account: &'a AccountInfo<'a>, - token_mint: &'a AccountInfo<'a>, + token_mint: &'a AccountInfo<'a> ) -> ProgramResult { check!( correct_token_account(token_account.key, wallet.key, token_mint.key), @@ -94,7 +92,7 @@ pub fn init_ata_if_needed<'a, 'b>( token_mint.clone(), system_program.clone(), token_program.clone(), - ], + ] ) } @@ -102,18 +100,18 @@ pub fn system_transfer<'a>( source: &'a AccountInfo<'a>, destination: &'a AccountInfo<'a>, lamports: u64, - source_seeds: Option<&Vec<&[u8]>>, + source_seeds: Option<&Vec<&[u8]>> ) -> ProgramResult { invoke_instruction( &system_instruction::transfer(source.key, destination.key, lamports), &[source.clone(), destination.clone()], - source_seeds, + source_seeds ) } pub fn spl_token_transfer<'a, 'b>( token_program: &'a AccountInfo<'a>, - args: SplTokenTransferArgs<'a, 'b>, + args: SplTokenTransferArgs<'a, 'b> ) -> ProgramResult { invoke_instruction( &spl_instruction::transfer( @@ -122,14 +120,10 @@ pub fn spl_token_transfer<'a, 'b>( args.recipient.key, args.authority.key, &[], - args.amount, + args.amount )?, - &[ - args.source.clone(), - args.recipient.clone(), - args.authority.clone(), - ], - args.authority_seeds, + &[args.source.clone(), args.recipient.clone(), args.authority.clone()], + args.authority_seeds ) } @@ -138,7 +132,7 @@ pub fn close_token_account<'a, 'b>( account: &'a AccountInfo<'a>, sol_destination: &'a AccountInfo<'a>, account_owner: &'a AccountInfo<'a>, - owner_seeds: Option<&Vec<&[u8]>>, + owner_seeds: Option<&Vec<&[u8]>> ) -> ProgramResult { invoke_instruction( &spl_instruction::close_account( @@ -146,14 +140,10 @@ pub fn close_token_account<'a, 'b>( account.key, sol_destination.key, account_owner.key, - &[], + &[] )?, - &[ - account.clone(), - sol_destination.clone(), - account_owner.clone(), - ], - owner_seeds, + &[account.clone(), sol_destination.clone(), account_owner.clone()], + owner_seeds ) } diff --git a/programs/solauto/src/utils/validation_utils.rs b/programs/solauto/src/utils/validation_utils.rs index 131d9cf3..572e24ce 100644 --- a/programs/solauto/src/utils/validation_utils.rs +++ b/programs/solauto/src/utils/validation_utils.rs @@ -1,6 +1,6 @@ use std::ops::Div; -use marginfi_sdk::generated::accounts::{Bank, MarginfiAccount}; +use marginfi_sdk::generated::accounts::{ Bank, MarginfiAccount }; use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult, @@ -8,32 +8,36 @@ use solana_program::{ program_error::ProgramError, pubkey::Pubkey, system_program::ID as system_program_id, - sysvar::{instructions::ID as ixs_sysvar_id, rent::ID as rent_program_id}, + sysvar::{ instructions::ID as ixs_sysvar_id, rent::ID as rent_program_id }, }; -use spl_associated_token_account::{get_associated_token_address, ID as ata_program_id}; +use spl_associated_token_account::{ get_associated_token_address, ID as ata_program_id }; use spl_token::ID as token_program_id; use crate::{ check, constants::{ - MARGINFI_PROD_PROGRAM, MARGINFI_STAGING_PROGRAM, MIN_BOOST_GAP_BPS, MIN_REPAY_GAP_BPS, + MARGINFI_PROD_PROGRAM, + MARGINFI_STAGING_PROGRAM, + MIN_BOOST_GAP_BPS, + MIN_REPAY_GAP_BPS, SOLAUTO_MANAGER, }, error_if, state::{ - automation::AutomationSettings, referral_state::ReferralState, + automation::AutomationSettings, + referral_state::ReferralState, solauto_position::SolautoPosition, }, types::{ errors::SolautoError, instruction::SolautoStandardAccounts, - shared::{DeserializedAccount, LendingPlatform, TokenType}, + shared::{ DeserializedAccount, LendingPlatform, TokenType }, }, utils::math_utils::from_rounded_usd_value, }; use super::{ - math_utils::{get_max_boost_to_bps, get_max_repay_from_bps, get_max_repay_to_bps}, + math_utils::{ get_max_boost_to_bps, get_max_repay_from_bps, get_max_repay_to_bps }, solauto_utils::safe_unpack_token_account, }; @@ -41,13 +45,13 @@ pub fn generic_instruction_validation( accounts: &Box, lending_platform: LendingPlatform, authority_signer_only_ix: bool, - solauto_managed_only_ix: bool, + solauto_managed_only_ix: bool ) -> ProgramResult { validate_instruction( accounts.signer, &accounts.solauto_position, authority_signer_only_ix, - solauto_managed_only_ix, + solauto_managed_only_ix )?; validate_lending_program_account(accounts.lending_protocol, lending_platform)?; validate_standard_programs( @@ -55,7 +59,7 @@ pub fn generic_instruction_validation( Some(accounts.token_program), accounts.ata_program, accounts.rent, - accounts.ixs_sysvar, + accounts.ixs_sysvar )?; if accounts.authority_referral_state.is_some() { @@ -63,11 +67,11 @@ pub fn generic_instruction_validation( &accounts.solauto_position.data.authority, accounts.authority_referral_state.as_ref().unwrap(), accounts.referred_by_ta, - true, + true )?; } - // The solauto_fees_ta is validated at payout before transfer + // The solauto_fees_ta is validated during rebalance in solauto_manager.rs because it requires up-to-date state Ok(()) } @@ -75,7 +79,7 @@ pub fn validate_instruction( signer: &AccountInfo, solauto_position: &DeserializedAccount, authority_signer_only_ix: bool, - solauto_managed_only_ix: bool, + solauto_managed_only_ix: bool ) -> ProgramResult { check!(&signer.is_signer, ProgramError::MissingRequiredSignature); @@ -83,9 +87,8 @@ pub fn validate_instruction( let authority_signed = || { let expected_solauto_position_address = Pubkey::create_program_address( solauto_position.data.seeds_with_bump().as_slice(), - &crate::ID, - ) - .expect("Ok"); + &crate::ID + ).expect("Ok"); let expected_address_matches = solauto_position.account_info.key == &expected_solauto_position_address; return signer.key == &position_authority && expected_address_matches; @@ -117,15 +120,15 @@ pub fn validate_instruction( pub fn validate_position_settings(solauto_position: &SolautoPosition) -> ProgramResult { let max_boost_to_bps = get_max_boost_to_bps( solauto_position.state.max_ltv_bps, - solauto_position.state.liq_threshold_bps, + solauto_position.state.liq_threshold_bps ); let max_repay_to_bps = get_max_repay_to_bps( solauto_position.state.max_ltv_bps, - solauto_position.state.liq_threshold_bps, + solauto_position.state.liq_threshold_bps ); let max_repay_from_bps = get_max_repay_from_bps( solauto_position.state.max_ltv_bps, - solauto_position.state.liq_threshold_bps, + solauto_position.state.liq_threshold_bps ); let data = &solauto_position.position; @@ -133,22 +136,10 @@ pub fn validate_position_settings(solauto_position: &SolautoPosition) -> Program data.settings.repay_to_bps >= data.settings.boost_to_bps, SolautoError::InvalidRepayToSetting ); - check!( - data.settings.boost_to_bps <= max_boost_to_bps, - SolautoError::InvalidBoostToSetting - ); - check!( - data.settings.repay_gap >= MIN_REPAY_GAP_BPS, - SolautoError::InvalidRepayGapSetting - ); - check!( - data.settings.boost_gap >= MIN_BOOST_GAP_BPS, - SolautoError::InvalidBoostGapSetting - ); - check!( - data.settings.repay_to_bps <= max_repay_to_bps, - SolautoError::InvalidRepayToSetting - ); + check!(data.settings.boost_to_bps <= max_boost_to_bps, SolautoError::InvalidBoostToSetting); + check!(data.settings.repay_gap >= MIN_REPAY_GAP_BPS, SolautoError::InvalidRepayGapSetting); + check!(data.settings.boost_gap >= MIN_BOOST_GAP_BPS, SolautoError::InvalidBoostGapSetting); + check!(data.settings.repay_to_bps <= max_repay_to_bps, SolautoError::InvalidRepayToSetting); check!( data.settings.repay_to_bps + data.settings.repay_gap <= max_repay_from_bps, SolautoError::InvalidRepayFromSetting @@ -158,7 +149,7 @@ pub fn validate_position_settings(solauto_position: &SolautoPosition) -> Program pub fn validate_automation_settings( automation: &AutomationSettings, - current_unix_timestamp: u64, + current_unix_timestamp: u64 ) -> ProgramResult { let invalid_params = |error_msg| { msg!(error_msg); @@ -173,8 +164,9 @@ pub fn validate_automation_settings( return invalid_params("Interval period must be between 10 minutes and 1 month"); } - if current_unix_timestamp < automation.unix_start_date - || current_unix_timestamp > automation.unix_start_date + automation.interval_seconds + if + current_unix_timestamp < automation.unix_start_date || + current_unix_timestamp > automation.unix_start_date + automation.interval_seconds { return invalid_params("Provided an invalid unix start date"); } @@ -188,7 +180,7 @@ pub fn validate_automation_settings( pub fn validate_lending_program_account( program: &AccountInfo, - lending_platform: LendingPlatform, + lending_platform: LendingPlatform ) -> ProgramResult { match lending_platform { LendingPlatform::Marginfi => { @@ -207,7 +199,7 @@ pub fn validate_standard_programs( token_program: Option<&AccountInfo>, ata_program: Option<&AccountInfo>, rent: Option<&AccountInfo>, - ixs_sysvar: Option<&AccountInfo>, + ixs_sysvar: Option<&AccountInfo> ) -> ProgramResult { check!( system_program.is_none() || system_program.unwrap().key == &system_program_id, @@ -236,34 +228,34 @@ pub fn validate_referral_accounts<'a>( referral_state_authority: &Pubkey, authority_referral_state: &DeserializedAccount<'a, ReferralState>, referred_by_ta: Option<&'a AccountInfo<'a>>, - validate_ta: bool, + validate_ta: bool ) -> ProgramResult { let referral_state_pda = Pubkey::create_program_address( authority_referral_state.data.seeds_with_bump().as_slice(), - &crate::ID, + &crate::ID )?; error_if!( - &authority_referral_state.data.authority != referral_state_authority - || &referral_state_pda != authority_referral_state.account_info.key, + &authority_referral_state.data.authority != referral_state_authority || + &referral_state_pda != authority_referral_state.account_info.key, SolautoError::IncorrectAccounts ); let authority_referred_by_state = &authority_referral_state.data.referred_by_state; error_if!( - validate_ta - && authority_referred_by_state != &Pubkey::default() - && referred_by_ta.is_none(), + validate_ta && + authority_referred_by_state != &Pubkey::default() && + referred_by_ta.is_none(), SolautoError::IncorrectAccounts ); - // The referred_by_ta is further validated at payout before transfer + // The referred_by_ta is validated during rebalance in solauto_manager.rs because it requires up-to-date state Ok(()) } pub fn validate_marginfi_bank<'a>( marginfi_bank: &'a AccountInfo<'a>, - mint: &Pubkey, + mint: &Pubkey ) -> ProgramResult { if mint == &Pubkey::default() { return Ok(()); @@ -280,14 +272,14 @@ pub fn validate_lending_program_accounts_with_position<'a>( solauto_position: &DeserializedAccount, lp_user_account: &'a AccountInfo<'a>, lp_supply_account: &'a AccountInfo<'a>, - lp_debt_account: &'a AccountInfo<'a>, + lp_debt_account: &'a AccountInfo<'a> ) -> ProgramResult { let supply_mint = &solauto_position.data.state.supply.mint; let debt_mint = &solauto_position.data.state.debt.mint; error_if!( - !solauto_position.data.self_managed.val - && lp_user_account.key != &solauto_position.data.position.lp_user_account, + !solauto_position.data.self_managed.val && + lp_user_account.key != &solauto_position.data.position.lp_user_account, SolautoError::IncorrectAccounts ); @@ -304,20 +296,10 @@ pub fn validate_lending_program_accounts_with_position<'a>( pub fn validate_token_accounts<'a, 'b>( solauto_position: &'b DeserializedAccount<'a, SolautoPosition>, source_supply_ta: Option<&'a AccountInfo<'a>>, - source_debt_ta: Option<&'a AccountInfo<'a>>, + source_debt_ta: Option<&'a AccountInfo<'a>> ) -> ProgramResult { - validate_token_account( - solauto_position, - source_supply_ta, - Some(TokenType::Supply), - None, - )?; - validate_token_account( - solauto_position, - source_debt_ta, - Some(TokenType::Debt), - None, - )?; + validate_token_account(solauto_position, source_supply_ta, Some(TokenType::Supply), None)?; + validate_token_account(solauto_position, source_debt_ta, Some(TokenType::Debt), None)?; Ok(()) } @@ -325,7 +307,7 @@ pub fn validate_token_account<'a>( solauto_position: &DeserializedAccount<'a, SolautoPosition>, source_ta: Option<&'a AccountInfo<'a>>, token_type: Option, - token_mint: Option<&Pubkey>, + token_mint: Option<&Pubkey> ) -> ProgramResult { if solauto_position.data.self_managed.val && token_mint.is_none() { return Ok(()); @@ -342,15 +324,19 @@ pub fn validate_token_account<'a>( mint_key }; - let associated_position_ta = - get_associated_token_address(&solauto_position.account_info.key, mint_key); - let associated_authority_ta = - get_associated_token_address(&solauto_position.data.authority, mint_key); + let associated_position_ta = get_associated_token_address( + &solauto_position.account_info.key, + mint_key + ); + let associated_authority_ta = get_associated_token_address( + &solauto_position.data.authority, + mint_key + ); error_if!( - source_ta.is_some() - && source_ta.unwrap().key != &associated_position_ta - && source_ta.unwrap().key != &associated_authority_ta, + source_ta.is_some() && + source_ta.unwrap().key != &associated_position_ta && + source_ta.unwrap().key != &associated_authority_ta, SolautoError::IncorrectAccounts ); @@ -360,7 +346,7 @@ pub fn validate_token_account<'a>( pub fn token_account_owned_by<'a>( token_account: &'a AccountInfo<'a>, expected_owner: &Pubkey, - token_mint: Option<&Pubkey>, + token_mint: Option<&Pubkey> ) -> Result { if token_mint.is_some() { return Ok( @@ -368,29 +354,28 @@ pub fn token_account_owned_by<'a>( ); } else { let token_account_data = safe_unpack_token_account(Some(token_account))?.unwrap(); - return Ok(token_account_data.account_info.owner == &token_program_id - && &token_account_data.data.owner == expected_owner); + return Ok( + token_account_data.account_info.owner == &token_program_id && + &token_account_data.data.owner == expected_owner + ); } } pub fn validate_referral_signer( referral_state: &DeserializedAccount, signer: &AccountInfo, - allow_solauto_manager: bool, + allow_solauto_manager: bool ) -> ProgramResult { let referral_state_pda = Pubkey::create_program_address( referral_state.data.seeds_with_bump().as_slice(), - &crate::ID, + &crate::ID )?; check!(&signer.is_signer, ProgramError::MissingRequiredSignature); - check!( - &referral_state_pda == referral_state.account_info.key, - SolautoError::IncorrectAccounts - ); + check!(&referral_state_pda == referral_state.account_info.key, SolautoError::IncorrectAccounts); error_if!( - signer.key != &referral_state.data.authority - && (!allow_solauto_manager || signer.key != &SOLAUTO_MANAGER), + signer.key != &referral_state.data.authority && + (!allow_solauto_manager || signer.key != &SOLAUTO_MANAGER), SolautoError::IncorrectAccounts ); @@ -399,22 +384,19 @@ pub fn validate_referral_signer( pub fn validate_no_active_balances<'a>( lp_user_account: &'a AccountInfo<'a>, - lending_platform: LendingPlatform, + lending_platform: LendingPlatform ) -> ProgramResult { if lending_platform == LendingPlatform::Marginfi { - let marginfi_account = - DeserializedAccount::::zerocopy(Some(lp_user_account))?.unwrap(); + let marginfi_account = DeserializedAccount:: + ::zerocopy(Some(lp_user_account))? + .unwrap(); check!( - marginfi_account - .data - .lending_account - .balances + marginfi_account.data.lending_account.balances .iter() .filter(|balance| balance.active == 1) .collect::>() - .len() - == 0, + .len() == 0, SolautoError::IncorrectAccounts ); @@ -429,20 +411,13 @@ pub fn validate_rebalance(solauto_position: &SolautoPosition) -> ProgramResult { let curr_supply_usd = solauto_position.state.supply.amount_used.usd_value(); let curr_debt_usd = solauto_position.state.debt.amount_used.usd_value(); - let target_supply_usd = - from_rounded_usd_value(solauto_position.rebalance.values.target_supply_usd); + let target_supply_usd = from_rounded_usd_value( + solauto_position.rebalance.values.target_supply_usd + ); let target_debt_usd = from_rounded_usd_value(solauto_position.rebalance.values.target_debt_usd); - msg!( - "Supply expected vs. actual: {}, {}", - target_supply_usd, - curr_supply_usd - ); - msg!( - "Debt expected vs. actual: {}, {}", - target_debt_usd, - curr_debt_usd - ); + msg!("Supply expected vs. actual: {}, {}", target_supply_usd, curr_supply_usd); + msg!("Debt expected vs. actual: {}, {}", target_debt_usd, curr_debt_usd); check!( value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.2), SolautoError::InvalidRebalanceMade @@ -459,6 +434,14 @@ pub fn correct_token_account(token_account: &Pubkey, wallet: &Pubkey, mint: &Pub token_account == &get_associated_token_address(wallet, mint) } +pub fn valid_token_account_for_mints( + token_account: &Pubkey, + wallet: &Pubkey, + mints: &Vec +) -> bool { + mints.iter().any(|mint| correct_token_account(token_account, wallet, mint)) +} + pub fn value_lte_with_threshold(value: f64, target_value: f64, threshold: f64) -> bool { if target_value == 0.0 { return value == 0.0; @@ -484,9 +467,11 @@ pub fn value_match_with_threshold(value: f64, target_value: f64, threshold: f64) mod tests { use crate::{ state::{ - automation::{AutomationSettings, AutomationSettingsInp}, + automation::{ AutomationSettings, AutomationSettingsInp }, solauto_position::{ - PositionData, PositionState, SolautoSettingsParameters, + PositionData, + PositionState, + SolautoSettingsParameters, SolautoSettingsParametersInp, }, }, @@ -509,7 +494,7 @@ mod tests { Pubkey::default(), PositionType::default(), position_data, - position_state, + position_state ); let result = validate_position_settings(&solauto_position); assert!(result.is_err()); @@ -529,14 +514,14 @@ mod tests { boost_gap: MIN_BOOST_GAP_BPS - 10, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { repay_gap: MIN_REPAY_GAP_BPS - 10, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -544,7 +529,7 @@ mod tests { repay_gap: 600, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -552,7 +537,7 @@ mod tests { boost_gap: 1000, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -560,7 +545,7 @@ mod tests { repay_to_bps: 4000, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -568,14 +553,14 @@ mod tests { repay_gap: 500, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { repay_to_bps: 9900, ..default_settings_args }), - default_liq_threshold_bps, + default_liq_threshold_bps ); } @@ -597,25 +582,25 @@ mod tests { test_automation_settings( current_timestamp, AutomationSettings::from(AutomationSettingsInp { - unix_start_date: current_timestamp - + default_automation_settings_args.interval_seconds - + 100, + unix_start_date: current_timestamp + + default_automation_settings_args.interval_seconds + + 100, ..default_automation_settings_args - }), + }) ); test_automation_settings( current_timestamp, AutomationSettings::from(AutomationSettingsInp { interval_seconds: 60, ..default_automation_settings_args.clone() - }), + }) ); test_automation_settings( current_timestamp, AutomationSettings::from(AutomationSettingsInp { interval_seconds: 60 * 60 * 24 * 60, ..default_automation_settings_args.clone() - }), + }) ); } } From b139e38b8f199a743f72867844cad3a287b18bdb Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 9 May 2025 03:37:25 -0400 Subject: [PATCH 25/83] formatting & fixes --- .../src/instructions/close_position.rs | 41 +-- .../solauto/src/instructions/rebalance.rs | 140 ++++++---- .../solauto/src/instructions/referral_fees.rs | 78 +++--- programs/solauto/src/processors/position.rs | 32 +-- programs/solauto/src/rebalance/rebalancer.rs | 221 ++++++++------- .../solauto/src/rebalance/rebalancer_tests.rs | 251 ++++++++++-------- programs/solauto/src/types/shared.rs | 25 +- programs/solauto/src/types/solauto.rs | 2 +- programs/solauto/src/types/solauto_manager.rs | 126 +++++---- programs/solauto/src/utils/solana_utils.rs | 48 ++-- .../solauto/src/utils/validation_utils.rs | 221 ++++++++------- solauto-sdk/package.json | 2 +- .../rebalance/rebalanceSwapManager.ts | 22 +- 13 files changed, 685 insertions(+), 524 deletions(-) diff --git a/programs/solauto/src/instructions/close_position.rs b/programs/solauto/src/instructions/close_position.rs index 610346dd..106db22b 100644 --- a/programs/solauto/src/instructions/close_position.rs +++ b/programs/solauto/src/instructions/close_position.rs @@ -1,34 +1,37 @@ -use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult }; +use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult}; use crate::{ constants::WSOL_MINT, state::solauto_position::SolautoPosition, types::{ - instruction::accounts::{ ClosePositionAccounts, Context }, - shared::{ DeserializedAccount, SplTokenTransferArgs }, + instruction::accounts::{ClosePositionAccounts, Context}, + shared::{DeserializedAccount, SplTokenTransferArgs}, }, - utils::{ solana_utils, solauto_utils }, + utils::{solana_utils, solauto_utils}, }; pub fn close_position_ta<'a>( ctx: &Context>, solauto_position: &DeserializedAccount<'a, SolautoPosition>, position_ta: &'a AccountInfo<'a>, - signer_ta: &'a AccountInfo<'a> + signer_ta: &'a AccountInfo<'a>, ) -> ProgramResult { let solauto_position_seeds = &solauto_position.data.seeds_with_bump(); - let position_ta_data = solauto_utils - ::safe_unpack_token_account(Some(position_ta))? - .unwrap().data; + let position_ta_data = solauto_utils::safe_unpack_token_account(Some(position_ta))? + .unwrap() + .data; if position_ta_data.amount > 0 && position_ta_data.mint != WSOL_MINT { - solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { - source: position_ta, - authority: solauto_position.account_info, - recipient: signer_ta, - amount: position_ta_data.amount, - authority_seeds: Some(solauto_position_seeds), - })?; + solana_utils::spl_token_transfer( + ctx.accounts.token_program, + SplTokenTransferArgs { + source: position_ta, + authority: solauto_position.account_info, + recipient: signer_ta, + amount: position_ta_data.amount, + authority_seeds: Some(solauto_position_seeds), + }, + )?; } solana_utils::close_token_account( @@ -36,25 +39,25 @@ pub fn close_position_ta<'a>( position_ta, ctx.accounts.signer, ctx.accounts.solauto_position, - Some(solauto_position_seeds) + Some(solauto_position_seeds), ) } pub fn close_position<'a>( ctx: &Context>, - solauto_position: &DeserializedAccount<'a, SolautoPosition> + solauto_position: &DeserializedAccount<'a, SolautoPosition>, ) -> ProgramResult { close_position_ta( ctx, solauto_position, ctx.accounts.position_supply_ta, - ctx.accounts.signer_supply_ta + ctx.accounts.signer_supply_ta, )?; close_position_ta( ctx, solauto_position, ctx.accounts.position_debt_ta, - ctx.accounts.signer_debt_ta + ctx.accounts.signer_debt_ta, )?; solana_utils::close_pda(ctx.accounts.solauto_position, ctx.accounts.signer) } diff --git a/programs/solauto/src/instructions/rebalance.rs b/programs/solauto/src/instructions/rebalance.rs index d097edf9..e78bc336 100644 --- a/programs/solauto/src/instructions/rebalance.rs +++ b/programs/solauto/src/instructions/rebalance.rs @@ -2,10 +2,7 @@ use std::ops::Sub; use marginfi_sdk::generated::accounts::Bank; use solana_program::{ - clock::Clock, - entrypoint::ProgramResult, - program_error::ProgramError, - pubkey::Pubkey, + clock::Clock, entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey, sysvar::Sysvar, }; @@ -17,13 +14,12 @@ use crate::{ types::{ errors::SolautoError, instruction::{ - accounts::{ Context, MarginfiRebalanceAccounts }, - RebalanceSettings, - SolautoStandardAccounts, + accounts::{Context, MarginfiRebalanceAccounts}, + RebalanceSettings, SolautoStandardAccounts, }, - lending_protocol::{ LendingProtocolClient, LendingProtocolTokenAccounts }, - shared::{ DeserializedAccount, RebalanceStep, SolautoRebalanceType, TokenType }, - solauto_manager::{ SolautoManager, SolautoManagerAccounts }, + lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, + shared::{DeserializedAccount, RebalanceStep, SolautoRebalanceType, TokenType}, + solauto_manager::{SolautoManager, SolautoManagerAccounts}, }, utils::ix_utils, }; @@ -34,48 +30,46 @@ pub fn marginfi_rebalance<'a>( ctx: Context<'a, MarginfiRebalanceAccounts<'a>>, mut std_accounts: Box>, rebalance_step: RebalanceStep, - args: RebalanceSettings + args: RebalanceSettings, ) -> ProgramResult { let supply_tas = LendingProtocolTokenAccounts::from( None, Some(ctx.accounts.position_supply_ta), ctx.accounts.authority_supply_ta, - ctx.accounts.vault_supply_ta + ctx.accounts.vault_supply_ta, )?; let debt_tas = LendingProtocolTokenAccounts::from( None, Some(ctx.accounts.position_debt_ta), ctx.accounts.authority_debt_ta, - ctx.accounts.vault_debt_ta + ctx.accounts.vault_debt_ta, )?; - let marginfi_client = Box::new( - MarginfiClient::from( - ctx.accounts.signer, - ctx.accounts.marginfi_program, - ctx.accounts.marginfi_group, - ctx.accounts.marginfi_account, - ctx.accounts.supply_bank, - ctx.accounts.supply_price_oracle, - supply_tas.clone(), - ctx.accounts.supply_vault_authority, - ctx.accounts.debt_bank, - ctx.accounts.debt_price_oracle, - debt_tas.clone(), - ctx.accounts.debt_vault_authority - )? - ); - let solauto_manager_accounts = SolautoManagerAccounts::from( - supply_tas, - debt_tas, - ctx.accounts.intermediary_ta, - None - )?; - - let rebalance_type = std_accounts.solauto_position.data.rebalance.ixs.rebalance_type; - if - rebalance_step == RebalanceStep::PreSwap || - rebalance_type == SolautoRebalanceType::FLSwapThenRebalance + let marginfi_client = Box::new(MarginfiClient::from( + ctx.accounts.signer, + ctx.accounts.marginfi_program, + ctx.accounts.marginfi_group, + ctx.accounts.marginfi_account, + ctx.accounts.supply_bank, + ctx.accounts.supply_price_oracle, + supply_tas.clone(), + ctx.accounts.supply_vault_authority, + ctx.accounts.debt_bank, + ctx.accounts.debt_price_oracle, + debt_tas.clone(), + ctx.accounts.debt_vault_authority, + )?); + let solauto_manager_accounts = + SolautoManagerAccounts::from(supply_tas, debt_tas, ctx.accounts.intermediary_ta, None)?; + + let rebalance_type = std_accounts + .solauto_position + .data + .rebalance + .ixs + .rebalance_type; + if rebalance_step == RebalanceStep::PreSwap + || rebalance_type == SolautoRebalanceType::FLSwapThenRebalance { if needs_refresh(&std_accounts.solauto_position, &args)? { refresh::marginfi_refresh_accounts( @@ -87,41 +81,57 @@ pub fn marginfi_rebalance<'a>( ctx.accounts.debt_bank, ctx.accounts.debt_price_oracle.unwrap(), &mut std_accounts.solauto_position, - args.price_type.unwrap().clone() + args.price_type.unwrap().clone(), )?; } else { let supply_price = MarginfiClient::load_price( &DeserializedAccount::::zerocopy(Some(ctx.accounts.supply_bank))?.unwrap(), ctx.accounts.supply_price_oracle.unwrap(), args.price_type.unwrap().clone(), - TokenType::Supply + TokenType::Supply, )?; let debt_price = MarginfiClient::load_price( &DeserializedAccount::::zerocopy(Some(ctx.accounts.debt_bank))?.unwrap(), ctx.accounts.debt_price_oracle.unwrap(), args.price_type.unwrap().clone(), - TokenType::Debt + TokenType::Debt, )?; update_token_prices(&mut std_accounts, supply_price, debt_price); } } - rebalance(marginfi_client, solauto_manager_accounts, std_accounts, rebalance_step, args) + rebalance( + marginfi_client, + solauto_manager_accounts, + std_accounts, + rebalance_step, + args, + ) } fn update_token_prices<'a>( std_accounts: &mut Box>, supply_price: f64, - debt_price: f64 + debt_price: f64, ) { - std_accounts.solauto_position.data.state.supply.update_market_price(supply_price); - std_accounts.solauto_position.data.state.debt.update_market_price(debt_price); + std_accounts + .solauto_position + .data + .state + .supply + .update_market_price(supply_price); + std_accounts + .solauto_position + .data + .state + .debt + .update_market_price(debt_price); std_accounts.solauto_position.data.refresh_state(); } fn needs_refresh( solauto_position: &DeserializedAccount, - args: &RebalanceSettings + args: &RebalanceSettings, ) -> Result { if solauto_position.data.self_managed.val { return Ok(true); @@ -142,28 +152,44 @@ fn rebalance<'a>( solauto_manager_accounts: SolautoManagerAccounts<'a>, std_accounts: Box>, rebalance_step: RebalanceStep, - args: RebalanceSettings + args: RebalanceSettings, ) -> ProgramResult { check!( - args.target_liq_utilization_rate_bps.is_none() || - std_accounts.signer.key == &std_accounts.solauto_position.data.authority, + args.target_liq_utilization_rate_bps.is_none() + || std_accounts.signer.key == &std_accounts.solauto_position.data.authority, SolautoError::NonAuthorityProvidedTargetLTV ); - check!(std_accounts.authority_referral_state.is_some(), SolautoError::IncorrectAccounts); - check!(args.flash_loan_fee_bps.unwrap_or(0) <= 150, SolautoError::IncorrectInstructions); + check!( + std_accounts.authority_referral_state.is_some(), + SolautoError::IncorrectAccounts + ); + check!( + args.flash_loan_fee_bps.unwrap_or(0) <= 150, + SolautoError::IncorrectInstructions + ); let fees_bps = SolautoFeesBps::from( - std_accounts.authority_referral_state.as_ref().unwrap().data.referred_by_state != - Pubkey::default(), + std_accounts + .authority_referral_state + .as_ref() + .unwrap() + .data + .referred_by_state + != Pubkey::default(), args.target_liq_utilization_rate_bps, - std_accounts.solauto_position.data.state.net_worth.usd_value() + std_accounts + .solauto_position + .data + .state + .net_worth + .usd_value(), ); let mut solauto_manager = SolautoManager::from( client, solauto_manager_accounts, std_accounts, - Some(fees_bps) + Some(fees_bps), )?; solauto_manager.rebalance(args, rebalance_step)?; diff --git a/programs/solauto/src/instructions/referral_fees.rs b/programs/solauto/src/instructions/referral_fees.rs index f80808ad..3f3beb44 100644 --- a/programs/solauto/src/instructions/referral_fees.rs +++ b/programs/solauto/src/instructions/referral_fees.rs @@ -1,36 +1,39 @@ -use solana_program::{ entrypoint::ProgramResult, program_pack::Pack, rent::Rent, sysvar::Sysvar }; +use solana_program::{entrypoint::ProgramResult, program_pack::Pack, rent::Rent, sysvar::Sysvar}; use spl_token::state::Account as TokenAccount; use crate::{ constants::WSOL_MINT, state::referral_state::ReferralState, types::{ - instruction::accounts::{ ClaimReferralFeesAccounts, Context, ConvertReferralFeesAccounts }, - shared::{ DeserializedAccount, SplTokenTransferArgs }, + instruction::accounts::{ClaimReferralFeesAccounts, Context, ConvertReferralFeesAccounts}, + shared::{DeserializedAccount, SplTokenTransferArgs}, }, utils::solana_utils, }; pub fn convert_referral_fees( ctx: Context, - referral_state: DeserializedAccount + referral_state: DeserializedAccount, ) -> ProgramResult { let balance = TokenAccount::unpack(&ctx.accounts.referral_fees_ta.data.borrow())?.amount; - solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { - source: ctx.accounts.referral_fees_ta, - authority: ctx.accounts.referral_state, - recipient: ctx.accounts.intermediary_ta, - amount: balance, - authority_seeds: Some(&referral_state.data.seeds_with_bump()), - })?; + solana_utils::spl_token_transfer( + ctx.accounts.token_program, + SplTokenTransferArgs { + source: ctx.accounts.referral_fees_ta, + authority: ctx.accounts.referral_state, + recipient: ctx.accounts.intermediary_ta, + amount: balance, + authority_seeds: Some(&referral_state.data.seeds_with_bump()), + }, + )?; Ok(()) } pub fn claim_referral_fees( ctx: Context, - referral_state: DeserializedAccount + referral_state: DeserializedAccount, ) -> ProgramResult { let referral_state_seeds = &referral_state.data.seeds_with_bump(); @@ -42,25 +45,28 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.signer, ctx.accounts.signer_wsol_ta.unwrap(), - ctx.accounts.referral_fees_dest_mint + ctx.accounts.referral_fees_dest_mint, )?; let rent = Rent::get()?; let account_rent = rent.minimum_balance(TokenAccount::LEN); - solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { - source: ctx.accounts.referral_fees_dest_ta, - authority: ctx.accounts.referral_state, - recipient: ctx.accounts.signer_wsol_ta.unwrap(), - amount: account_rent, - authority_seeds: Some(referral_state_seeds), - })?; + solana_utils::spl_token_transfer( + ctx.accounts.token_program, + SplTokenTransferArgs { + source: ctx.accounts.referral_fees_dest_ta, + authority: ctx.accounts.referral_state, + recipient: ctx.accounts.signer_wsol_ta.unwrap(), + amount: account_rent, + authority_seeds: Some(referral_state_seeds), + }, + )?; solana_utils::close_token_account( ctx.accounts.token_program, ctx.accounts.signer_wsol_ta.unwrap(), ctx.accounts.signer, ctx.accounts.signer, - None + None, )?; solana_utils::init_ata_if_needed( @@ -69,7 +75,7 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.signer, ctx.accounts.signer_wsol_ta.unwrap(), - ctx.accounts.referral_fees_dest_mint + ctx.accounts.referral_fees_dest_mint, )?; } @@ -78,7 +84,7 @@ pub fn claim_referral_fees( ctx.accounts.referral_fees_dest_ta, ctx.accounts.referral_authority, ctx.accounts.referral_state, - Some(referral_state_seeds) + Some(referral_state_seeds), )?; solana_utils::init_ata_if_needed( @@ -87,7 +93,7 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.referral_state, ctx.accounts.referral_fees_dest_ta, - ctx.accounts.referral_fees_dest_mint + ctx.accounts.referral_fees_dest_mint, )?; } else { solana_utils::init_ata_if_needed( @@ -96,20 +102,22 @@ pub fn claim_referral_fees( ctx.accounts.signer, ctx.accounts.referral_authority, ctx.accounts.fees_destination_ta.unwrap(), - ctx.accounts.referral_fees_dest_mint + ctx.accounts.referral_fees_dest_mint, )?; - let balance = TokenAccount::unpack( - &ctx.accounts.referral_fees_dest_ta.data.borrow() - )?.amount; + let balance = + TokenAccount::unpack(&ctx.accounts.referral_fees_dest_ta.data.borrow())?.amount; - solana_utils::spl_token_transfer(ctx.accounts.token_program, SplTokenTransferArgs { - source: ctx.accounts.referral_fees_dest_ta, - authority: ctx.accounts.referral_state, - recipient: ctx.accounts.fees_destination_ta.unwrap(), - amount: balance, - authority_seeds: Some(referral_state_seeds), - })?; + solana_utils::spl_token_transfer( + ctx.accounts.token_program, + SplTokenTransferArgs { + source: ctx.accounts.referral_fees_dest_ta, + authority: ctx.accounts.referral_state, + recipient: ctx.accounts.fees_destination_ta.unwrap(), + amount: balance, + authority_seeds: Some(referral_state_seeds), + }, + )?; } Ok(()) diff --git a/programs/solauto/src/processors/position.rs b/programs/solauto/src/processors/position.rs index c9d20fc9..d7fa466a 100644 --- a/programs/solauto/src/processors/position.rs +++ b/programs/solauto/src/processors/position.rs @@ -1,11 +1,11 @@ -use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult, msg }; +use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, msg}; use crate::{ - instructions::{ close_position, update_position }, + instructions::{close_position, update_position}, state::solauto_position::SolautoPosition, types::{ instruction::{ - accounts::{ ClosePositionAccounts, UpdatePositionAccounts }, + accounts::{ClosePositionAccounts, UpdatePositionAccounts}, UpdatePositionData, }, shared::DeserializedAccount, @@ -15,13 +15,13 @@ use crate::{ pub fn process_update_position_instruction<'a>( accounts: &'a [AccountInfo<'a>], - args: UpdatePositionData + args: UpdatePositionData, ) -> ProgramResult { msg!("Instruction: Update position"); let ctx = UpdatePositionAccounts::context(accounts)?; - let solauto_position = DeserializedAccount:: - ::zerocopy(Some(ctx.accounts.solauto_position))? - .unwrap(); + let solauto_position = + DeserializedAccount::::zerocopy(Some(ctx.accounts.solauto_position))? + .unwrap(); validation_utils::validate_instruction(ctx.accounts.signer, &solauto_position, true, true)?; validation_utils::validate_standard_programs( @@ -29,7 +29,7 @@ pub fn process_update_position_instruction<'a>( Some(ctx.accounts.token_program), None, None, - None + None, )?; if args.dca.is_some() { @@ -37,7 +37,7 @@ pub fn process_update_position_instruction<'a>( &solauto_position, ctx.accounts.position_dca_ta, Some(args.dca.as_ref().unwrap().token_type), - None + None, )?; } @@ -47,9 +47,9 @@ pub fn process_update_position_instruction<'a>( pub fn process_close_position_instruction<'a>(accounts: &'a [AccountInfo<'a>]) -> ProgramResult { msg!("Instruction: Close position"); let ctx = ClosePositionAccounts::context(accounts)?; - let solauto_position = DeserializedAccount:: - ::zerocopy(Some(ctx.accounts.solauto_position))? - .unwrap(); + let solauto_position = + DeserializedAccount::::zerocopy(Some(ctx.accounts.solauto_position))? + .unwrap(); validation_utils::validate_instruction(ctx.accounts.signer, &solauto_position, true, true)?; validation_utils::validate_standard_programs( @@ -57,25 +57,25 @@ pub fn process_close_position_instruction<'a>(accounts: &'a [AccountInfo<'a>]) - Some(ctx.accounts.token_program), Some(ctx.accounts.ata_program), None, - None + None, )?; validation_utils::validate_token_accounts( &solauto_position, Some(ctx.accounts.position_supply_ta), - Some(ctx.accounts.position_debt_ta) + Some(ctx.accounts.position_debt_ta), )?; validation_utils::validate_token_accounts( &solauto_position, Some(ctx.accounts.signer_supply_ta), - Some(ctx.accounts.signer_debt_ta) + Some(ctx.accounts.signer_debt_ta), )?; if !cfg!(feature = "local") { validation_utils::validate_no_active_balances( ctx.accounts.lp_user_account, - solauto_position.data.position.lending_platform + solauto_position.data.position.lending_platform, )?; } diff --git a/programs/solauto/src/rebalance/rebalancer.rs b/programs/solauto/src/rebalance/rebalancer.rs index 4b7269af..565390d5 100644 --- a/programs/solauto/src/rebalance/rebalancer.rs +++ b/programs/solauto/src/rebalance/rebalancer.rs @@ -1,43 +1,34 @@ -use std::{ cmp::min, ops::{ Add, Mul } }; +use std::{ + cmp::min, + ops::{Add, Mul}, +}; -use solana_program::{ entrypoint::ProgramResult, program_error::ProgramError }; +use solana_program::{entrypoint::ProgramResult, program_error::ProgramError}; use crate::{ check, state::solauto_position::{ - PositionTokenState, - RebalanceData, - SolautoPosition, - TokenBalanceChangeType, + PositionTokenState, RebalanceData, SolautoPosition, TokenBalanceChangeType, }, types::{ errors::SolautoError, instruction::RebalanceSettings, shared::{ - RebalanceDirection, - RebalanceStep, - SolautoRebalanceType, - SwapType, - TokenBalanceAmount, + RebalanceDirection, RebalanceStep, SolautoRebalanceType, SwapType, TokenBalanceAmount, }, solauto::{ - FromLendingPlatformAction, - SolautoAccount, - SolautoCpiAction, + FromLendingPlatformAction, SolautoAccount, SolautoCpiAction, SolautoSplTokenTransferArgs, }, }, utils::math_utils::{ - calc_fee_amount, - from_bps, - from_rounded_usd_value, - usd_value_to_base_unit, + calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit, }, }; use super::{ solauto_fees::SolautoFeesBps, - utils::{ eligible_for_rebalance, get_rebalance_values }, + utils::{eligible_for_rebalance, get_rebalance_values}, }; pub struct TokenAccountData { @@ -116,15 +107,18 @@ impl<'a> Rebalancer<'a> { } check!( - self.data.rebalance_args.target_liq_utilization_rate_bps.is_some() || - eligible_for_rebalance(self.position_data()), + self.data + .rebalance_args + .target_liq_utilization_rate_bps + .is_some() + || eligible_for_rebalance(self.position_data()), SolautoError::InvalidRebalanceCondition ); self.data.solauto_position.data.rebalance.values = get_rebalance_values( self.position_data(), &self.data.rebalance_args, - &self.data.solauto_fees_bps + &self.data.solauto_fees_bps, )?; Ok(()) @@ -134,12 +128,12 @@ impl<'a> Rebalancer<'a> { &self, rounded_usd_value: u64, token_usage: PositionTokenState, - max: Option + max: Option, ) -> u64 { let base_unit_amount = usd_value_to_base_unit( from_rounded_usd_value(rounded_usd_value), token_usage.decimals, - token_usage.market_price() + token_usage.market_price(), ); if max.is_some() { @@ -151,9 +145,15 @@ impl<'a> Rebalancer<'a> { fn get_dynamic_balance(&self) -> (u64, SolautoAccount) { let (ta, account) = if self.is_boost() { - (self.position_supply_ta(), SolautoAccount::SolautoPositionSupplyTa) + ( + self.position_supply_ta(), + SolautoAccount::SolautoPositionSupplyTa, + ) } else { - (self.position_debt_ta(), SolautoAccount::SolautoPositionDebtTa) + ( + self.position_debt_ta(), + SolautoAccount::SolautoPositionDebtTa, + ) }; let balance = ta.balance; @@ -165,36 +165,40 @@ impl<'a> Rebalancer<'a> { fn transfer_to_authority_if_needed(&mut self, base_unit_amount: u64) { if self.position_data().self_managed.val { let (solauto_position_ta, authority_ta) = if self.is_boost() { - (SolautoAccount::SolautoPositionSupplyTa, SolautoAccount::AuthoritySupplyTa) + ( + SolautoAccount::SolautoPositionSupplyTa, + SolautoAccount::AuthoritySupplyTa, + ) } else { - (SolautoAccount::SolautoPositionDebtTa, SolautoAccount::AuthorityDebtTa) + ( + SolautoAccount::SolautoPositionDebtTa, + SolautoAccount::AuthorityDebtTa, + ) }; - self.actions.push( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + self.actions.push(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: solauto_position_ta, to_wallet_ta: authority_ta, amount: base_unit_amount, - }) - ); + }, + )); } } fn pull_liquidity_from_lp(&mut self, base_unit_amount: u64, destination_ta: SolautoAccount) { if self.is_boost() { - self.actions.push( - SolautoCpiAction::Borrow(FromLendingPlatformAction { + self.actions + .push(SolautoCpiAction::Borrow(FromLendingPlatformAction { amount: base_unit_amount, to_wallet_ta: destination_ta, - }) - ); + })); } else { - self.actions.push( - SolautoCpiAction::Withdraw(FromLendingPlatformAction { + self.actions + .push(SolautoCpiAction::Withdraw(FromLendingPlatformAction { amount: TokenBalanceAmount::Some(base_unit_amount), to_wallet_ta: destination_ta, - }) - ); + })); } } @@ -202,24 +206,40 @@ impl<'a> Rebalancer<'a> { self.transfer_to_authority_if_needed(base_unit_amount); if self.is_boost() { - self.actions.push(SolautoCpiAction::Deposit(base_unit_amount)); + self.actions + .push(SolautoCpiAction::Deposit(base_unit_amount)); } else { - let token_balance_amount = if - self.data.rebalance_args.target_liq_utilization_rate_bps.is_some() && - self.data.rebalance_args.target_liq_utilization_rate_bps.unwrap() == 0 + let token_balance_amount = if self + .data + .rebalance_args + .target_liq_utilization_rate_bps + .is_some() + && self + .data + .rebalance_args + .target_liq_utilization_rate_bps + .unwrap() + == 0 { TokenBalanceAmount::All } else { - TokenBalanceAmount::Some( - min(self.position_data().state.debt.amount_used.base_unit, base_unit_amount) - ) + TokenBalanceAmount::Some(min( + self.position_data().state.debt.amount_used.base_unit, + base_unit_amount, + )) }; - self.actions.push(SolautoCpiAction::Repay(token_balance_amount)); + self.actions + .push(SolautoCpiAction::Repay(token_balance_amount)); } } fn get_additional_amount_before_swap(&mut self) -> u64 { - if !self.rebalance_data().values.token_balance_change.requires_one() { + if !self + .rebalance_data() + .values + .token_balance_change + .requires_one() + { return 0; } @@ -228,45 +248,41 @@ impl<'a> Rebalancer<'a> { let action = match token_balance_change.change_type { TokenBalanceChangeType::PreSwapDeposit => { - Some( - SolautoCpiAction::Deposit( - self.calc_additional_amount( - token_balance_change.amount_usd, - self.position_data().state.supply, - Some(self.data.solauto_position.supply_ta.balance) - ) - ) - ) + Some(SolautoCpiAction::Deposit(self.calc_additional_amount( + token_balance_change.amount_usd, + self.position_data().state.supply, + Some(self.data.solauto_position.supply_ta.balance), + ))) } TokenBalanceChangeType::PostSwapDeposit => { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.debt, - Some(self.data.solauto_position.debt_ta.balance) + Some(self.data.solauto_position.debt_ta.balance), ); - Some( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + Some(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { amount, from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: SolautoAccount::SolautoPositionDebtTa, to_wallet_ta: SolautoAccount::IntermediaryTa, - }) - ) + }, + )) } TokenBalanceChangeType::PostRebalanceWithdrawDebtToken => { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.supply, - Some(self.position_supply_ta().balance) + Some(self.position_supply_ta().balance), ); - Some( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + Some(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { amount, from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: SolautoAccount::SolautoPositionSupplyTa, to_wallet_ta: SolautoAccount::IntermediaryTa, - }) - ) + }, + )) } _ => None, }; @@ -279,7 +295,12 @@ impl<'a> Rebalancer<'a> { } fn get_additional_amount_after_swap(&mut self) -> u64 { - if !self.rebalance_data().values.token_balance_change.requires_one() { + if !self + .rebalance_data() + .values + .token_balance_change + .requires_one() + { return 0; } @@ -291,31 +312,31 @@ impl<'a> Rebalancer<'a> { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.supply, - None + None, ); - Some( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + Some(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { amount, from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: SolautoAccount::SolautoPositionSupplyTa, to_wallet_ta: SolautoAccount::AuthoritySupplyTa, // TODO: what if this is native mint - }) - ) + }, + )) } TokenBalanceChangeType::PostRebalanceWithdrawDebtToken => { amount = self.calc_additional_amount( token_balance_change.amount_usd, self.position_data().state.debt, - None + None, ); - Some( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + Some(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { amount, from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: SolautoAccount::SolautoPositionDebtTa, to_wallet_ta: SolautoAccount::AuthorityDebtTa, // TODO: what if this is native mint - }) - ) + }, + )) } _ => None, }; @@ -332,17 +353,17 @@ impl<'a> Rebalancer<'a> { available_balance: u64, fee_pct_bps: u16, position_ta: SolautoAccount, - destination_ta: SolautoAccount + destination_ta: SolautoAccount, ) -> Result { let fee_amount = calc_fee_amount(available_balance, fee_pct_bps); - self.actions.push( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + self.actions.push(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: position_ta, to_wallet_ta: destination_ta, amount: fee_amount, - }) - ); + }, + )); Ok(fee_amount) } @@ -363,7 +384,7 @@ impl<'a> Rebalancer<'a> { available_balance, fee_payout.solauto, position_ta, - SolautoAccount::SolautoFeesTa + SolautoAccount::SolautoFeesTa, )?; let referrer_fees = if self.data.referred_by { @@ -371,7 +392,7 @@ impl<'a> Rebalancer<'a> { available_balance, fee_payout.referrer, position_ta, - SolautoAccount::ReferredByTa + SolautoAccount::ReferredByTa, )? } else { 0 @@ -381,14 +402,12 @@ impl<'a> Rebalancer<'a> { } fn repay_flash_loan_if_necessary(&mut self) -> ProgramResult { - if - matches!( - self.rebalance_data().ixs.rebalance_type, - SolautoRebalanceType::DoubleRebalanceWithFL | - SolautoRebalanceType::FLRebalanceThenSwap | - SolautoRebalanceType::FLSwapThenRebalance - ) - { + if matches!( + self.rebalance_data().ixs.rebalance_type, + SolautoRebalanceType::DoubleRebalanceWithFL + | SolautoRebalanceType::FLRebalanceThenSwap + | SolautoRebalanceType::FLSwapThenRebalance + ) { let flash_loan_amount = self.rebalance_data().ixs.flash_loan_amount; let fl_repay_amount = if self.rebalance_data().ixs.swap_type == SwapType::ExactOut { @@ -397,7 +416,9 @@ impl<'a> Rebalancer<'a> { check!(flash_loan_amount != 0, SolautoError::IncorrectInstructions); let flash_loan_fee_bps = self.data.rebalance_args.flash_loan_fee_bps.unwrap_or(0); flash_loan_amount.add( - (flash_loan_amount as f64).mul(from_bps(flash_loan_fee_bps)).ceil() as u64 + (flash_loan_amount as f64) + .mul(from_bps(flash_loan_fee_bps)) + .ceil() as u64, ) }; @@ -439,14 +460,14 @@ impl<'a> Rebalancer<'a> { let balance_leftover = dynamic_balance - additional_amount_after_swap; if self.rebalance_data().ixs.swap_type == SwapType::ExactOut { - self.actions.push( - SolautoCpiAction::SplTokenTransfer(SolautoSplTokenTransferArgs { + self.actions.push(SolautoCpiAction::SplTokenTransfer( + SolautoSplTokenTransferArgs { from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: balance_ta, to_wallet_ta: SolautoAccount::IntermediaryTa, amount: balance_leftover, - }) - ); + }, + )); } else { self.finish_rebalance(balance_leftover)?; } @@ -456,7 +477,7 @@ impl<'a> Rebalancer<'a> { pub fn rebalance( &mut self, - rebalance_step: RebalanceStep + rebalance_step: RebalanceStep, ) -> Result { match rebalance_step { RebalanceStep::PreSwap => self.pre_swap_rebalance(), diff --git a/programs/solauto/src/rebalance/rebalancer_tests.rs b/programs/solauto/src/rebalance/rebalancer_tests.rs index 34ce628b..ed315258 100644 --- a/programs/solauto/src/rebalance/rebalancer_tests.rs +++ b/programs/solauto/src/rebalance/rebalancer_tests.rs @@ -1,36 +1,24 @@ -use std::ops::{ Div, Mul }; +use std::ops::{Div, Mul}; use solana_program::pubkey::Pubkey; use crate::{ state::solauto_position::{ - PositionData, - PositionState, - RebalanceData, - SolautoPosition, - SolautoSettingsParameters, + PositionData, PositionState, RebalanceData, SolautoPosition, SolautoSettingsParameters, SolautoSettingsParametersInp, }, types::{ instruction::RebalanceSettings, shared::{ - PodBool, - PositionType, - RebalanceDirection, - RefreshedTokenState, - SwapType, + PodBool, PositionType, RebalanceDirection, RefreshedTokenState, SwapType, TokenBalanceAmount, }, - solauto::{ PositionValues, SolautoAccount, SolautoCpiAction }, + solauto::{PositionValues, SolautoAccount, SolautoCpiAction}, }, utils::{ math_utils::{ - from_base_unit, - from_bps, - from_rounded_usd_value, - get_liq_utilization_rate_bps, - round_to_decimals, - to_base_unit, + from_base_unit, from_bps, from_rounded_usd_value, get_liq_utilization_rate_bps, + round_to_decimals, to_base_unit, }, solauto_utils::update_token_state, validation_utils, @@ -38,7 +26,7 @@ use crate::{ }; use super::{ - rebalancer::{ Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData }, + rebalancer::{Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData}, solauto_fees::SolautoFeesBps, }; @@ -65,7 +53,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { state.liq_utilization_rate_bps = get_liq_utilization_rate_bps( pos.values.supply_usd, pos.values.debt_usd, - from_bps(state.liq_threshold_bps) + from_bps(state.liq_threshold_bps), ); let supply_mint = Pubkey::new_unique(); @@ -82,7 +70,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { decimals: TEST_TOKEN_DECIMALS, market_price: SUPPLY_PRICE, borrow_fee_bps: None, - }) + }), ); update_token_state( &mut state.debt, @@ -93,7 +81,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { decimals: TEST_TOKEN_DECIMALS, market_price: DEBT_PRICE, borrow_fee_bps: Some(BORROW_FEE_BPS), - }) + }), ); let mut position_data = PositionData::default(); @@ -104,7 +92,7 @@ fn create_position<'a>(pos: &FakePosition<'a>) -> Box { Pubkey::new_unique(), PositionType::Leverage, position_data, - state + state, ); Box::new(position) @@ -120,7 +108,7 @@ pub struct FakeRebalance<'a> { fn create_rebalancer<'a>( data: FakeRebalance<'a>, rebalance_args: RebalanceSettings, - flash_loan_amount: Option + flash_loan_amount: Option, ) -> Rebalancer<'a> { data.pos.rebalance.ixs.rebalance_type = rebalance_args.rebalance_type; data.pos.rebalance.ixs.flash_loan_amount = flash_loan_amount.unwrap_or(0); @@ -147,7 +135,7 @@ fn credit_token_account<'a>( rebalancer: &mut Rebalancer<'a>, ta_creditor: &mut TaCreditor, ta_pk: SolautoAccount, - base_unit_amount: i64 + base_unit_amount: i64, ) { let credit_ta = |ta: &mut TokenAccountData| { println!("Crediting token account with {}", base_unit_amount); @@ -180,56 +168,90 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>, ta_creditor: &mut TaCredit match action { SolautoCpiAction::Deposit(amount) => { println!("Deposit {}", amount); - rebalancer.data.solauto_position.data.state.supply.update_usage(amount as i64); + rebalancer + .data + .solauto_position + .data + .state + .supply + .update_usage(amount as i64); credit_token_account( rebalancer, ta_creditor, SolautoAccount::SolautoPositionSupplyTa, - (amount as i64) * -1 + (amount as i64) * -1, ); } SolautoCpiAction::Withdraw(data) => { let base_unit_amount = if let TokenBalanceAmount::Some(amount) = data.amount { amount } else { - rebalancer.data.solauto_position.data.state.supply.amount_used.base_unit + rebalancer + .data + .solauto_position + .data + .state + .supply + .amount_used + .base_unit }; println!("Withdraw {}", base_unit_amount); - rebalancer.data.solauto_position.data.state.supply.update_usage( - (base_unit_amount as i64) * -1 - ); + rebalancer + .data + .solauto_position + .data + .state + .supply + .update_usage((base_unit_amount as i64) * -1); credit_token_account( rebalancer, ta_creditor, data.to_wallet_ta, - base_unit_amount as i64 + base_unit_amount as i64, ); } SolautoCpiAction::Borrow(data) => { println!("Borrow {}", data.amount); - rebalancer.data.solauto_position.data.state.debt.update_usage(data.amount as i64); + rebalancer + .data + .solauto_position + .data + .state + .debt + .update_usage(data.amount as i64); credit_token_account( rebalancer, ta_creditor, data.to_wallet_ta, - data.amount as i64 + data.amount as i64, ); } SolautoCpiAction::Repay(data) => { let base_unit_amount = if let TokenBalanceAmount::Some(amount) = data { amount } else { - rebalancer.data.solauto_position.data.state.debt.amount_used.base_unit + rebalancer + .data + .solauto_position + .data + .state + .debt + .amount_used + .base_unit }; println!("Repay {}", base_unit_amount); - rebalancer.data.solauto_position.data.state.debt.update_usage( - (base_unit_amount as i64) * -1 - ); + rebalancer + .data + .solauto_position + .data + .state + .debt + .update_usage((base_unit_amount as i64) * -1); credit_token_account( rebalancer, ta_creditor, SolautoAccount::SolautoPositionDebtTa, - (base_unit_amount as i64) * -1 + (base_unit_amount as i64) * -1, ); } SolautoCpiAction::SplTokenTransfer(args) => { @@ -238,13 +260,13 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>, ta_creditor: &mut TaCredit rebalancer, ta_creditor, args.from_wallet_ta, - (args.amount as i64) * -1 + (args.amount as i64) * -1, ); credit_token_account( rebalancer, ta_creditor, args.to_wallet_ta, - args.amount as i64 + args.amount as i64, ); } } @@ -257,7 +279,7 @@ fn perform_swap<'a>( rebalancer: &mut Rebalancer<'a>, ta_creditor: &mut TaCreditor, rebalance_direction: &RebalanceDirection, - to_solauto_position_ta: bool + to_solauto_position_ta: bool, ) -> u64 { let (input_price, output_price) = if rebalance_direction == &RebalanceDirection::Boost { (DEBT_PRICE, SUPPLY_PRICE) @@ -265,19 +287,16 @@ fn perform_swap<'a>( (SUPPLY_PRICE, DEBT_PRICE) }; - let swap_usd_value = from_base_unit::( - ta_creditor.intermediary_ta.balance, - TEST_TOKEN_DECIMALS - ).mul(input_price); + let swap_usd_value = + from_base_unit::(ta_creditor.intermediary_ta.balance, TEST_TOKEN_DECIMALS) + .mul(input_price); println!("Swapping ${}", swap_usd_value); ta_creditor.intermediary_ta.balance = 0; - let output_amount = to_base_unit::( - swap_usd_value.div(output_price), - TEST_TOKEN_DECIMALS - ); + let output_amount = + to_base_unit::(swap_usd_value.div(output_price), TEST_TOKEN_DECIMALS); if to_solauto_position_ta { if rebalance_direction == &RebalanceDirection::Boost { @@ -285,14 +304,14 @@ fn perform_swap<'a>( rebalancer, ta_creditor, SolautoAccount::SolautoPositionSupplyTa, - output_amount as i64 + output_amount as i64, ); } else { credit_token_account( rebalancer, ta_creditor, SolautoAccount::SolautoPositionDebtTa, - output_amount as i64 + output_amount as i64, ); } } @@ -304,12 +323,25 @@ fn validate_rebalance<'a>(rebalancer: &mut Rebalancer<'a>) { assert_eq!( round_to_decimals( from_rounded_usd_value( - rebalancer.data.solauto_position.data.rebalance.values.target_debt_usd + rebalancer + .data + .solauto_position + .data + .rebalance + .values + .target_debt_usd ), 4 ), round_to_decimals( - rebalancer.data.solauto_position.data.state.debt.amount_used.usd_value(), + rebalancer + .data + .solauto_position + .data + .state + .debt + .amount_used + .usd_value(), 4 ), "Incorrect debt usd. Expected (left) vs. actual (right)" @@ -317,12 +349,25 @@ fn validate_rebalance<'a>(rebalancer: &mut Rebalancer<'a>) { assert_eq!( round_to_decimals( from_rounded_usd_value( - rebalancer.data.solauto_position.data.rebalance.values.target_supply_usd + rebalancer + .data + .solauto_position + .data + .rebalance + .values + .target_supply_usd ), 4 ), round_to_decimals( - rebalancer.data.solauto_position.data.state.supply.amount_used.usd_value(), + rebalancer + .data + .solauto_position + .data + .state + .supply + .amount_used + .usd_value(), 4 ), "Incorrect supply usd. Expected (left) vs. actual (right)" @@ -348,14 +393,14 @@ impl TaCreditor { } mod tests { - use std::ops::{ Add, Div }; + use std::ops::{Add, Div}; use crate::{ types::{ - shared::{ RebalanceStep, SolautoRebalanceType, SwapType }, + shared::{RebalanceStep, SolautoRebalanceType, SwapType}, solauto::RebalanceFeesBps, }, - utils::math_utils::{ get_debt_adjustment, get_max_boost_to_bps, get_max_repay_to_bps }, + utils::math_utils::{get_debt_adjustment, get_max_boost_to_bps, get_max_repay_to_bps}, }; use super::*; @@ -381,7 +426,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }) + }), ); let debt_adjustment = get_debt_adjustment( LIQ_THRESHOLD_BPS, @@ -391,17 +436,15 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }) + }), ); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::Regular, target_liq_utilization_rate_bps: None, - swap_in_amount_base_unit: Some( - to_base_unit( - debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), - TEST_TOKEN_DECIMALS - ) - ), + swap_in_amount_base_unit: Some(to_base_unit( + debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), + TEST_TOKEN_DECIMALS, + )), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactIn), price_type: None, @@ -414,7 +457,7 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None + None, ); let ta_creditor = &mut TaCreditor::new(); @@ -452,7 +495,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }) + }), ); let debt_adjustment = get_debt_adjustment( LIQ_THRESHOLD_BPS, @@ -462,17 +505,15 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }) + }), ); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::Regular, target_liq_utilization_rate_bps: None, - swap_in_amount_base_unit: Some( - to_base_unit( - debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), - TEST_TOKEN_DECIMALS - ) - ), + swap_in_amount_base_unit: Some(to_base_unit( + debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), + TEST_TOKEN_DECIMALS, + )), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactIn), price_type: None, @@ -485,7 +526,7 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None + None, ); let ta_creditor = &mut TaCreditor::new(); @@ -530,7 +571,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }) + }), ); let debt_adjustment = get_debt_adjustment( @@ -541,11 +582,11 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: FLASH_LOAN_FEE_BPS, - }) + }), ); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(DEBT_PRICE), - TEST_TOKEN_DECIMALS + TEST_TOKEN_DECIMALS, ); let rebalance_args = RebalanceSettings { @@ -564,7 +605,7 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - Some(flash_borrow) + Some(flash_borrow), ); let ta_creditor = &mut TaCreditor::new(); @@ -572,7 +613,7 @@ mod tests { rebalancer, ta_creditor, SolautoAccount::IntermediaryTa, - flash_borrow as i64 + flash_borrow as i64, ); perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); @@ -605,7 +646,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }) + }), ); let debt_adjustment = get_debt_adjustment( @@ -616,11 +657,11 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: FLASH_LOAN_FEE_BPS, - }) + }), ); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), - TEST_TOKEN_DECIMALS + TEST_TOKEN_DECIMALS, ); let rebalance_args = RebalanceSettings { @@ -639,7 +680,7 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - Some(flash_borrow) + Some(flash_borrow), ); let ta_creditor = &mut TaCreditor::new(); @@ -647,7 +688,7 @@ mod tests { rebalancer, ta_creditor, SolautoAccount::IntermediaryTa, - flash_borrow as i64 + flash_borrow as i64, ); perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); @@ -682,7 +723,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }) + }), ); let debt_adjustment = get_debt_adjustment( @@ -693,19 +734,17 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }) + }), ); println!("{}", debt_adjustment.debt_adjustment_usd.abs()); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::FLRebalanceThenSwap, target_liq_utilization_rate_bps: None, - swap_in_amount_base_unit: Some( - to_base_unit( - debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), - TEST_TOKEN_DECIMALS - ) - ), + swap_in_amount_base_unit: Some(to_base_unit( + debt_adjustment.debt_adjustment_usd.abs().div(SUPPLY_PRICE), + TEST_TOKEN_DECIMALS, + )), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactOut), price_type: None, @@ -718,19 +757,19 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None + None, ); let ta_creditor = &mut TaCreditor::new(); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(DEBT_PRICE), - TEST_TOKEN_DECIMALS + TEST_TOKEN_DECIMALS, ); credit_token_account( rebalancer, ta_creditor, SolautoAccount::SolautoPositionDebtTa, - flash_borrow + flash_borrow, ); let res = rebalancer.rebalance(RebalanceStep::PreSwap); @@ -769,7 +808,7 @@ mod tests { settings, max_ltv_bps: Some(MAX_LTV_BPS), liq_threshold_bps: Some(LIQ_THRESHOLD_BPS), - }) + }), ); let debt_adjustment = get_debt_adjustment( LIQ_THRESHOLD_BPS, @@ -779,17 +818,15 @@ mod tests { solauto: SOLAUTO_FEE_BPS, lp_borrow: BORROW_FEE_BPS, flash_loan: 0, - }) + }), ); let rebalance_args = RebalanceSettings { rebalance_type: SolautoRebalanceType::Regular, target_liq_utilization_rate_bps: Some(rebalance_to), - swap_in_amount_base_unit: Some( - to_base_unit( - debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), - TEST_TOKEN_DECIMALS - ) - ), + swap_in_amount_base_unit: Some(to_base_unit( + debt_adjustment.debt_adjustment_usd.div(DEBT_PRICE), + TEST_TOKEN_DECIMALS, + )), flash_loan_fee_bps: None, swap_type: Some(SwapType::ExactIn), price_type: None, @@ -802,7 +839,7 @@ mod tests { rebalance_direction: rebalance_direction.clone(), }, rebalance_args, - None + None, ); let ta_creditor = &mut TaCreditor::new(); diff --git a/programs/solauto/src/types/shared.rs b/programs/solauto/src/types/shared.rs index 45557d3b..1212defd 100644 --- a/programs/solauto/src/types/shared.rs +++ b/programs/solauto/src/types/shared.rs @@ -1,4 +1,4 @@ -use borsh::{ BorshDeserialize, BorshSerialize }; +use borsh::{BorshDeserialize, BorshSerialize}; use bytemuck::AnyBitPattern; use bytemuck::Pod; use bytemuck::Zeroable; @@ -8,7 +8,7 @@ use solana_program::pubkey::Pubkey; use solana_program::{ account_info::AccountInfo, program_error::ProgramError, - program_pack::{ IsInitialized, Pack }, + program_pack::{IsInitialized, Pack}, }; use std::fmt; @@ -153,13 +153,10 @@ pub struct DeserializedAccount<'a, T> { impl<'a, T: AnyBitPattern> DeserializedAccount<'a, T> { pub fn zerocopy(account: Option<&'a AccountInfo<'a>>) -> Result, ProgramError> { match account { - Some(account_info) => - Ok( - Some(Self { - account_info, - data: Box::new(*bytemuck::from_bytes::(&account_info.data.borrow())), - }) - ), + Some(account_info) => Ok(Some(Self { + account_info, + data: Box::new(*bytemuck::from_bytes::(&account_info.data.borrow())), + })), None => Ok(None), } } @@ -173,12 +170,10 @@ impl<'a, T: Pack + IsInitialized> DeserializedAccount<'a, T> { msg!("Failed to deserialize account data"); SolautoError::FailedAccountDeserialization })?; - Ok( - Some(Self { - account_info, - data: Box::new(deserialized_data), - }) - ) + Ok(Some(Self { + account_info, + data: Box::new(deserialized_data), + })) } None => Ok(None), } diff --git a/programs/solauto/src/types/solauto.rs b/programs/solauto/src/types/solauto.rs index f7f76979..f7aa5398 100644 --- a/programs/solauto/src/types/solauto.rs +++ b/programs/solauto/src/types/solauto.rs @@ -1,4 +1,4 @@ -use super::shared::{ TokenBalanceAmount, TokenType }; +use super::shared::{TokenBalanceAmount, TokenType}; #[derive(Clone, Copy, Eq, PartialEq, Hash)] pub enum SolautoAccount { diff --git a/programs/solauto/src/types/solauto_manager.rs b/programs/solauto/src/types/solauto_manager.rs index 067c4aca..19d7e9fb 100644 --- a/programs/solauto/src/types/solauto_manager.rs +++ b/programs/solauto/src/types/solauto_manager.rs @@ -2,33 +2,26 @@ use std::collections::HashMap; use math_utils::to_bps; use solana_program::{ - account_info::AccountInfo, - clock::Clock, - entrypoint::ProgramResult, - msg, + account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, program_error::ProgramError, }; use super::{ - instruction::{ RebalanceSettings, SolautoAction, SolautoStandardAccounts }, - lending_protocol::{ LendingProtocolClient, LendingProtocolTokenAccounts }, + instruction::{RebalanceSettings, SolautoAction, SolautoStandardAccounts}, + lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, shared::{ - RebalanceStep, - RefreshStateProps, - SplTokenTransferArgs, - TokenBalanceAmount, - TokenType, + RebalanceStep, RefreshStateProps, SplTokenTransferArgs, TokenBalanceAmount, TokenType, }, - solauto::{ SolautoAccount, SolautoCpiAction }, + solauto::{SolautoAccount, SolautoCpiAction}, }; use crate::{ check, constants::SOLAUTO_FEES_WALLET, rebalance::{ - rebalancer::{ Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData }, + rebalancer::{Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData}, solauto_fees::SolautoFeesBps, }, - state::solauto_position::{ RebalanceData, SolautoPosition }, + state::solauto_position::{RebalanceData, SolautoPosition}, types::errors::SolautoError, utils::*, }; @@ -44,7 +37,7 @@ impl<'a> SolautoManagerAccounts<'a> { supply: LendingProtocolTokenAccounts<'a>, debt: LendingProtocolTokenAccounts<'a>, intermediary_ta: Option<&'a AccountInfo<'a>>, - solauto_fees: Option + solauto_fees: Option, ) -> Result { Ok(Self { supply, @@ -67,7 +60,7 @@ impl<'a> SolautoManager<'a> { client: Box + 'a>, accounts: SolautoManagerAccounts<'a>, std_accounts: Box>, - solauto_fees_bps: Option + solauto_fees_bps: Option, ) -> Result { client.validate(&std_accounts)?; Ok(Self { @@ -92,14 +85,15 @@ impl<'a> SolautoManager<'a> { fn borrow(&mut self, base_unit_amount: u64, destination: &'a AccountInfo<'a>) -> ProgramResult { msg!("Borrowing {}", base_unit_amount); self.update_usage(base_unit_amount as i64, TokenType::Debt); - self.client.borrow(base_unit_amount, destination, &self.std_accounts)?; + self.client + .borrow(base_unit_amount, destination, &self.std_accounts)?; Ok(()) } fn withdraw( &mut self, amount: TokenBalanceAmount, - destination: &'a AccountInfo<'a> + destination: &'a AccountInfo<'a>, ) -> ProgramResult { let base_unit_amount = match amount { TokenBalanceAmount::All => self.position_data().state.supply.amount_used.base_unit, @@ -108,7 +102,8 @@ impl<'a> SolautoManager<'a> { msg!("Withdrawing {}", base_unit_amount); self.update_usage((base_unit_amount as i64) * -1, TokenType::Supply); - self.client.withdraw(amount, destination, &self.std_accounts)?; + self.client + .withdraw(amount, destination, &self.std_accounts)?; Ok(()) } @@ -127,13 +122,20 @@ impl<'a> SolautoManager<'a> { fn update_usage(&mut self, base_unit_amount: i64, token_type: TokenType) { let position_data = self.position_data(); if !position_data.self_managed.val || position_data.rebalance.active() { - self.std_accounts.solauto_position.data.update_usage(token_type, base_unit_amount); + self.std_accounts + .solauto_position + .data + .update_usage(token_type, base_unit_amount); } } fn get_token_account_data(&self, account: Option<&'a AccountInfo<'a>>) -> TokenAccountData { TokenAccountData::from( - solauto_utils::safe_unpack_token_account(account).unwrap().unwrap().data.amount + solauto_utils::safe_unpack_token_account(account) + .unwrap() + .unwrap() + .data + .amount, ) } @@ -142,15 +144,36 @@ impl<'a> SolautoManager<'a> { map.insert( SolautoAccount::SolautoPosition, - Some(self.std_accounts.solauto_position.account_info) + Some(self.std_accounts.solauto_position.account_info), + ); + map.insert( + SolautoAccount::SolautoPositionSupplyTa, + self.accounts.supply.position_ta, + ); + map.insert( + SolautoAccount::SolautoPositionDebtTa, + self.accounts.debt.position_ta, + ); + map.insert( + SolautoAccount::AuthoritySupplyTa, + self.accounts.supply.authority_ta, + ); + map.insert( + SolautoAccount::AuthorityDebtTa, + self.accounts.debt.authority_ta, + ); + map.insert( + SolautoAccount::IntermediaryTa, + self.accounts.intermediary_ta, + ); + map.insert( + SolautoAccount::SolautoFeesTa, + self.std_accounts.solauto_fees_ta, + ); + map.insert( + SolautoAccount::ReferredByTa, + self.std_accounts.referred_by_ta, ); - map.insert(SolautoAccount::SolautoPositionSupplyTa, self.accounts.supply.position_ta); - map.insert(SolautoAccount::SolautoPositionDebtTa, self.accounts.debt.position_ta); - map.insert(SolautoAccount::AuthoritySupplyTa, self.accounts.supply.authority_ta); - map.insert(SolautoAccount::AuthorityDebtTa, self.accounts.debt.authority_ta); - map.insert(SolautoAccount::IntermediaryTa, self.accounts.intermediary_ta); - map.insert(SolautoAccount::SolautoFeesTa, self.std_accounts.solauto_fees_ta); - map.insert(SolautoAccount::ReferredByTa, self.std_accounts.referred_by_ta); map.get(acc).unwrap().unwrap() } @@ -167,21 +190,27 @@ impl<'a> SolautoManager<'a> { debt_ta: position_debt_ta, }, solauto_fees_bps: self.solauto_fees_bps.unwrap().clone(), - referred_by: self.std_accounts.authority_referral_state.is_some() && - self.std_accounts.authority_referral_state.as_ref().unwrap().data.is_referred(), + referred_by: self.std_accounts.authority_referral_state.is_some() + && self + .std_accounts + .authority_referral_state + .as_ref() + .unwrap() + .data + .is_referred(), }) } fn execute_cpi_actions(&mut self, actions: Vec) -> ProgramResult { - let owned_seeds: Vec> = self.std_accounts.solauto_position.data + let owned_seeds: Vec> = self + .std_accounts + .solauto_position + .data .seeds_with_bump() .iter() .map(|s| s.to_vec()) .collect(); - let seeds_vec: Vec<&[u8]> = owned_seeds - .iter() - .map(|v| v.as_slice()) - .collect(); + let seeds_vec: Vec<&[u8]> = owned_seeds.iter().map(|v| v.as_slice()).collect(); for action in actions { match action { @@ -207,7 +236,7 @@ impl<'a> SolautoManager<'a> { authority: self.to_account_info(&data.from_wallet), recipient: self.to_account_info(&data.to_wallet_ta), authority_seeds, - } + }, )?; } } @@ -218,7 +247,7 @@ impl<'a> SolautoManager<'a> { pub fn refresh_position( solauto_position: &mut SolautoPosition, updated_data: RefreshStateProps, - clock: Clock + clock: Clock, ) -> ProgramResult { // Update mint addresses if self-managed if solauto_position.self_managed.val { @@ -236,11 +265,11 @@ impl<'a> SolautoManager<'a> { solauto_position.state.supply.amount_used.usd_value(), solauto_position.state.debt.amount_used.usd_value(), solauto_position.state.supply.market_price(), - solauto_position.state.supply.decimals + solauto_position.state.supply.decimals, ); solauto_position.state.net_worth.update_usd_value( updated_data.supply.market_price, - solauto_position.state.supply.decimals + solauto_position.state.supply.decimals, ); solauto_position.refresh_state(); @@ -255,7 +284,10 @@ impl<'a> SolautoManager<'a> { self.deposit(base_unit_amount)?; } SolautoAction::Borrow(base_unit_amount) => { - self.borrow(base_unit_amount, self.accounts.debt.position_ta.as_ref().unwrap())?; + self.borrow( + base_unit_amount, + self.accounts.debt.position_ta.as_ref().unwrap(), + )?; } SolautoAction::Repay(amount) => { self.repay(amount)?; @@ -270,7 +302,7 @@ impl<'a> SolautoManager<'a> { fn validate_fee_token_accounts(&self) -> ProgramResult { let mints = vec![ self.std_accounts.solauto_position.data.state.supply.mint, - self.std_accounts.solauto_position.data.state.debt.mint + self.std_accounts.solauto_position.data.state.debt.mint, ]; if self.std_accounts.solauto_fees_ta.is_some() { @@ -288,9 +320,13 @@ impl<'a> SolautoManager<'a> { check!( validation_utils::valid_token_account_for_mints( self.std_accounts.referred_by_ta.as_ref().unwrap().key, - &self.std_accounts.authority_referral_state + &self + .std_accounts + .authority_referral_state .as_ref() - .unwrap().data.referred_by_state, + .unwrap() + .data + .referred_by_state, &mints ), SolautoError::IncorrectAccounts @@ -303,7 +339,7 @@ impl<'a> SolautoManager<'a> { pub fn rebalance( &mut self, rebalance_args: RebalanceSettings, - rebalance_step: RebalanceStep + rebalance_step: RebalanceStep, ) -> ProgramResult { self.validate_fee_token_accounts()?; diff --git a/programs/solauto/src/utils/solana_utils.rs b/programs/solauto/src/utils/solana_utils.rs index 96f08a90..3c4cc00c 100644 --- a/programs/solauto/src/utils/solana_utils.rs +++ b/programs/solauto/src/utils/solana_utils.rs @@ -2,7 +2,7 @@ use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult, instruction::Instruction, - program::{ invoke, invoke_signed }, + program::{invoke, invoke_signed}, pubkey::Pubkey, rent::Rent, system_instruction, @@ -13,7 +13,7 @@ use spl_token::instruction as spl_instruction; use crate::{ check, - types::{ errors::SolautoError, shared::SplTokenTransferArgs }, + types::{errors::SolautoError, shared::SplTokenTransferArgs}, utils::validation_utils::correct_token_account, }; @@ -24,7 +24,7 @@ pub fn account_has_data(account: &AccountInfo) -> bool { pub fn invoke_instruction( instruction: &Instruction, account_infos: &[AccountInfo], - seeds: Option<&Vec<&[u8]>> + seeds: Option<&Vec<&[u8]>>, ) -> ProgramResult { if let Some(seeds) = seeds { invoke_signed(instruction, account_infos, &[seeds.as_slice()]) @@ -39,12 +39,14 @@ pub fn init_account<'a>( account: &'a AccountInfo<'a>, new_owner: &Pubkey, account_seed: Option>, - space: usize + space: usize, ) -> ProgramResult { check!(!account_has_data(account), SolautoError::IncorrectAccounts); let rent = &Rent::from_account_info(rent_sysvar)?; - let required_lamports = rent.minimum_balance(space).saturating_sub(account.lamports()); + let required_lamports = rent + .minimum_balance(space) + .saturating_sub(account.lamports()); if required_lamports > 0 { system_transfer(payer, account, required_lamports, None)?; } @@ -54,13 +56,13 @@ pub fn init_account<'a>( invoke_instruction( &system_instruction::allocate(account.key, space.try_into().unwrap()), accounts, - account_seed.as_ref() + account_seed.as_ref(), )?; invoke_instruction( &system_instruction::assign(account.key, &new_owner), accounts, - account_seed.as_ref() + account_seed.as_ref(), )?; Ok(()) @@ -72,7 +74,7 @@ pub fn init_ata_if_needed<'a, 'b>( payer: &'a AccountInfo<'a>, wallet: &'a AccountInfo<'a>, token_account: &'a AccountInfo<'a>, - token_mint: &'a AccountInfo<'a> + token_mint: &'a AccountInfo<'a>, ) -> ProgramResult { check!( correct_token_account(token_account.key, wallet.key, token_mint.key), @@ -92,7 +94,7 @@ pub fn init_ata_if_needed<'a, 'b>( token_mint.clone(), system_program.clone(), token_program.clone(), - ] + ], ) } @@ -100,18 +102,18 @@ pub fn system_transfer<'a>( source: &'a AccountInfo<'a>, destination: &'a AccountInfo<'a>, lamports: u64, - source_seeds: Option<&Vec<&[u8]>> + source_seeds: Option<&Vec<&[u8]>>, ) -> ProgramResult { invoke_instruction( &system_instruction::transfer(source.key, destination.key, lamports), &[source.clone(), destination.clone()], - source_seeds + source_seeds, ) } pub fn spl_token_transfer<'a, 'b>( token_program: &'a AccountInfo<'a>, - args: SplTokenTransferArgs<'a, 'b> + args: SplTokenTransferArgs<'a, 'b>, ) -> ProgramResult { invoke_instruction( &spl_instruction::transfer( @@ -120,10 +122,14 @@ pub fn spl_token_transfer<'a, 'b>( args.recipient.key, args.authority.key, &[], - args.amount + args.amount, )?, - &[args.source.clone(), args.recipient.clone(), args.authority.clone()], - args.authority_seeds + &[ + args.source.clone(), + args.recipient.clone(), + args.authority.clone(), + ], + args.authority_seeds, ) } @@ -132,7 +138,7 @@ pub fn close_token_account<'a, 'b>( account: &'a AccountInfo<'a>, sol_destination: &'a AccountInfo<'a>, account_owner: &'a AccountInfo<'a>, - owner_seeds: Option<&Vec<&[u8]>> + owner_seeds: Option<&Vec<&[u8]>>, ) -> ProgramResult { invoke_instruction( &spl_instruction::close_account( @@ -140,10 +146,14 @@ pub fn close_token_account<'a, 'b>( account.key, sol_destination.key, account_owner.key, - &[] + &[], )?, - &[account.clone(), sol_destination.clone(), account_owner.clone()], - owner_seeds + &[ + account.clone(), + sol_destination.clone(), + account_owner.clone(), + ], + owner_seeds, ) } diff --git a/programs/solauto/src/utils/validation_utils.rs b/programs/solauto/src/utils/validation_utils.rs index 572e24ce..fd101cca 100644 --- a/programs/solauto/src/utils/validation_utils.rs +++ b/programs/solauto/src/utils/validation_utils.rs @@ -1,6 +1,6 @@ use std::ops::Div; -use marginfi_sdk::generated::accounts::{ Bank, MarginfiAccount }; +use marginfi_sdk::generated::accounts::{Bank, MarginfiAccount}; use solana_program::{ account_info::AccountInfo, entrypoint::ProgramResult, @@ -8,36 +8,32 @@ use solana_program::{ program_error::ProgramError, pubkey::Pubkey, system_program::ID as system_program_id, - sysvar::{ instructions::ID as ixs_sysvar_id, rent::ID as rent_program_id }, + sysvar::{instructions::ID as ixs_sysvar_id, rent::ID as rent_program_id}, }; -use spl_associated_token_account::{ get_associated_token_address, ID as ata_program_id }; +use spl_associated_token_account::{get_associated_token_address, ID as ata_program_id}; use spl_token::ID as token_program_id; use crate::{ check, constants::{ - MARGINFI_PROD_PROGRAM, - MARGINFI_STAGING_PROGRAM, - MIN_BOOST_GAP_BPS, - MIN_REPAY_GAP_BPS, + MARGINFI_PROD_PROGRAM, MARGINFI_STAGING_PROGRAM, MIN_BOOST_GAP_BPS, MIN_REPAY_GAP_BPS, SOLAUTO_MANAGER, }, error_if, state::{ - automation::AutomationSettings, - referral_state::ReferralState, + automation::AutomationSettings, referral_state::ReferralState, solauto_position::SolautoPosition, }, types::{ errors::SolautoError, instruction::SolautoStandardAccounts, - shared::{ DeserializedAccount, LendingPlatform, TokenType }, + shared::{DeserializedAccount, LendingPlatform, TokenType}, }, utils::math_utils::from_rounded_usd_value, }; use super::{ - math_utils::{ get_max_boost_to_bps, get_max_repay_from_bps, get_max_repay_to_bps }, + math_utils::{get_max_boost_to_bps, get_max_repay_from_bps, get_max_repay_to_bps}, solauto_utils::safe_unpack_token_account, }; @@ -45,13 +41,13 @@ pub fn generic_instruction_validation( accounts: &Box, lending_platform: LendingPlatform, authority_signer_only_ix: bool, - solauto_managed_only_ix: bool + solauto_managed_only_ix: bool, ) -> ProgramResult { validate_instruction( accounts.signer, &accounts.solauto_position, authority_signer_only_ix, - solauto_managed_only_ix + solauto_managed_only_ix, )?; validate_lending_program_account(accounts.lending_protocol, lending_platform)?; validate_standard_programs( @@ -59,7 +55,7 @@ pub fn generic_instruction_validation( Some(accounts.token_program), accounts.ata_program, accounts.rent, - accounts.ixs_sysvar + accounts.ixs_sysvar, )?; if accounts.authority_referral_state.is_some() { @@ -67,7 +63,7 @@ pub fn generic_instruction_validation( &accounts.solauto_position.data.authority, accounts.authority_referral_state.as_ref().unwrap(), accounts.referred_by_ta, - true + true, )?; } @@ -79,7 +75,7 @@ pub fn validate_instruction( signer: &AccountInfo, solauto_position: &DeserializedAccount, authority_signer_only_ix: bool, - solauto_managed_only_ix: bool + solauto_managed_only_ix: bool, ) -> ProgramResult { check!(&signer.is_signer, ProgramError::MissingRequiredSignature); @@ -87,8 +83,9 @@ pub fn validate_instruction( let authority_signed = || { let expected_solauto_position_address = Pubkey::create_program_address( solauto_position.data.seeds_with_bump().as_slice(), - &crate::ID - ).expect("Ok"); + &crate::ID, + ) + .expect("Ok"); let expected_address_matches = solauto_position.account_info.key == &expected_solauto_position_address; return signer.key == &position_authority && expected_address_matches; @@ -120,15 +117,15 @@ pub fn validate_instruction( pub fn validate_position_settings(solauto_position: &SolautoPosition) -> ProgramResult { let max_boost_to_bps = get_max_boost_to_bps( solauto_position.state.max_ltv_bps, - solauto_position.state.liq_threshold_bps + solauto_position.state.liq_threshold_bps, ); let max_repay_to_bps = get_max_repay_to_bps( solauto_position.state.max_ltv_bps, - solauto_position.state.liq_threshold_bps + solauto_position.state.liq_threshold_bps, ); let max_repay_from_bps = get_max_repay_from_bps( solauto_position.state.max_ltv_bps, - solauto_position.state.liq_threshold_bps + solauto_position.state.liq_threshold_bps, ); let data = &solauto_position.position; @@ -136,10 +133,22 @@ pub fn validate_position_settings(solauto_position: &SolautoPosition) -> Program data.settings.repay_to_bps >= data.settings.boost_to_bps, SolautoError::InvalidRepayToSetting ); - check!(data.settings.boost_to_bps <= max_boost_to_bps, SolautoError::InvalidBoostToSetting); - check!(data.settings.repay_gap >= MIN_REPAY_GAP_BPS, SolautoError::InvalidRepayGapSetting); - check!(data.settings.boost_gap >= MIN_BOOST_GAP_BPS, SolautoError::InvalidBoostGapSetting); - check!(data.settings.repay_to_bps <= max_repay_to_bps, SolautoError::InvalidRepayToSetting); + check!( + data.settings.boost_to_bps <= max_boost_to_bps, + SolautoError::InvalidBoostToSetting + ); + check!( + data.settings.repay_gap >= MIN_REPAY_GAP_BPS, + SolautoError::InvalidRepayGapSetting + ); + check!( + data.settings.boost_gap >= MIN_BOOST_GAP_BPS, + SolautoError::InvalidBoostGapSetting + ); + check!( + data.settings.repay_to_bps <= max_repay_to_bps, + SolautoError::InvalidRepayToSetting + ); check!( data.settings.repay_to_bps + data.settings.repay_gap <= max_repay_from_bps, SolautoError::InvalidRepayFromSetting @@ -149,7 +158,7 @@ pub fn validate_position_settings(solauto_position: &SolautoPosition) -> Program pub fn validate_automation_settings( automation: &AutomationSettings, - current_unix_timestamp: u64 + current_unix_timestamp: u64, ) -> ProgramResult { let invalid_params = |error_msg| { msg!(error_msg); @@ -164,9 +173,8 @@ pub fn validate_automation_settings( return invalid_params("Interval period must be between 10 minutes and 1 month"); } - if - current_unix_timestamp < automation.unix_start_date || - current_unix_timestamp > automation.unix_start_date + automation.interval_seconds + if current_unix_timestamp < automation.unix_start_date + || current_unix_timestamp > automation.unix_start_date + automation.interval_seconds { return invalid_params("Provided an invalid unix start date"); } @@ -180,7 +188,7 @@ pub fn validate_automation_settings( pub fn validate_lending_program_account( program: &AccountInfo, - lending_platform: LendingPlatform + lending_platform: LendingPlatform, ) -> ProgramResult { match lending_platform { LendingPlatform::Marginfi => { @@ -199,7 +207,7 @@ pub fn validate_standard_programs( token_program: Option<&AccountInfo>, ata_program: Option<&AccountInfo>, rent: Option<&AccountInfo>, - ixs_sysvar: Option<&AccountInfo> + ixs_sysvar: Option<&AccountInfo>, ) -> ProgramResult { check!( system_program.is_none() || system_program.unwrap().key == &system_program_id, @@ -228,24 +236,24 @@ pub fn validate_referral_accounts<'a>( referral_state_authority: &Pubkey, authority_referral_state: &DeserializedAccount<'a, ReferralState>, referred_by_ta: Option<&'a AccountInfo<'a>>, - validate_ta: bool + validate_ta: bool, ) -> ProgramResult { let referral_state_pda = Pubkey::create_program_address( authority_referral_state.data.seeds_with_bump().as_slice(), - &crate::ID + &crate::ID, )?; error_if!( - &authority_referral_state.data.authority != referral_state_authority || - &referral_state_pda != authority_referral_state.account_info.key, + &authority_referral_state.data.authority != referral_state_authority + || &referral_state_pda != authority_referral_state.account_info.key, SolautoError::IncorrectAccounts ); let authority_referred_by_state = &authority_referral_state.data.referred_by_state; error_if!( - validate_ta && - authority_referred_by_state != &Pubkey::default() && - referred_by_ta.is_none(), + validate_ta + && authority_referred_by_state != &Pubkey::default() + && referred_by_ta.is_none(), SolautoError::IncorrectAccounts ); // The referred_by_ta is validated during rebalance in solauto_manager.rs because it requires up-to-date state @@ -255,7 +263,7 @@ pub fn validate_referral_accounts<'a>( pub fn validate_marginfi_bank<'a>( marginfi_bank: &'a AccountInfo<'a>, - mint: &Pubkey + mint: &Pubkey, ) -> ProgramResult { if mint == &Pubkey::default() { return Ok(()); @@ -272,14 +280,14 @@ pub fn validate_lending_program_accounts_with_position<'a>( solauto_position: &DeserializedAccount, lp_user_account: &'a AccountInfo<'a>, lp_supply_account: &'a AccountInfo<'a>, - lp_debt_account: &'a AccountInfo<'a> + lp_debt_account: &'a AccountInfo<'a>, ) -> ProgramResult { let supply_mint = &solauto_position.data.state.supply.mint; let debt_mint = &solauto_position.data.state.debt.mint; error_if!( - !solauto_position.data.self_managed.val && - lp_user_account.key != &solauto_position.data.position.lp_user_account, + !solauto_position.data.self_managed.val + && lp_user_account.key != &solauto_position.data.position.lp_user_account, SolautoError::IncorrectAccounts ); @@ -296,10 +304,20 @@ pub fn validate_lending_program_accounts_with_position<'a>( pub fn validate_token_accounts<'a, 'b>( solauto_position: &'b DeserializedAccount<'a, SolautoPosition>, source_supply_ta: Option<&'a AccountInfo<'a>>, - source_debt_ta: Option<&'a AccountInfo<'a>> + source_debt_ta: Option<&'a AccountInfo<'a>>, ) -> ProgramResult { - validate_token_account(solauto_position, source_supply_ta, Some(TokenType::Supply), None)?; - validate_token_account(solauto_position, source_debt_ta, Some(TokenType::Debt), None)?; + validate_token_account( + solauto_position, + source_supply_ta, + Some(TokenType::Supply), + None, + )?; + validate_token_account( + solauto_position, + source_debt_ta, + Some(TokenType::Debt), + None, + )?; Ok(()) } @@ -307,7 +325,7 @@ pub fn validate_token_account<'a>( solauto_position: &DeserializedAccount<'a, SolautoPosition>, source_ta: Option<&'a AccountInfo<'a>>, token_type: Option, - token_mint: Option<&Pubkey> + token_mint: Option<&Pubkey>, ) -> ProgramResult { if solauto_position.data.self_managed.val && token_mint.is_none() { return Ok(()); @@ -324,19 +342,15 @@ pub fn validate_token_account<'a>( mint_key }; - let associated_position_ta = get_associated_token_address( - &solauto_position.account_info.key, - mint_key - ); - let associated_authority_ta = get_associated_token_address( - &solauto_position.data.authority, - mint_key - ); + let associated_position_ta = + get_associated_token_address(&solauto_position.account_info.key, mint_key); + let associated_authority_ta = + get_associated_token_address(&solauto_position.data.authority, mint_key); error_if!( - source_ta.is_some() && - source_ta.unwrap().key != &associated_position_ta && - source_ta.unwrap().key != &associated_authority_ta, + source_ta.is_some() + && source_ta.unwrap().key != &associated_position_ta + && source_ta.unwrap().key != &associated_authority_ta, SolautoError::IncorrectAccounts ); @@ -346,7 +360,7 @@ pub fn validate_token_account<'a>( pub fn token_account_owned_by<'a>( token_account: &'a AccountInfo<'a>, expected_owner: &Pubkey, - token_mint: Option<&Pubkey> + token_mint: Option<&Pubkey>, ) -> Result { if token_mint.is_some() { return Ok( @@ -354,28 +368,29 @@ pub fn token_account_owned_by<'a>( ); } else { let token_account_data = safe_unpack_token_account(Some(token_account))?.unwrap(); - return Ok( - token_account_data.account_info.owner == &token_program_id && - &token_account_data.data.owner == expected_owner - ); + return Ok(token_account_data.account_info.owner == &token_program_id + && &token_account_data.data.owner == expected_owner); } } pub fn validate_referral_signer( referral_state: &DeserializedAccount, signer: &AccountInfo, - allow_solauto_manager: bool + allow_solauto_manager: bool, ) -> ProgramResult { let referral_state_pda = Pubkey::create_program_address( referral_state.data.seeds_with_bump().as_slice(), - &crate::ID + &crate::ID, )?; check!(&signer.is_signer, ProgramError::MissingRequiredSignature); - check!(&referral_state_pda == referral_state.account_info.key, SolautoError::IncorrectAccounts); + check!( + &referral_state_pda == referral_state.account_info.key, + SolautoError::IncorrectAccounts + ); error_if!( - signer.key != &referral_state.data.authority && - (!allow_solauto_manager || signer.key != &SOLAUTO_MANAGER), + signer.key != &referral_state.data.authority + && (!allow_solauto_manager || signer.key != &SOLAUTO_MANAGER), SolautoError::IncorrectAccounts ); @@ -384,19 +399,22 @@ pub fn validate_referral_signer( pub fn validate_no_active_balances<'a>( lp_user_account: &'a AccountInfo<'a>, - lending_platform: LendingPlatform + lending_platform: LendingPlatform, ) -> ProgramResult { if lending_platform == LendingPlatform::Marginfi { - let marginfi_account = DeserializedAccount:: - ::zerocopy(Some(lp_user_account))? - .unwrap(); + let marginfi_account = + DeserializedAccount::::zerocopy(Some(lp_user_account))?.unwrap(); check!( - marginfi_account.data.lending_account.balances + marginfi_account + .data + .lending_account + .balances .iter() .filter(|balance| balance.active == 1) .collect::>() - .len() == 0, + .len() + == 0, SolautoError::IncorrectAccounts ); @@ -411,13 +429,20 @@ pub fn validate_rebalance(solauto_position: &SolautoPosition) -> ProgramResult { let curr_supply_usd = solauto_position.state.supply.amount_used.usd_value(); let curr_debt_usd = solauto_position.state.debt.amount_used.usd_value(); - let target_supply_usd = from_rounded_usd_value( - solauto_position.rebalance.values.target_supply_usd - ); + let target_supply_usd = + from_rounded_usd_value(solauto_position.rebalance.values.target_supply_usd); let target_debt_usd = from_rounded_usd_value(solauto_position.rebalance.values.target_debt_usd); - msg!("Supply expected vs. actual: {}, {}", target_supply_usd, curr_supply_usd); - msg!("Debt expected vs. actual: {}, {}", target_debt_usd, curr_debt_usd); + msg!( + "Supply expected vs. actual: {}, {}", + target_supply_usd, + curr_supply_usd + ); + msg!( + "Debt expected vs. actual: {}, {}", + target_debt_usd, + curr_debt_usd + ); check!( value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.2), SolautoError::InvalidRebalanceMade @@ -437,9 +462,11 @@ pub fn correct_token_account(token_account: &Pubkey, wallet: &Pubkey, mint: &Pub pub fn valid_token_account_for_mints( token_account: &Pubkey, wallet: &Pubkey, - mints: &Vec + mints: &Vec, ) -> bool { - mints.iter().any(|mint| correct_token_account(token_account, wallet, mint)) + mints + .iter() + .any(|mint| correct_token_account(token_account, wallet, mint)) } pub fn value_lte_with_threshold(value: f64, target_value: f64, threshold: f64) -> bool { @@ -467,11 +494,9 @@ pub fn value_match_with_threshold(value: f64, target_value: f64, threshold: f64) mod tests { use crate::{ state::{ - automation::{ AutomationSettings, AutomationSettingsInp }, + automation::{AutomationSettings, AutomationSettingsInp}, solauto_position::{ - PositionData, - PositionState, - SolautoSettingsParameters, + PositionData, PositionState, SolautoSettingsParameters, SolautoSettingsParametersInp, }, }, @@ -494,7 +519,7 @@ mod tests { Pubkey::default(), PositionType::default(), position_data, - position_state + position_state, ); let result = validate_position_settings(&solauto_position); assert!(result.is_err()); @@ -514,14 +539,14 @@ mod tests { boost_gap: MIN_BOOST_GAP_BPS - 10, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { repay_gap: MIN_REPAY_GAP_BPS - 10, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -529,7 +554,7 @@ mod tests { repay_gap: 600, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -537,7 +562,7 @@ mod tests { boost_gap: 1000, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -545,7 +570,7 @@ mod tests { repay_to_bps: 4000, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { @@ -553,14 +578,14 @@ mod tests { repay_gap: 500, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); test_position_settings( SolautoSettingsParameters::from(SolautoSettingsParametersInp { repay_to_bps: 9900, ..default_settings_args }), - default_liq_threshold_bps + default_liq_threshold_bps, ); } @@ -582,25 +607,25 @@ mod tests { test_automation_settings( current_timestamp, AutomationSettings::from(AutomationSettingsInp { - unix_start_date: current_timestamp + - default_automation_settings_args.interval_seconds + - 100, + unix_start_date: current_timestamp + + default_automation_settings_args.interval_seconds + + 100, ..default_automation_settings_args - }) + }), ); test_automation_settings( current_timestamp, AutomationSettings::from(AutomationSettingsInp { interval_seconds: 60, ..default_automation_settings_args.clone() - }) + }), ); test_automation_settings( current_timestamp, AutomationSettings::from(AutomationSettingsInp { interval_seconds: 60 * 60 * 24 * 60, ..default_automation_settings_args.clone() - }) + }), ); } } diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index ac09ace9..901917e9 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.751", + "version": "1.0.753", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts index 6579144c..ff782667 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts @@ -93,12 +93,8 @@ export class RebalanceSwapManager { let debtUsd = this.client.pos.debtUsd(this.priceType); // TODO: add token balance change - const { - input, - biasedInputPrice, - output, - biasedOutputPrice, - } = this.swapDetails(); + const { input, biasedInputPrice, output, biasedOutputPrice } = + this.swapDetails(); const swapInputAmount = swapInputAmountBaseUnit ? fromBaseUnit( @@ -125,7 +121,9 @@ export class RebalanceSwapManager { const res = applyDebtAdjustmentUsd( { debtAdjustmentUsd: this.isBoost() ? swapInputUsd : swapInputUsd * -1, - debtAdjustmentUsdOutput: this.isBoost() ? swapOutputUsd : swapOutputUsd * -1, + debtAdjustmentUsdOutput: this.isBoost() + ? swapOutputUsd + : swapOutputUsd * -1, }, { supplyUsd, debtUsd }, fromBps(this.client.pos.state.liqThresholdBps), @@ -177,8 +175,11 @@ export class RebalanceSwapManager { BigInt(parseInt(swapQuote.inAmount)) ); const exceedsMinOutput = criteria.minOutputAmount - ? outputAmount < Number(criteria.minOutputAmount) : false; - const exceedsMaxRate = criteria.maxLiqUtilizationRateBps ? postRebalanceRate > criteria.maxLiqUtilizationRateBps : false; + ? outputAmount < Number(criteria.minOutputAmount) + : false; + const exceedsMaxRate = criteria.maxLiqUtilizationRateBps + ? postRebalanceRate > criteria.maxLiqUtilizationRateBps + : false; insufficient = exceedsMinOutput || exceedsMaxRate; consoleLog(postRebalanceRate, criteria.maxLiqUtilizationRateBps); @@ -211,8 +212,7 @@ export class RebalanceSwapManager { BigInt( Math.round( Number(output.amountUsed.baseUnit) * - // Add this small percentage to account for the APR on the debt between now and the transaction - 0.0001 + (fromBps(this.solautoFeeBps) + 0.0001) ) ) : toBaseUnit(this.usdToSwap() / biasedOutputPrice, output.decimals); From c9a807a0a77846a6831746019f0b3cb6487e214b Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 9 May 2025 13:42:21 -0400 Subject: [PATCH 26/83] fixes --- solauto-sdk/package.json | 2 +- .../rebalance/rebalanceSwapManager.ts | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 901917e9..5189d3e2 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.753", + "version": "1.0.758", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts index ff782667..86f3a35d 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts @@ -207,16 +207,6 @@ export class RebalanceSwapManager { const rebalanceToZero = this.targetLiqUtilizationRateBps === 0; let { input, output, biasedOutputPrice, inputAmount } = this.swapDetails(); - let outputAmount = rebalanceToZero - ? output.amountUsed.baseUnit + - BigInt( - Math.round( - Number(output.amountUsed.baseUnit) * - (fromBps(this.solautoFeeBps) + 0.0001) - ) - ) - : toBaseUnit(this.usdToSwap() / biasedOutputPrice, output.decimals); - const flashLoanRepayFromDebt = !this.isBoost() && this.flRequirements && @@ -225,6 +215,15 @@ export class RebalanceSwapManager { const exactOut = flashLoanRepayFromDebt; const exactIn = !exactOut; + const outputPaddingPct = + (exactOut ? fromBps(this.solautoFeeBps) : 0) + 0.0001; + let outputAmount = rebalanceToZero + ? output.amountUsed.baseUnit + + BigInt( + Math.round(Number(output.amountUsed.baseUnit) * outputPaddingPct) + ) + : toBaseUnit(this.usdToSwap() / biasedOutputPrice, output.decimals); + if (exactIn && (rebalanceToZero || this.values.repayingCloseToMaxLtv)) { inputAmount = this.bigIntWithIncrement(inputAmount, 0.005); } From 7d7c5794256fdedb27ad5482d86a6cf53828652e Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 9 May 2025 14:20:50 -0400 Subject: [PATCH 27/83] adjust fee --- programs/solauto/src/rebalance/solauto_fees.rs | 2 +- solauto-sdk/src/services/rebalance/solautoFees.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/solauto/src/rebalance/solauto_fees.rs b/programs/solauto/src/rebalance/solauto_fees.rs index d0e7bb24..1b07823a 100644 --- a/programs/solauto/src/rebalance/solauto_fees.rs +++ b/programs/solauto/src/rebalance/solauto_fees.rs @@ -62,7 +62,7 @@ impl SolautoFeesBps { let mut fee_bps: f64; if self.target_liq_utilization_rate_bps.is_some() { - fee_bps = 15.0; + fee_bps = 10.0; } else if rebalance_direction == &RebalanceDirection::Repay { fee_bps = 25.0; } else if self.position_net_worth_usd <= min_size { diff --git a/solauto-sdk/src/services/rebalance/solautoFees.ts b/solauto-sdk/src/services/rebalance/solautoFees.ts index 9d70cd1e..a4e3bc98 100644 --- a/solauto-sdk/src/services/rebalance/solautoFees.ts +++ b/solauto-sdk/src/services/rebalance/solautoFees.ts @@ -29,7 +29,7 @@ export class SolautoFeesBps { let feeBps: number = 0; if (this.targetLiqUtilizationRateBps !== undefined) { - feeBps = 15; + feeBps = 10; } else if (rebalanceDirection === RebalanceDirection.Repay) { feeBps = 25; } else if (this.positionNetWorthUsd <= minSize) { From ed9e507d84bc1f828fce944c1b2f615877a6ae52 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 9 May 2025 15:06:38 -0400 Subject: [PATCH 28/83] bump --- solauto-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 5189d3e2..32e2928e 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.758", + "version": "1.0.759", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", From dfe09fbe6ed3d7a5cb82ef0d8a0d94976e57ffa5 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 10 May 2025 15:24:04 -0400 Subject: [PATCH 29/83] fixes --- solauto-sdk/package.json | 2 +- solauto-sdk/src/services/solauto/txHandler.ts | 8 +++++--- .../services/transactions/manager/transactionsManager.ts | 2 +- solauto-sdk/src/utils/generalUtils.ts | 7 +++++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 32e2928e..35022904 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.759", + "version": "1.0.761", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/solauto/txHandler.ts b/solauto-sdk/src/services/solauto/txHandler.ts index 5cdba227..35aafb1e 100644 --- a/solauto-sdk/src/services/solauto/txHandler.ts +++ b/solauto-sdk/src/services/solauto/txHandler.ts @@ -17,7 +17,7 @@ export interface TxHandlerProps { lpEnv?: ProgramEnv; } -export abstract class TxHandler { +export class TxHandler { public rpcUrl!: string; public showLogs = false; public programId!: PublicKey; @@ -64,7 +64,9 @@ export abstract class TxHandler { consoleLog(...args); } - abstract defaultLookupTables(): string[]; + defaultLookupTables(): string[] { + return []; + } - abstract resetLiveTxUpdates(success?: boolean): Promise; + resetLiveTxUpdates(success?: boolean) {} } diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index ac6afc0e..c296cadb 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -585,7 +585,7 @@ export class TransactionsManager { consoleLog(errorString); if (!errorDetails.canBeIgnored) { - throw new Error(errorInfo); + throw error; } } } diff --git a/solauto-sdk/src/utils/generalUtils.ts b/solauto-sdk/src/utils/generalUtils.ts index 39b7bb1c..02b87fbc 100644 --- a/solauto-sdk/src/utils/generalUtils.ts +++ b/solauto-sdk/src/utils/generalUtils.ts @@ -127,7 +127,7 @@ export function retryWithExponentialBackoff( attemptNum++; if ( - errorsToThrow && + errorsToThrow?.length && errorsToThrow.some((errorType) => error instanceof errorType) ) { reject(error); @@ -206,7 +206,10 @@ export function validPubkey(pubkey?: PublicKey | UmiPublicKey | string) { return Boolean(pubkey) && pubkey!.toString() !== PublicKey.default.toString(); } -export function createRecord(keys: string[], values: T[]): Record { +export function createRecord( + keys: string[], + values: T[] +): Record { return Object.fromEntries( zip(keys, values).map(([k, v]) => [k.toString(), v]) ); From 4422a3c1801a5047292a9721c450886f745a6844 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 11 May 2025 12:18:39 -0400 Subject: [PATCH 30/83] larger batch --- solauto-sdk/src/solautoPosition/positionUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/src/solautoPosition/positionUtils.ts b/solauto-sdk/src/solautoPosition/positionUtils.ts index ef01da5d..3ce661a6 100644 --- a/solauto-sdk/src/solautoPosition/positionUtils.ts +++ b/solauto-sdk/src/solautoPosition/positionUtils.ts @@ -46,7 +46,7 @@ export async function getPositionExBulk( umi: Umi, publicKeys: PublicKey[] ): Promise { - const batches = getBatches(publicKeys, 50); + const batches = getBatches(publicKeys, 100); const data = ( await Promise.all( From 40c1f5da278d8c95f97566ea6192802ece4008cf Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 19 May 2025 15:18:59 -0400 Subject: [PATCH 31/83] some utils --- solauto-sdk/local/txSandbox.ts | 52 +++++++++++++++++++++++++--- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/numberUtils.ts | 31 +++++++++++++++++ 3 files changed, 79 insertions(+), 6 deletions(-) diff --git a/solauto-sdk/local/txSandbox.ts b/solauto-sdk/local/txSandbox.ts index add63425..f454f301 100644 --- a/solauto-sdk/local/txSandbox.ts +++ b/solauto-sdk/local/txSandbox.ts @@ -1,15 +1,19 @@ import { Keypair, PublicKey } from "@solana/web3.js"; -import { createSignerFromKeypair } from "@metaplex-foundation/umi"; +import { createSignerFromKeypair, publicKey } from "@metaplex-foundation/umi"; import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters"; import { + bytesToI80F48, ClientTransactionsManager, consoleLog, + fetchBank, + fetchMarginfiAccount, getBatches, getClient, getPositionExBulk, getSolanaRpcConnection, getSolautoManagedPositions, LendingPlatform, + lendingPoolAccrueBankInterest, LOCAL_IRONFORGE_API_URL, PriceType, PriorityFeeSetting, @@ -21,8 +25,9 @@ import { TransactionItem, } from "../src"; import { getSecretKey } from "./shared"; +import { fromBaseUnit } from "../dist"; -const payForTransaction = false; +const payForTransaction = true; const testProgram = false; const lpEnv: ProgramEnv = "Prod"; @@ -47,14 +52,23 @@ export async function main() { }); await client.initializeExistingSolautoPosition({ - positionId: 2, - authority: new PublicKey("EBhRj7jbF2EVE21i19JSuCX1BAbnZFYhoKW64HnaZ3kf"), + positionId: 1, + authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"), // lpUserAccount: new PublicKey( // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" // ), }); - const transactionItems = [rebalance(client)]; + const transactionItems = [ + new TransactionItem(async () => ({ + tx: lendingPoolAccrueBankInterest(umi, { + marginfiGroup: publicKey( + "DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q" + ), + bank: publicKey("EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA"), + }), + })), + ]; const txManager = new ClientTransactionsManager({ txHandler: client, @@ -64,6 +78,34 @@ export async function main() { }); const statuses = await txManager.send(transactionItems); consoleLog(statuses); + + await new Promise((resolve) => setTimeout(resolve, 5000)); + + const mfiAccount = await fetchMarginfiAccount( + umi, + publicKey("Fun9UD87tLCxqxoTvpGYAy6Uwk2eevFGDk1VvxpXbd5x") + ); + const bank = await fetchBank( + umi, + publicKey("EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA"), + { commitment: "confirmed" } + ); + + console.log( + fromBaseUnit( + BigInt( + Math.round( + bytesToI80F48( + mfiAccount.lendingAccount.balances[0].assetShares.value + ) * bytesToI80F48(bank.assetShareValue.value) + ) + ), + 6 + ) + ); + // 1:34pm - $4479.61 + // 2:51pm - $4513.30 + // 12:58pm - $4529.16 } async function refreshAll() { diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 35022904..79327ed6 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.761", + "version": "1.0.762", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/numberUtils.ts b/solauto-sdk/src/utils/numberUtils.ts index 99b7e11a..b772da96 100644 --- a/solauto-sdk/src/utils/numberUtils.ts +++ b/solauto-sdk/src/utils/numberUtils.ts @@ -8,6 +8,8 @@ import { import { PositionState, PriceType } from "../generated"; import { RoundAction } from "../types"; import { safeGetPrice } from "./priceUtils"; +import { StrategyType, strategyType } from "./stringUtils"; +import { getDebtAdjustment } from "../services"; export function calcNetWorthUsd(state?: PositionState) { return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0)); @@ -215,3 +217,32 @@ export function realtimeUsdToEmaUsd( safeGetPrice(mint, PriceType.Ema)! ); } + +export function boostSettingToLeverageFactor( + supplyMint: PublicKey, + debtMint: PublicKey, + boostToBps: number, + liqThresholdBps: number +) { + const strategy = strategyType(supplyMint, debtMint); + const supplyUsd = 100; + const debtUsd = getDebtAdjustment( + liqThresholdBps, + { supplyUsd: 100, debtUsd: 0 }, + boostToBps + ).debtAdjustmentUsd; + return getLeverageFactor(strategy, supplyUsd + debtUsd, debtUsd); +} + +export function getLeverageFactor( + strategyType: StrategyType, + supplyUsd: number, + debtUsd: number +): number { + return ( + (strategyType === "Long" || strategyType === "Ratio" + ? supplyUsd + : debtUsd) / + (supplyUsd - debtUsd) + ); +} From 3b76d0b25245470266c6c263bc679548af48d499 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 19 May 2025 15:21:47 -0400 Subject: [PATCH 32/83] fix sandbox --- solauto-sdk/local/txSandbox.ts | 46 ++-------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/solauto-sdk/local/txSandbox.ts b/solauto-sdk/local/txSandbox.ts index f454f301..688472ff 100644 --- a/solauto-sdk/local/txSandbox.ts +++ b/solauto-sdk/local/txSandbox.ts @@ -2,18 +2,14 @@ import { Keypair, PublicKey } from "@solana/web3.js"; import { createSignerFromKeypair, publicKey } from "@metaplex-foundation/umi"; import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters"; import { - bytesToI80F48, ClientTransactionsManager, consoleLog, - fetchBank, - fetchMarginfiAccount, getBatches, getClient, getPositionExBulk, getSolanaRpcConnection, getSolautoManagedPositions, LendingPlatform, - lendingPoolAccrueBankInterest, LOCAL_IRONFORGE_API_URL, PriceType, PriorityFeeSetting, @@ -25,9 +21,8 @@ import { TransactionItem, } from "../src"; import { getSecretKey } from "./shared"; -import { fromBaseUnit } from "../dist"; -const payForTransaction = true; +const payForTransaction = false; const testProgram = false; const lpEnv: ProgramEnv = "Prod"; @@ -59,16 +54,7 @@ export async function main() { // ), }); - const transactionItems = [ - new TransactionItem(async () => ({ - tx: lendingPoolAccrueBankInterest(umi, { - marginfiGroup: publicKey( - "DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q" - ), - bank: publicKey("EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA"), - }), - })), - ]; + const transactionItems = [rebalance(client)]; const txManager = new ClientTransactionsManager({ txHandler: client, @@ -78,34 +64,6 @@ export async function main() { }); const statuses = await txManager.send(transactionItems); consoleLog(statuses); - - await new Promise((resolve) => setTimeout(resolve, 5000)); - - const mfiAccount = await fetchMarginfiAccount( - umi, - publicKey("Fun9UD87tLCxqxoTvpGYAy6Uwk2eevFGDk1VvxpXbd5x") - ); - const bank = await fetchBank( - umi, - publicKey("EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA"), - { commitment: "confirmed" } - ); - - console.log( - fromBaseUnit( - BigInt( - Math.round( - bytesToI80F48( - mfiAccount.lendingAccount.balances[0].assetShares.value - ) * bytesToI80F48(bank.assetShareValue.value) - ) - ), - 6 - ) - ); - // 1:34pm - $4479.61 - // 2:51pm - $4513.30 - // 12:58pm - $4529.16 } async function refreshAll() { From 9ed843754ed073d2c26983f902a83e73491e3901 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Tue, 20 May 2025 22:04:54 -0400 Subject: [PATCH 33/83] support marginfi changes --- .../src/services/solauto/solautoMarginfiClient.ts | 7 +++++-- solauto-sdk/src/utils/marginfi/general.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts index 99bcd79a..602c52d2 100644 --- a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts +++ b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts @@ -37,6 +37,7 @@ import { hasFirstRebalance, getRemainingAccountsForMarginfiHealthCheck, getAccountMeta, + composeRemainingAccounts, } from "../../utils"; import { Bank, @@ -299,7 +300,7 @@ export class SolautoMarginfiClient extends SolautoClient { bankLiquidityVaultAuthority: publicKey( this.marginfiDebtAccounts.vaultAuthority ), - }).addRemainingAccounts(remainingAccounts); + }).addRemainingAccounts(composeRemainingAccounts(remainingAccounts)); } case "Repay": { return lendingAccountRepay(this.umi, { @@ -332,7 +333,9 @@ export class SolautoMarginfiClient extends SolautoClient { bankLiquidityVaultAuthority: publicKey( this.marginfiSupplyAccounts.vaultAuthority ), - }).addRemainingAccounts(this.healthCheckRemainingAccounts ?? []); + }).addRemainingAccounts( + composeRemainingAccounts(this.healthCheckRemainingAccounts ?? []) + ); } } } diff --git a/solauto-sdk/src/utils/marginfi/general.ts b/solauto-sdk/src/utils/marginfi/general.ts index 3d3a1a72..5a9ad505 100644 --- a/solauto-sdk/src/utils/marginfi/general.ts +++ b/solauto-sdk/src/utils/marginfi/general.ts @@ -224,3 +224,16 @@ export function marginfiAccountEmpty(marginfiAccount: MarginfiAccount) { ) === undefined ); } + +export function composeRemainingAccounts(accs: AccountMeta[]): AccountMeta[] { + const banksAndOracles: [AccountMeta, AccountMeta][] = accs.reduce( + (acc: [AccountMeta, AccountMeta][], _, i) => + i % 2 === 0 ? [...acc, [accs[i], accs[i + 1]]] : acc, + [] + ); + return banksAndOracles + .sort((a, b) => + b[0].pubkey.toString().localeCompare(a[0].pubkey.toString()) + ) + .flat(); +} From cee9086506c97ea8cdbfc4a1825cd4dcfa01282f Mon Sep 17 00:00:00 2001 From: Chelioso Date: Tue, 20 May 2025 22:06:06 -0400 Subject: [PATCH 34/83] formatting --- programs/solauto/src/clients/marginfi.rs | 35 ++++++++++++++++++++---- programs/solauto/src/types/shared.rs | 2 ++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index a1c2c836..f96c89ee 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -28,8 +28,8 @@ use crate::{ }, lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, shared::{ - DeserializedAccount, PriceType, RefreshStateProps, RefreshedTokenState, - TokenBalanceAmount, TokenType, + AccountMetaFlags, DeserializedAccount, PriceType, RefreshStateProps, + RefreshedTokenState, TokenBalanceAmount, TokenType, }, }, utils::{math_utils::*, solana_utils::*, solauto_utils::*, validation_utils::*}, @@ -416,6 +416,26 @@ impl<'a> MarginfiClient<'a> { ); cpi.invoke() } + + pub fn compose_remaining_accounts(accounts: Vec) -> Vec { + let mut banks_and_oracles: Vec<(AccountMetaFlags, AccountMetaFlags)> = accounts + .chunks(2) + .filter_map(|chunk| { + if chunk.len() == 2 { + Some((chunk[0], chunk[1])) + } else { + None + } + }) + .collect(); + + banks_and_oracles.sort_by(|a, b| b.0 .0.key.to_string().cmp(&a.0 .0.key.to_string())); + + banks_and_oracles + .into_iter() + .flat_map(|(a, b)| vec![a, b]) + .collect() + } } impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { @@ -552,7 +572,9 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { remaining_accounts.as_slice(), ) } else { - cpi.invoke_with_remaining_accounts(remaining_accounts.as_slice()) + cpi.invoke_with_remaining_accounts( + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), + ) } } @@ -581,7 +603,8 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { }, ); - let mut remaining_accounts = Vec::with_capacity(4); + let mut remaining_accounts: Vec = + Vec::::with_capacity(4); remaining_accounts.push((self.supply.bank.account_info, false, false)); remaining_accounts.push((self.supply.price_oracle.unwrap(), false, false)); remaining_accounts.push((self.debt.bank.account_info, false, true)); @@ -597,7 +620,9 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { remaining_accounts.as_slice(), ) } else { - cpi.invoke_with_remaining_accounts(remaining_accounts.as_slice()) + cpi.invoke_with_remaining_accounts( + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), + ) } } diff --git a/programs/solauto/src/types/shared.rs b/programs/solauto/src/types/shared.rs index 1212defd..c2e31943 100644 --- a/programs/solauto/src/types/shared.rs +++ b/programs/solauto/src/types/shared.rs @@ -179,3 +179,5 @@ impl<'a, T: Pack + IsInitialized> DeserializedAccount<'a, T> { } } } + +pub type AccountMetaFlags<'a> = (&'a AccountInfo<'a>, bool, bool); From 66c75e4df2151dca62c785ddc59b17eef5d906f6 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 24 May 2025 17:07:25 -0400 Subject: [PATCH 35/83] fix missing piece --- solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts b/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts index a9dec13f..f7fdb0a7 100644 --- a/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts +++ b/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts @@ -23,6 +23,7 @@ import { import { FlProviderBase } from "./flProviderBase"; import { bytesToI80F48, + composeRemainingAccounts, consoleLog, fetchTokenPrices, findMarginfiAccounts, @@ -342,7 +343,7 @@ export class MarginfiFlProvider extends FlProviderBase { lendingAccountEndFlashloan(this.umi, { marginfiAccount: publicKey(iMfiAccount.accountPk), signer: this.signer, - }).addRemainingAccounts(remainingAccounts) + }).addRemainingAccounts(composeRemainingAccounts(remainingAccounts)) ); } From 7a67b2627a3c3adec620ca0927e58722dd153985 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 25 May 2025 12:21:11 -0400 Subject: [PATCH 36/83] fixes --- .../marginfi-sdk/src/generated/programs.rs | 2 +- programs/solauto/src/clients/marginfi.rs | 4 ++-- .../solauto/src/instructions/rebalance.rs | 4 ++-- .../rebalance/rebalanceSwapManager.ts | 14 ------------- .../services/rebalance/rebalanceTxBuilder.ts | 2 +- .../services/solauto/solautoMarginfiClient.ts | 20 ++++++++++++++++--- .../marginfiSolautoPositionEx.ts | 2 +- solauto-sdk/tests/transactions/shared.ts | 7 +++++-- .../tests/transactions/solautoMarginfi.ts | 10 +++++++--- 9 files changed, 36 insertions(+), 29 deletions(-) diff --git a/programs/marginfi-sdk/src/generated/programs.rs b/programs/marginfi-sdk/src/generated/programs.rs index bd4b2e1e..4e88f74a 100644 --- a/programs/marginfi-sdk/src/generated/programs.rs +++ b/programs/marginfi-sdk/src/generated/programs.rs @@ -7,5 +7,5 @@ use solana_program::{pubkey, pubkey::Pubkey}; -/// `marginfi` program ID. pub const MARGINFI_ID: Pubkey = pubkey!("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"); +// pub const MARGINFI_ID: Pubkey = pubkey!("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"); diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index f96c89ee..935fc3e7 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -569,7 +569,7 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { .data .seeds_with_bump() .as_slice()], - remaining_accounts.as_slice(), + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), ) } else { cpi.invoke_with_remaining_accounts( @@ -617,7 +617,7 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { .data .seeds_with_bump() .as_slice()], - remaining_accounts.as_slice(), + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), ) } else { cpi.invoke_with_remaining_accounts( diff --git a/programs/solauto/src/instructions/rebalance.rs b/programs/solauto/src/instructions/rebalance.rs index e78bc336..ee0534ae 100644 --- a/programs/solauto/src/instructions/rebalance.rs +++ b/programs/solauto/src/instructions/rebalance.rs @@ -71,7 +71,7 @@ pub fn marginfi_rebalance<'a>( if rebalance_step == RebalanceStep::PreSwap || rebalance_type == SolautoRebalanceType::FLSwapThenRebalance { - if needs_refresh(&std_accounts.solauto_position, &args)? { + if needs_refresh(&std_accounts.solauto_position)? { refresh::marginfi_refresh_accounts( ctx.accounts.marginfi_program, ctx.accounts.marginfi_group, @@ -131,7 +131,6 @@ fn update_token_prices<'a>( fn needs_refresh( solauto_position: &DeserializedAccount, - args: &RebalanceSettings, ) -> Result { if solauto_position.data.self_managed.val { return Ok(true); @@ -163,6 +162,7 @@ fn rebalance<'a>( std_accounts.authority_referral_state.is_some(), SolautoError::IncorrectAccounts ); + #[cfg(not(feature = "test"))] check!( args.flash_loan_fee_bps.unwrap_or(0) <= 150, SolautoError::IncorrectInstructions diff --git a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts index 86f3a35d..a1e576d7 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts @@ -134,20 +134,6 @@ export class RebalanceSwapManager { } ); - // if (isMarginfiPosition(this.client.pos)) { - // console.log(res.newPos.supplyUsd, res.newPos.debtUsd); - // console.log( - // res.newPos.supplyUsd * - // bytesToI80F48( - // this.client.pos.supplyBank!.config.assetWeightInit.value - // ), - // res.newPos.debtUsd * - // bytesToI80F48( - // this.client.pos.debtBank!.config.liabilityWeightInit.value - // ) - // ); - // } - return getLiqUtilzationRateBps( res.newPos.supplyUsd, res.newPos.debtUsd, diff --git a/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts b/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts index a106b4d2..e3be74db 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts @@ -53,7 +53,7 @@ export class RebalanceTxBuilder { ) {} private shouldProceedWithRebalance() { - if (this.client.pos.selfManaged && !this.targetLiqUtilizationRateBps) { + if (this.client.pos.selfManaged && this.targetLiqUtilizationRateBps === undefined) { throw new Error( "A target rate must be provided for self managed position rebalances" ); diff --git a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts index 602c52d2..e8960501 100644 --- a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts +++ b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts @@ -62,7 +62,7 @@ export class SolautoMarginfiClient extends SolautoClient { public marginfiAccount!: PublicKey | Signer; public marginfiAccountPk!: PublicKey; - public healthCheckRemainingAccounts?: AccountMeta[]; + public healthCheckRemainingAccounts!: AccountMeta[]; public marginfiGroup!: PublicKey; public marginfiSupplyAccounts!: MarginfiAssetAccounts; @@ -77,6 +77,7 @@ export class SolautoMarginfiClient extends SolautoClient { this.mfiAccounts = getMarginfiAccounts(this.lpEnv); this.marginfiGroup = this.pos.lpPoolAccount; + this.healthCheckRemainingAccounts = []; if (this.pos.selfManaged) { this.marginfiAccount = @@ -259,6 +260,18 @@ export class SolautoMarginfiClient extends SolautoClient { private marginfiProtocolInteractionIx(args: SolautoActionArgs) { switch (args.__kind) { case "Deposit": { + if ( + !this.healthCheckRemainingAccounts + .map((x) => x.pubkey.toString()) + .includes(this.marginfiSupplyAccounts.bank) + ) { + this.healthCheckRemainingAccounts.push( + ...[ + getAccountMeta(new PublicKey(this.marginfiSupplyAccounts.bank)), + getAccountMeta(this.supplyPriceOracle), + ] + ); + } return lendingAccountDeposit(this.umi, { signer: this.signer, signerTokenAccount: publicKey(this.signerSupplyTa), @@ -273,7 +286,7 @@ export class SolautoMarginfiClient extends SolautoClient { }); } case "Borrow": { - const remainingAccounts = this.healthCheckRemainingAccounts ?? []; + const remainingAccounts = this.healthCheckRemainingAccounts; if ( !remainingAccounts.find( (x) => @@ -287,6 +300,7 @@ export class SolautoMarginfiClient extends SolautoClient { ] ); } + return lendingAccountBorrow(this.umi, { amount: args.fields[0], signer: this.signer, @@ -334,7 +348,7 @@ export class SolautoMarginfiClient extends SolautoClient { this.marginfiSupplyAccounts.vaultAuthority ), }).addRemainingAccounts( - composeRemainingAccounts(this.healthCheckRemainingAccounts ?? []) + composeRemainingAccounts(this.healthCheckRemainingAccounts) ); } } diff --git a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts index e959157b..b7d9e6f9 100644 --- a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts @@ -138,7 +138,7 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx { getBankLiquidityUsedBaseUnit(this.supplyBank, false), this.supplyMintInfo.decimals ); - return Math.min((deposits - borrows), this.totalSupply) * this.supplyPrice()!; + return Math.min(deposits - borrows, this.totalSupply) * this.supplyPrice()!; } async refreshPositionState(priceType?: PriceType): Promise { diff --git a/solauto-sdk/tests/transactions/shared.ts b/solauto-sdk/tests/transactions/shared.ts index 4394e2ca..7310e18c 100644 --- a/solauto-sdk/tests/transactions/shared.ts +++ b/solauto-sdk/tests/transactions/shared.ts @@ -22,6 +22,7 @@ import { closeSolautoPosition, getMarginfiAccounts, ClientTransactionsManager, + ProgramEnv, } from "../../src"; export async function e2eTransactionTest( @@ -29,13 +30,15 @@ export async function e2eTransactionTest( testProgram: boolean, lendingPlatform: LendingPlatform, withFlashLoan: boolean, - showLogs?: boolean + showLogs?: boolean, + lpEnv?: ProgramEnv ) { const client = getClient(lendingPlatform, { signer, showLogs, rpcUrl: LOCAL_IRONFORGE_API_URL, programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM, + lpEnv, }); const supplyMint = new PublicKey(NATIVE_MINT); @@ -43,7 +46,7 @@ export async function e2eTransactionTest( await client.initializeNewSolautoPosition({ positionId: 1, - lpPoolAccount: getMarginfiAccounts().defaultGroup, + lpPoolAccount: getMarginfiAccounts(lpEnv).defaultGroup, supplyMint, debtMint, }); diff --git a/solauto-sdk/tests/transactions/solautoMarginfi.ts b/solauto-sdk/tests/transactions/solautoMarginfi.ts index a04d44f4..b8b02e3a 100644 --- a/solauto-sdk/tests/transactions/solautoMarginfi.ts +++ b/solauto-sdk/tests/transactions/solautoMarginfi.ts @@ -1,11 +1,13 @@ import { describe, it } from "mocha"; -import { LendingPlatform } from "../../src"; +import { LendingPlatform, ProgramEnv } from "../../src"; import { setupTest } from "../shared"; import { e2eTransactionTest } from "./shared"; describe("Solauto Marginfi tests", async () => { const signer = setupTest(); const testProgram = false; + const showLogs = false; + const lpEnv: ProgramEnv = "Prod"; it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => { await e2eTransactionTest( @@ -13,7 +15,8 @@ describe("Solauto Marginfi tests", async () => { testProgram, LendingPlatform.Marginfi, false, - false + showLogs, + lpEnv ); }); @@ -23,7 +26,8 @@ describe("Solauto Marginfi tests", async () => { testProgram, LendingPlatform.Marginfi, true, - false + showLogs, + lpEnv ); }); }); From 729cffa4dd3ff8c8e1e3592bb946e87b284e11a8 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 25 May 2025 13:15:13 -0400 Subject: [PATCH 37/83] slight change --- programs/solauto/src/rebalance/solauto_fees.rs | 2 +- solauto-sdk/src/services/rebalance/solautoFees.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/solauto/src/rebalance/solauto_fees.rs b/programs/solauto/src/rebalance/solauto_fees.rs index 1b07823a..d0e7bb24 100644 --- a/programs/solauto/src/rebalance/solauto_fees.rs +++ b/programs/solauto/src/rebalance/solauto_fees.rs @@ -62,7 +62,7 @@ impl SolautoFeesBps { let mut fee_bps: f64; if self.target_liq_utilization_rate_bps.is_some() { - fee_bps = 10.0; + fee_bps = 15.0; } else if rebalance_direction == &RebalanceDirection::Repay { fee_bps = 25.0; } else if self.position_net_worth_usd <= min_size { diff --git a/solauto-sdk/src/services/rebalance/solautoFees.ts b/solauto-sdk/src/services/rebalance/solautoFees.ts index a4e3bc98..9d70cd1e 100644 --- a/solauto-sdk/src/services/rebalance/solautoFees.ts +++ b/solauto-sdk/src/services/rebalance/solautoFees.ts @@ -29,7 +29,7 @@ export class SolautoFeesBps { let feeBps: number = 0; if (this.targetLiqUtilizationRateBps !== undefined) { - feeBps = 10; + feeBps = 15; } else if (rebalanceDirection === RebalanceDirection.Repay) { feeBps = 25; } else if (this.positionNetWorthUsd <= minSize) { From 1b818179cdf05afaa7176c9a6f690f46f1e4d04d Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 25 May 2025 13:43:05 -0400 Subject: [PATCH 38/83] adjust threshold --- programs/solauto/src/utils/validation_utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/solauto/src/utils/validation_utils.rs b/programs/solauto/src/utils/validation_utils.rs index fd101cca..17303cd4 100644 --- a/programs/solauto/src/utils/validation_utils.rs +++ b/programs/solauto/src/utils/validation_utils.rs @@ -444,11 +444,11 @@ pub fn validate_rebalance(solauto_position: &SolautoPosition) -> ProgramResult { curr_debt_usd ); check!( - value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.2), + value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.15), SolautoError::InvalidRebalanceMade ); check!( - value_lte_with_threshold(curr_debt_usd, target_debt_usd, 0.2), + value_lte_with_threshold(curr_debt_usd, target_debt_usd, 0.15), SolautoError::InvalidRebalanceMade ); From 2b9fa871f4c095fc0329f8bce2550a04deb76f7d Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 25 May 2025 22:10:49 -0400 Subject: [PATCH 39/83] adjustment --- programs/solauto/src/rebalance/solauto_fees.rs | 6 +++++- solauto-sdk/src/services/rebalance/solautoFees.ts | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/programs/solauto/src/rebalance/solauto_fees.rs b/programs/solauto/src/rebalance/solauto_fees.rs index d0e7bb24..d033de4b 100644 --- a/programs/solauto/src/rebalance/solauto_fees.rs +++ b/programs/solauto/src/rebalance/solauto_fees.rs @@ -62,7 +62,11 @@ impl SolautoFeesBps { let mut fee_bps: f64; if self.target_liq_utilization_rate_bps.is_some() { - fee_bps = 15.0; + if self.target_liq_utilization_rate_bps.unwrap() == 0 { + fee_bps = 15.0; + } else { + fee_bps = 10.0; + } } else if rebalance_direction == &RebalanceDirection::Repay { fee_bps = 25.0; } else if self.position_net_worth_usd <= min_size { diff --git a/solauto-sdk/src/services/rebalance/solautoFees.ts b/solauto-sdk/src/services/rebalance/solautoFees.ts index 9d70cd1e..b3a4d753 100644 --- a/solauto-sdk/src/services/rebalance/solautoFees.ts +++ b/solauto-sdk/src/services/rebalance/solautoFees.ts @@ -29,7 +29,11 @@ export class SolautoFeesBps { let feeBps: number = 0; if (this.targetLiqUtilizationRateBps !== undefined) { - feeBps = 15; + if (this.targetLiqUtilizationRateBps === 0) { + feeBps = 15; + } else { + feeBps = 10; + } } else if (rebalanceDirection === RebalanceDirection.Repay) { feeBps = 25; } else if (this.positionNetWorthUsd <= minSize) { From 724fe6ab106a0b1a9c83b8ff977351ff2241dfb5 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 26 May 2025 15:49:48 -0400 Subject: [PATCH 40/83] remove unused import --- programs/solauto/src/types/solauto.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/solauto/src/types/solauto.rs b/programs/solauto/src/types/solauto.rs index f7aa5398..83602ba1 100644 --- a/programs/solauto/src/types/solauto.rs +++ b/programs/solauto/src/types/solauto.rs @@ -1,4 +1,4 @@ -use super::shared::{TokenBalanceAmount, TokenType}; +use super::shared::TokenBalanceAmount; #[derive(Clone, Copy, Eq, PartialEq, Hash)] pub enum SolautoAccount { From f1f56bdf22d79285ea407da3cd95794810d3771e Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 26 May 2025 17:10:03 -0400 Subject: [PATCH 41/83] fixes --- package.json | 1 + programs/marginfi-sdk/Cargo.toml | 5 +++++ programs/marginfi-sdk/src/generated/programs.rs | 7 +++++-- programs/solauto/Cargo.toml | 4 ++-- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index c81239e0..c4fdafb6 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "push": "git add . && git commit -m 'wip' && git push", "format:rust": "find ./programs/* -name '*.rs' -exec rustfmt {} +", "build:rs:local": "cargo build-sbf -- --package solauto --features local", + "build:rs:staging": "cargo build-sbf -- --package solauto --features \"test staging\"", "build:rs:test": "cargo build-sbf -- --package solauto --features test", "build:rs:prod": "solana-verify build --library-name solauto --base-image solanafoundation/solana-verifiable-build@sha256:f3d3a4adaa8008644fc4535373c6818275c7e35a0b07660890b4a95ef434221e", "build:ts": "cd solauto-sdk && npm run build", diff --git a/programs/marginfi-sdk/Cargo.toml b/programs/marginfi-sdk/Cargo.toml index b4eb34c2..02b0bc4e 100644 --- a/programs/marginfi-sdk/Cargo.toml +++ b/programs/marginfi-sdk/Cargo.toml @@ -3,6 +3,11 @@ name = "marginfi-sdk" version = "0.1.0" edition = "2021" +[features] +default = [] +test = [] +staging = [] + [dependencies] solana-program = ">=1.16" borsh = "^0.10" diff --git a/programs/marginfi-sdk/src/generated/programs.rs b/programs/marginfi-sdk/src/generated/programs.rs index 4e88f74a..fa7763f8 100644 --- a/programs/marginfi-sdk/src/generated/programs.rs +++ b/programs/marginfi-sdk/src/generated/programs.rs @@ -5,7 +5,10 @@ //! [https://github.com/metaplex-foundation/kinobi] //! -use solana_program::{pubkey, pubkey::Pubkey}; +use solana_program::{ pubkey, pubkey::Pubkey }; +#[cfg(feature = "staging")] +pub const MARGINFI_ID: Pubkey = pubkey!("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"); + +#[cfg(not(feature = "staging"))] pub const MARGINFI_ID: Pubkey = pubkey!("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"); -// pub const MARGINFI_ID: Pubkey = pubkey!("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"); diff --git a/programs/solauto/Cargo.toml b/programs/solauto/Cargo.toml index bdb23caa..c2ea350e 100644 --- a/programs/solauto/Cargo.toml +++ b/programs/solauto/Cargo.toml @@ -14,8 +14,8 @@ no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] default = [] -test = [] -local = [] +test = ["marginfi-sdk/test"] +staging = ["marginfi-sdk/staging"] [net] git-fetch-with-cli = true From be831672a52b97e222e7b03b6f9c767d19e0c3ae Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 26 May 2025 20:58:25 -0400 Subject: [PATCH 42/83] bump --- solauto-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 79327ed6..77a7db04 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.762", + "version": "1.0.763", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", From a7386db681efb881a68d481bae209c902860ff04 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 29 May 2025 21:07:15 -0400 Subject: [PATCH 43/83] increase jito tip --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/jitoUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 77a7db04..78a9d946 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.763", + "version": "1.0.764", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/jitoUtils.ts b/solauto-sdk/src/utils/jitoUtils.ts index e65a623a..810a3a1e 100644 --- a/solauto-sdk/src/utils/jitoUtils.ts +++ b/solauto-sdk/src/utils/jitoUtils.ts @@ -301,7 +301,7 @@ export async function sendJitoBundledTransactions( txs.map((x) => x.getTransactionSize(umi)) ); - txs[0] = txs[0].prepend(getTipInstruction(userSigner, 150_000)); + txs[0] = txs[0].prepend(getTipInstruction(userSigner, 250_000)); const latestBlockhash = ( await umi.rpc.getLatestBlockhash({ commitment: "confirmed" }) From 21a740e8b598db71eb5abe9a05bb96c73bf316c3 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 30 May 2025 13:05:59 -0400 Subject: [PATCH 44/83] tweaks --- solauto-sdk/local/txSandbox.ts | 4 ++-- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/jitoUtils.ts | 8 ++++++-- solauto-sdk/src/utils/solanaUtils.ts | 10 +++++++--- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/solauto-sdk/local/txSandbox.ts b/solauto-sdk/local/txSandbox.ts index 688472ff..a4f7f4a0 100644 --- a/solauto-sdk/local/txSandbox.ts +++ b/solauto-sdk/local/txSandbox.ts @@ -22,7 +22,7 @@ import { } from "../src"; import { getSecretKey } from "./shared"; -const payForTransaction = false; +const payForTransaction = true; const testProgram = false; const lpEnv: ProgramEnv = "Prod"; @@ -48,7 +48,7 @@ export async function main() { await client.initializeExistingSolautoPosition({ positionId: 1, - authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"), + authority: new PublicKey("61rtn5tzVkesapo6Cz83SPoShUfAePSxJsqniuF2wRKC"), // lpUserAccount: new PublicKey( // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" // ), diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 78a9d946..897b8865 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.764", + "version": "1.0.767", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/jitoUtils.ts b/solauto-sdk/src/utils/jitoUtils.ts index 810a3a1e..d326bca9 100644 --- a/solauto-sdk/src/utils/jitoUtils.ts +++ b/solauto-sdk/src/utils/jitoUtils.ts @@ -304,7 +304,9 @@ export async function sendJitoBundledTransactions( txs[0] = txs[0].prepend(getTipInstruction(userSigner, 250_000)); const latestBlockhash = ( - await umi.rpc.getLatestBlockhash({ commitment: "confirmed" }) + await retryWithExponentialBackoff( + async () => await umi.rpc.getLatestBlockhash({ commitment: "confirmed" }) + ) ).blockhash; if (abortController?.signal.aborted) { @@ -322,7 +324,9 @@ export async function sendJitoBundledTransactions( txs, false, undefined, - Array(txs.length).fill(null).map((_) => 1_400_000) + Array(txs.length) + .fill(null) + .map((_) => 1_400_000) ); simulationResults = await simulateJitoBundle(umi, builtTxs); } diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index 360fde99..b2cec155 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -387,7 +387,7 @@ async function spamSendTransactionUntilConfirmed( blockhash: BlockhashWithExpiryBlockHeight, spamInterval: number = 1500 ): Promise { - let transactionSignature: string | null = null; + let transactionSignature: string | undefined; const sendTx = async () => { try { @@ -395,7 +395,9 @@ async function spamSendTransactionUntilConfirmed( Buffer.from(transaction.serialize()), { skipPreflight: true, maxRetries: 0 } ); - transactionSignature = txSignature; + if (!transactionSignature) { + transactionSignature = txSignature; + } consoleLog(`Transaction sent`); } catch (e) {} }; @@ -451,7 +453,9 @@ export async function sendSingleOptimizedTransaction( ]); consoleLog("Unique account locks: ", Array.from(new Set(accounts)).length); - const blockhash = await connection.getLatestBlockhash("confirmed"); + const blockhash = await retryWithExponentialBackoff( + async () => await connection.getLatestBlockhash("confirmed") + ); if (abortController?.signal.aborted) { return; From a946e9c7e1c6547dea1cf20d8913a8f67c886258 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 30 May 2025 21:49:00 -0400 Subject: [PATCH 45/83] updates --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/solanaUtils.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 897b8865..51dd01ee 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.767", + "version": "1.0.769", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index b2cec155..0e752a47 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -393,7 +393,7 @@ async function spamSendTransactionUntilConfirmed( try { const txSignature = await connection.sendRawTransaction( Buffer.from(transaction.serialize()), - { skipPreflight: true, maxRetries: 0 } + { skipPreflight: true, maxRetries: 3 } ); if (!transactionSignature) { transactionSignature = txSignature; @@ -409,7 +409,7 @@ async function spamSendTransactionUntilConfirmed( }, spamInterval); if (!transactionSignature) { - throw new Error("Failed to send"); + throw new Error("No transaction signature found"); } const resp = await connection From 8356c77abedecb28b817e9c3331f43221be4708a Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 2 Jun 2025 22:43:20 -0400 Subject: [PATCH 46/83] fixes --- solauto-sdk/package.json | 2 +- solauto-sdk/src/services/swap/jupSwapManager.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 51dd01ee..1d012e94 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.769", + "version": "1.0.770", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/swap/jupSwapManager.ts b/solauto-sdk/src/services/swap/jupSwapManager.ts index 6ca7e97d..f81ae776 100644 --- a/solauto-sdk/src/services/swap/jupSwapManager.ts +++ b/solauto-sdk/src/services/swap/jupSwapManager.ts @@ -80,6 +80,7 @@ export class JupSwapManager { !data.exactOut && this.limitSize ? (lowLiquidityMint ? 25 : 15) + attemptNum * 5 : undefined, + excludeDexes: ["obric"], }), 6, 250 @@ -159,6 +160,7 @@ export class JupSwapManager { this.adaptSlippageToPriceImpact(data.slippageIncFactor); } consoleLog("Quote:", this.jupQuote); + consoleLog("route plan", this.jupQuote.routePlan); const instructions = await this.getJupInstructions(data); From c6a1f7e9c583f4cdd3d08e27c424d1c359dc9800 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 5 Jun 2025 01:51:24 -0400 Subject: [PATCH 47/83] filter obric out --- solauto-sdk/package.json | 2 +- solauto-sdk/src/services/swap/jupSwapManager.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 1d012e94..66ffcb91 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.770", + "version": "1.0.771", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/swap/jupSwapManager.ts b/solauto-sdk/src/services/swap/jupSwapManager.ts index f81ae776..e2b4e659 100644 --- a/solauto-sdk/src/services/swap/jupSwapManager.ts +++ b/solauto-sdk/src/services/swap/jupSwapManager.ts @@ -80,7 +80,7 @@ export class JupSwapManager { !data.exactOut && this.limitSize ? (lowLiquidityMint ? 25 : 15) + attemptNum * 5 : undefined, - excludeDexes: ["obric"], + excludeDexes: ["Obric V2"], }), 6, 250 From 374e1f9825ec0cde17c126ec4b14413519cbf4bf Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 6 Jun 2025 17:34:38 -0400 Subject: [PATCH 48/83] get rid of patch lut --- solauto-sdk/local/patchLUT.ts | 3 +-- solauto-sdk/src/constants/solautoConstants.ts | 12 ------------ solauto-sdk/src/services/solauto/solautoClient.ts | 12 +----------- 3 files changed, 2 insertions(+), 25 deletions(-) diff --git a/solauto-sdk/local/patchLUT.ts b/solauto-sdk/local/patchLUT.ts index 14c8cc3d..63d73b08 100644 --- a/solauto-sdk/local/patchLUT.ts +++ b/solauto-sdk/local/patchLUT.ts @@ -10,7 +10,6 @@ import { getSolautoManagedPositions, getTokenAccount, LOCAL_IRONFORGE_API_URL, - PATCH_LUT, SOLAUTO_PROD_PROGRAM, } from "../src"; import { PublicKey } from "@solana/web3.js"; @@ -93,5 +92,5 @@ async function getMissingAccounts() { } getMissingAccounts().then(async (accs) => { - await updateLookupTable(accs, new PublicKey(PATCH_LUT)); + // await updateLookupTable(accs, new PublicKey(PATCH_LUT)); }); diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index 338fd833..9f6af971 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -65,15 +65,3 @@ export const STANDARD_LUT_ACCOUNTS = [ SYSVAR_INSTRUCTIONS_PUBKEY, JUPITER_PROGRAM_ID, ].map((x) => x.toString()); - -// TODO: remove me -export const PATCH_LUT = "CmPZfu3tkeoMutytxhVKT7Hemuwd5jM65VdLNGdBddxQ"; -export const AUTHORITIES_REQUIRING_PATCH_LUT = [ - 'BRgwGasCSz1zA4yqdcvurAGV7ZroAJ9bvDNvdYj7az4X', - '5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe', - 'HLDgPtVv2Yyzzze462P89igFnyLxaCM3f9hVFmCuAX97', - 'C4cnE5kDRRnqfiLuWShvoGNDstq6yk91N2PWTxQ6Hmk2', - '8Vo5ScTZ1qNTYhMEibq2fekRe5DotmdqpcD2nprmRzJg', - 'F2uk8zsKMex8MztU7saFNq6tNbj4esWnKLJXyfo2egax', - '9PCRbk8Gvt2zqewLKbxaSyTxA2JMtdQGhMff8EdELXNq' -]; diff --git a/solauto-sdk/src/services/solauto/solautoClient.ts b/solauto-sdk/src/services/solauto/solautoClient.ts index 364428db..074ec385 100644 --- a/solauto-sdk/src/services/solauto/solautoClient.ts +++ b/solauto-sdk/src/services/solauto/solautoClient.ts @@ -29,12 +29,7 @@ import { splTokenTransferUmiIx, ContextUpdates, } from "../../utils"; -import { - AUTHORITIES_REQUIRING_PATCH_LUT, - PATCH_LUT, - SOLAUTO_FEES_WALLET, - SOLAUTO_LUT, -} from "../../constants"; +import { SOLAUTO_FEES_WALLET, SOLAUTO_LUT } from "../../constants"; import { ProgramEnv, RebalanceDetails } from "../../types"; import { ReferralStateManager, @@ -226,11 +221,6 @@ export abstract class SolautoClient extends ReferralStateManager { ...(this.authorityLutAddress ? [this.authorityLutAddress.toString()] : []), - ...(AUTHORITIES_REQUIRING_PATCH_LUT.includes( - this.pos.authority.toString() - ) - ? [PATCH_LUT] - : []), ]; } From b9e81e93f730f52732a85da1dca2f30ec8c19069 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 6 Jun 2025 19:59:52 -0400 Subject: [PATCH 49/83] bump api version --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/solanaUtils.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 66ffcb91..47988421 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.771", + "version": "1.0.772", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index 0e752a47..6fe31bc5 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -331,6 +331,7 @@ export async function getQnComputeUnitPriceEstimate( return await customRpcCall(umi, "qn_estimatePriorityFees", { last_n_blocks: blockheight, account: programId.toString(), + api_version: 2 }); } From 7a6d9a5353cc81b4b5c81fb9d5a5ac99fbe87a60 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 9 Jun 2025 19:28:14 -0400 Subject: [PATCH 50/83] bump --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/generalUtils.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 47988421..435b4b24 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.772", + "version": "1.0.773", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/generalUtils.ts b/solauto-sdk/src/utils/generalUtils.ts index 02b87fbc..8623faca 100644 --- a/solauto-sdk/src/utils/generalUtils.ts +++ b/solauto-sdk/src/utils/generalUtils.ts @@ -186,6 +186,9 @@ export async function customRpcCall(umi: Umi, method: string, params?: any) { if ("result" in data) { return data.result; } else { + if ("error" in data) { + console.log(JSON.stringify(data.error)); + } return data; } } From 5edcdda03d7da5bf59ad82e0b5d06dd8bafbe181 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 11 Jun 2025 13:28:57 -0400 Subject: [PATCH 51/83] fix price bias --- .../src/services/rebalance/rebalanceValues.ts | 4 +-- .../marginfiSolautoPositionEx.ts | 20 ++++++++++++--- .../src/solautoPosition/solautoPositionEx.ts | 25 +++++++++++-------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/solauto-sdk/src/services/rebalance/rebalanceValues.ts b/solauto-sdk/src/services/rebalance/rebalanceValues.ts index bd4de076..d188f20f 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceValues.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceValues.ts @@ -132,12 +132,12 @@ function getTargetLiqUtilizationRateBps( } if ( - solautoPosition.liqUtilizationRateBps(PriceType.Realtime) + (bpsDistanceFromRebalance ?? 0) >= + solautoPosition.liqUtilizationRateBps(PriceType.Realtime, true) + (bpsDistanceFromRebalance ?? 0) >= solautoPosition.repayFromBps ) { return solautoPosition.settings!.repayToBps; } else if ( - solautoPosition.liqUtilizationRateBps(priceType) - (bpsDistanceFromRebalance ?? 0) <= + solautoPosition.liqUtilizationRateBps(priceType, true) - (bpsDistanceFromRebalance ?? 0) <= solautoPosition.boostFromBps ) { return solautoPosition.settings!.boostToBps; diff --git a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts index b7d9e6f9..417b0ed9 100644 --- a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts @@ -25,16 +25,28 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx { public supplyBank: Bank | null = null; public debtBank: Bank | null = null; - supplyPrice(priceType?: PriceType): number | undefined { + supplyPrice( + priceType?: PriceType, + withoutBias?: boolean + ): number | undefined { return ( this._supplyPrice ?? - safeGetPrice(this.supplyMint, priceType, PriceBias.Low) + safeGetPrice( + this.supplyMint, + priceType, + !withoutBias ? PriceBias.Low : undefined + ) ); } - debtPrice(priceType?: PriceType): number | undefined { + debtPrice(priceType?: PriceType, withoutBias?: boolean): number | undefined { return ( - this._debtPrice ?? safeGetPrice(this.debtMint, priceType, PriceBias.High) + this._debtPrice ?? + safeGetPrice( + this.debtMint, + priceType, + !withoutBias ? PriceBias.High : undefined + ) ); } diff --git a/solauto-sdk/src/solautoPosition/solautoPositionEx.ts b/solauto-sdk/src/solautoPosition/solautoPositionEx.ts index 1d651ada..76c40009 100644 --- a/solauto-sdk/src/solautoPosition/solautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/solautoPositionEx.ts @@ -146,10 +146,10 @@ export abstract class SolautoPositionEx { ); } - liqUtilizationRateBps(priceType?: PriceType): number { + liqUtilizationRateBps(priceType?: PriceType, withoutBias?: boolean): number { return getLiqUtilzationRateBps( - this.supplyUsd(priceType), - this.debtUsd(priceType), + this.supplyUsd(priceType, withoutBias), + this.debtUsd(priceType, withoutBias), this.state.liqThresholdBps ); } @@ -229,14 +229,14 @@ export abstract class SolautoPositionEx { return calcTotalSupply(this.state); } - supplyUsd(priceType?: PriceType) { - const supplyPrice = this.supplyPrice(priceType); + supplyUsd(priceType?: PriceType, withoutBias?: boolean) { + const supplyPrice = this.supplyPrice(priceType, withoutBias); return supplyPrice ? calcTotalSupply(this.state) * supplyPrice : calcSupplyUsd(this.state); } - supplyPrice(priceType?: PriceType) { + supplyPrice(priceType?: PriceType, withoutBias?: boolean) { return this._supplyPrice ?? safeGetPrice(this.supplyMint, priceType); } @@ -244,14 +244,14 @@ export abstract class SolautoPositionEx { return calcTotalDebt(this.state); } - debtUsd(priceType?: PriceType) { - const debtPrice = this.debtPrice(priceType); + debtUsd(priceType?: PriceType, withoutBias?: boolean) { + const debtPrice = this.debtPrice(priceType, withoutBias); return debtPrice ? calcTotalDebt(this.state) * debtPrice : calcDebtUsd(this.state); } - debtPrice(priceType?: PriceType) { + debtPrice(priceType?: PriceType, withoutBias?: boolean) { return this._debtPrice ?? safeGetPrice(this.debtMint, priceType); } @@ -495,7 +495,8 @@ class PositionRebalanceHelper { return ( this.validRealtimePricesBoost(debtAdjustmentUsd) || - this.pos.liqUtilizationRateBps(PriceType.Ema) - this.pos.boostFromBps <= + this.pos.liqUtilizationRateBps(PriceType.Ema, true) - + this.pos.boostFromBps <= bpsDistanceThreshold ); } @@ -509,9 +510,11 @@ class PositionRebalanceHelper { } const realtimeLiqUtilRateBps = this.pos.liqUtilizationRateBps( - PriceType.Realtime + PriceType.Realtime, + true ); + console.log(realtimeLiqUtilRateBps, this.pos.boostFromBps); if ( this.pos.repayFromBps - realtimeLiqUtilRateBps <= bpsDistanceThreshold From 7694328538e1ebd7471aa7794ba83b0810c24bf4 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 11 Jun 2025 13:29:30 -0400 Subject: [PATCH 52/83] bump --- solauto-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 435b4b24..48b507b6 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.773", + "version": "1.0.774", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", From 957dd0b8d860504342fd36959ba0a8802c72f526 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 30 Jun 2025 11:58:53 -0400 Subject: [PATCH 53/83] updates --- solauto-sdk/package.json | 2 +- .../transactions/manager/transactionsManager.ts | 4 ++-- .../src/solautoPosition/solautoPositionEx.ts | 1 - solauto-sdk/src/utils/priceUtils.ts | 2 +- solauto-sdk/src/utils/solanaUtils.ts | 13 +++++++++++-- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 48b507b6..29ae30ab 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.774", + "version": "1.0.777", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index c296cadb..b10458b5 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -126,7 +126,7 @@ export class TransactionsManager { ]); for (let j = i; j >= 0; j--) { const tx = txItems[j]; - if ((await newSet.fitsWith(tx))) { + if (await newSet.fitsWith(tx)) { newSet.prepend(tx); i--; } else { @@ -585,7 +585,7 @@ export class TransactionsManager { consoleLog(errorString); if (!errorDetails.canBeIgnored) { - throw error; + throw errorDetails.errorName ? new Error(errorString) : error; } } } diff --git a/solauto-sdk/src/solautoPosition/solautoPositionEx.ts b/solauto-sdk/src/solautoPosition/solautoPositionEx.ts index 76c40009..cbc33a38 100644 --- a/solauto-sdk/src/solautoPosition/solautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/solautoPositionEx.ts @@ -514,7 +514,6 @@ class PositionRebalanceHelper { true ); - console.log(realtimeLiqUtilRateBps, this.pos.boostFromBps); if ( this.pos.repayFromBps - realtimeLiqUtilRateBps <= bpsDistanceThreshold diff --git a/solauto-sdk/src/utils/priceUtils.ts b/solauto-sdk/src/utils/priceUtils.ts index 268b44f4..a967f751 100644 --- a/solauto-sdk/src/utils/priceUtils.ts +++ b/solauto-sdk/src/utils/priceUtils.ts @@ -123,7 +123,7 @@ export async function getPythPrices( return prices; }, 5, - 200 + 250 ); return createRecord( diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index 6fe31bc5..ae9111b8 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -331,7 +331,7 @@ export async function getQnComputeUnitPriceEstimate( return await customRpcCall(umi, "qn_estimatePriorityFees", { last_n_blocks: blockheight, account: programId.toString(), - api_version: 2 + api_version: 2, }); } @@ -403,7 +403,16 @@ async function spamSendTransactionUntilConfirmed( } catch (e) {} }; - await sendTx(); + let i = 0; + while (i < 5) { + await sendTx(); + i++; + if (!transactionSignature) { + await new Promise((resolve) => setTimeout(resolve, 1000)); + } else { + break; + } + } const sendIntervalId = setInterval(async () => { await sendTx(); From c7a0c63667b53c7d6736d8ff53a0d7884325308c Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 30 Jun 2025 12:01:04 -0400 Subject: [PATCH 54/83] updates --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/solanaUtils.ts | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 29ae30ab..77facaf2 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.777", + "version": "1.0.778", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index ae9111b8..8694642c 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -403,21 +403,12 @@ async function spamSendTransactionUntilConfirmed( } catch (e) {} }; - let i = 0; - while (i < 5) { - await sendTx(); - i++; - if (!transactionSignature) { - await new Promise((resolve) => setTimeout(resolve, 1000)); - } else { - break; - } - } - const sendIntervalId = setInterval(async () => { await sendTx(); }, spamInterval); + await new Promise((resolve) => setTimeout(resolve, spamInterval * 4)); + if (!transactionSignature) { throw new Error("No transaction signature found"); } From e31ead324cb50228cba1d8a391ad94a2c5b3cc08 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 30 Jun 2025 16:38:20 -0400 Subject: [PATCH 55/83] upgrade jup price api --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/jupiterUtils.ts | 47 +++++++++++++-------------- solauto-sdk/src/utils/priceUtils.ts | 11 +++++-- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 77facaf2..07651502 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.778", + "version": "1.0.781", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/jupiterUtils.ts b/solauto-sdk/src/utils/jupiterUtils.ts index 48d58115..a620a689 100644 --- a/solauto-sdk/src/utils/jupiterUtils.ts +++ b/solauto-sdk/src/utils/jupiterUtils.ts @@ -1,6 +1,6 @@ import { PublicKey, TransactionInstruction } from "@solana/web3.js"; import { Instruction } from "@jup-ag/api"; -import { retryWithExponentialBackoff } from "./generalUtils"; +import { getBatches, retryWithExponentialBackoff } from "./generalUtils"; export function jupIxToSolanaIx( instruction: Instruction @@ -17,31 +17,28 @@ export function jupIxToSolanaIx( } export async function getJupPriceData(mints: PublicKey[]) { - const data = await retryWithExponentialBackoff(async () => { - const res = await ( - await fetch( - "https://api.jup.ag/price/v2?ids=" + - mints.map((x) => x.toString()).join(",") + - "&showExtraInfo=true" - ) - ).json(); - const result = res.data; - if (!result || result === null || typeof result !== "object") { - throw new Error("Failed to get token prices using Jupiter"); - } + const batches = getBatches(mints, 50); - const trueData: { [key: string]: any } = Object.entries( - result as { [key: string]: any } - ).reduce( - (acc, [key, val]) => - !val?.extraInfo?.quotedPrice?.sellAt - ? { ...acc, [key]: { ...val, price: "0" } } - : { ...acc, [key]: val }, - {} - ); + const results = await Promise.all( + batches.map((batch) => + retryWithExponentialBackoff(async () => { + const res = await ( + await fetch( + "https://lite-api.jup.ag/price/v3?ids=" + + batch.map((x) => x.toString()).join(",") + ) + ).json(); - return trueData; - }, 3); + if (!res || typeof res !== "object") { + throw new Error("Failed to get token prices using Jupiter"); + } - return data; + return res; + }, 4) + ) + ); + + const mergedResults = Object.assign({}, ...results); + + return mergedResults; } diff --git a/solauto-sdk/src/utils/priceUtils.ts b/solauto-sdk/src/utils/priceUtils.ts index a967f751..52058e8f 100644 --- a/solauto-sdk/src/utils/priceUtils.ts +++ b/solauto-sdk/src/utils/priceUtils.ts @@ -212,10 +212,15 @@ export async function getJupTokenPrices( const data = getSortedPriceData(await getJupPriceData(mints), mints); const prices: Record = Object.fromEntries( - Object.entries(data).map(([mint, x]) => [ + mints.map((mint) => [ mint, - x !== null && typeof x === "object" && "price" in x - ? { realtimePrice: parseFloat(x.price as string) } + data !== null && + typeof data === "object" && + typeof data[mint.toString()] === "object" && + "usdPrice" in data[mint.toString()] + ? { + realtimePrice: parseFloat(data[mint.toString()].usdPrice as string), + } : { realtimePrice: 0 }, ]) ); From e25a49a274e4ebd3ec25b6cb79dcdd4f5fdcdc0d Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 30 Jun 2025 20:05:12 -0400 Subject: [PATCH 56/83] fixes --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/jupiterUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 07651502..7093eb24 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.781", + "version": "1.0.782", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/jupiterUtils.ts b/solauto-sdk/src/utils/jupiterUtils.ts index a620a689..90327adc 100644 --- a/solauto-sdk/src/utils/jupiterUtils.ts +++ b/solauto-sdk/src/utils/jupiterUtils.ts @@ -34,7 +34,7 @@ export async function getJupPriceData(mints: PublicKey[]) { } return res; - }, 4) + }, 6, 250) ) ); From 66fce9514ce2f0535cce4c02c100e7499dd8024e Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 7 Jul 2025 15:01:52 -0400 Subject: [PATCH 57/83] bump versions --- pnpm-lock.yaml | 217 +-- solauto-sdk/package.json | 10 +- solauto-sdk/pnpm-lock.yaml | 480 ++--- solauto-sdk/src/idls/switchboard.json | 1949 --------------------- solauto-sdk/src/utils/switchboardUtils.ts | 32 +- 5 files changed, 288 insertions(+), 2400 deletions(-) delete mode 100644 solauto-sdk/src/idls/switchboard.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a9acb1a..312f22c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,12 +34,6 @@ packages: dependencies: regenerator-runtime: 0.14.1 - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} - dependencies: - '@soncodi/signal': 2.0.7 - dev: true - /@common.js/quick-lru@7.0.0: resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} engines: {node: '>=18'} @@ -137,6 +131,11 @@ packages: yargs: 17.7.2 dev: false + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: true + /@js-sdsl/ordered-map@4.4.2: resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} dev: false @@ -526,6 +525,16 @@ packages: typescript: 4.9.5 dev: true + /@solana/codecs-core@2.1.1(typescript@4.9.5): + resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + dependencies: + '@solana/errors': 2.1.1(typescript@4.9.5) + typescript: 4.9.5 + dev: true + /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5): resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} peerDependencies: @@ -575,6 +584,17 @@ packages: typescript: 4.9.5 dev: true + /@solana/codecs-numbers@2.1.1(typescript@4.9.5): + resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + dependencies: + '@solana/codecs-core': 2.1.1(typescript@4.9.5) + '@solana/errors': 2.1.1(typescript@4.9.5) + typescript: 4.9.5 + dev: true + /@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22): resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} peerDependencies: @@ -672,6 +692,18 @@ packages: typescript: 4.9.5 dev: true + /@solana/errors@2.1.1(typescript@4.9.5): + resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + typescript: 4.9.5 + dev: true + /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} peerDependencies: @@ -779,25 +811,6 @@ packages: - utf-8-validate dev: true - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} @@ -964,29 +977,31 @@ packages: - encoding - utf-8-validate - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + /@solana/web3.js@1.98.2(typescript@4.9.5): + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} dependencies: + '@babel/runtime': 7.25.7 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.67 - '@types/node-fetch': 2.6.12 + '@solana/codecs-numbers': 2.1.1(typescript@4.9.5) + agentkeepalive: 4.5.0 bn.js: 5.2.1 - decimal.js: 10.4.3 - typescript: 4.9.5 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.2 + node-fetch: 2.7.0 + rpc-websockets: 9.0.4 + superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate dev: true - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: true - /@sqds/multisig@2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-WOiL7La+RSiJsz7jVO85yhSiiSvNMUthiWuLPeWVOoD6IYa34BEAzanF1RdXRWGglSbRFYCTkyr+Ay1WmXmSRQ==} engines: {node: '>=14'} @@ -1015,28 +1030,6 @@ packages: dependencies: tslib: 2.7.0 - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} - dependencies: - '@solana/web3.js': 1.95.8 - axios: 1.7.8 - big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - utf-8-validate - dev: true - /@switchboard-xyz/common@3.0.12: resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} engines: {node: '>=20'} @@ -1079,25 +1072,26 @@ packages: - utf-8-validate dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} - engines: {node: '>= 18'} + /@switchboard-xyz/common@3.4.1(typescript@4.9.5): + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + engines: {node: '>=20'} dependencies: - '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.95.8 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.7.8 + '@solana/web3.js': 1.98.2(typescript@4.9.5) + axios: 1.10.0 big.js: 6.2.2 - bs58: 5.0.0 - js-yaml: 4.1.0 + bn.js: 5.2.1 + bs58: 6.0.0 + buffer: 6.0.3 + decimal.js: 10.4.3 + js-sha256: 0.11.0 protobufjs: 7.4.0 + yaml: 2.6.1 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate dev: true @@ -1120,6 +1114,25 @@ packages: - utf-8-validate dev: false + /@switchboard-xyz/on-demand@2.8.1(typescript@4.9.5): + resolution: {integrity: sha512-MqUXMuqmYfhjMdFIAyFOvCYr1BeacmA3ZY6Eu2RkHJLG1X3NAKdCHR2Bj13UU/H9P7HrKhse29Sn7QdbSeEp/w==} + engines: {node: '>= 18'} + dependencies: + '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 + '@isaacs/ttlcache': 1.4.1 + '@switchboard-xyz/common': 3.4.1(typescript@4.9.5) + axios: 1.10.0 + bs58: 6.0.0 + buffer: 6.0.3 + js-yaml: 4.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - typescript + - utf-8-validate + dev: true + /@types/bn.js@5.1.6: resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} dependencies: @@ -1131,22 +1144,9 @@ packages: dependencies: '@types/node': 20.16.11 - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: true - /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - /@types/node@18.19.67: - resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -1177,6 +1177,10 @@ packages: '@wallet-standard/base': 1.1.0 dev: false + /@zod/core@0.11.6: + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + dev: true + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1237,6 +1241,16 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + /axios@1.7.8: resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: @@ -1359,6 +1373,11 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + /chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1389,6 +1408,11 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + /commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1397,10 +1421,6 @@ packages: engines: {node: '>= 6'} dev: false - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: true - /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1748,10 +1768,6 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -1995,10 +2011,6 @@ packages: hasBin: true dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2107,6 +2119,12 @@ packages: yargs-parser: 21.1.1 dev: false + /zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + dependencies: + '@zod/core': 0.11.6 + dev: true + file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {directory: solauto-sdk, type: directory} id: file:solauto-sdk @@ -2122,9 +2140,10 @@ packages: '@solana/web3.js': 1.95.8 '@sqds/multisig': 2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) '@switchboard-xyz/common': 3.0.12 - '@switchboard-xyz/on-demand': 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) + '@switchboard-xyz/on-demand': 2.8.1(typescript@4.9.5) '@types/node': 20.16.11 axios: 1.7.8 + big.js: 6.2.2 bs58: 5.0.0 cross-fetch: 4.0.0 dotenv: 16.4.7 diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 7093eb24..75d71aa4 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.782", + "version": "1.0.784", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -12,16 +12,16 @@ "test:unit": "ts-mocha -p ./tsconfig.json -t 1000000 tests/unit/**/*.ts" }, "dependencies": { - "@coral-xyz/anchor": "^0.30.1", + "@coral-xyz/anchor": "=0.31.1", "@jup-ag/api": "=6.0.24", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", "@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.1", "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "=1.95.8", - "@switchboard-xyz/common": "=3.0.12", - "@switchboard-xyz/on-demand": "=1.2.51", + "@solana/web3.js": "=1.98.2", + "@switchboard-xyz/common": "=3.4.1", + "@switchboard-xyz/on-demand": "=2.11.0", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 5003c773..4d59ae42 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1 + specifier: '=0.31.1' + version: 0.31.1(typescript@5.6.3) '@jup-ag/api': specifier: '=6.0.24' version: 6.0.24 @@ -16,25 +16,25 @@ dependencies: version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-signer-wallet-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@solana/spl-token': specifier: ^0.4.0 - version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + version: 0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/web3.js': - specifier: '=1.95.8' - version: 1.95.8 + specifier: '=1.98.2' + version: 1.98.2(typescript@5.6.3) '@switchboard-xyz/common': - specifier: '=3.0.12' - version: 3.0.12 + specifier: '=3.4.1' + version: 3.4.1(typescript@5.6.3) '@switchboard-xyz/on-demand': - specifier: '=1.2.51' - version: 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) + specifier: '=2.11.0' + version: 2.11.0(typescript@5.6.3) axios: specifier: ^1.7.8 version: 1.7.8 @@ -89,58 +89,56 @@ packages: regenerator-runtime: 0.14.1 dev: false - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} - dependencies: - '@soncodi/signal': 2.0.7 - dev: false - - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + /@coral-xyz/anchor-errors@0.31.1: + resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} engines: {node: '>=10'} dev: false - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} + /@coral-xyz/anchor@0.31.1(typescript@5.6.3): + resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} + engines: {node: '>=17'} dependencies: - '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8) + '@coral-xyz/anchor-errors': 0.31.1 + '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.2) '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 cross-fetch: 3.1.8 - crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 - snake-case: 3.0.4 superstruct: 0.15.5 toml: 3.0.0 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate dev: false - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + /@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.2): + resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} engines: {node: '>=10'} peerDependencies: - '@solana/web3.js': ^1.68.0 + '@solana/web3.js': ^1.69.0 dependencies: - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: false + /@jup-ag/api@6.0.24: resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} dev: false - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 @@ -148,14 +146,14 @@ packages: dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) transitivePeerDependencies: - encoding dev: false @@ -168,16 +166,16 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -217,15 +215,15 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -262,36 +260,36 @@ packages: '@metaplex-foundation/umi-serializers-numbers': 0.8.9 dev: false - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) buffer: 6.0.3 dev: false @@ -358,17 +356,18 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@solana/buffer-layout-utils@0.2.0: + /@solana/buffer-layout-utils@0.2.0(typescript@5.6.3): resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate dev: false @@ -388,21 +387,22 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): + /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + typescript: 5.6.3 dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + /@solana/codecs-core@2.1.1(typescript@5.6.3): + resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + '@solana/errors': 2.1.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -417,17 +417,6 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -449,23 +438,24 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): + /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + typescript: 5.6.3 dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + /@solana/codecs-numbers@2.1.1(typescript@5.6.3): + resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + '@solana/codecs-core': 2.1.1(typescript@5.6.3) + '@solana/errors': 2.1.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -482,19 +472,6 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.9.5 - dev: false - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -523,21 +500,6 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -564,7 +526,7 @@ packages: typescript: 5.6.3 dev: false - /@solana/errors@2.0.0-rc.1(typescript@4.9.5): + /@solana/errors@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true peerDependencies: @@ -572,17 +534,18 @@ packages: dependencies: chalk: 5.3.0 commander: 12.1.0 - typescript: 4.9.5 + typescript: 5.6.3 dev: false - /@solana/errors@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + /@solana/errors@2.1.1(typescript@5.6.3): + resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} + engines: {node: '>=20.18.0'} hasBin: true peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' dependencies: - chalk: 5.3.0 - commander: 12.1.0 + chalk: 5.4.1 + commander: 13.1.0 typescript: 5.6.3 dev: false @@ -601,21 +564,6 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -631,7 +579,7 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} peerDependencies: @@ -639,13 +587,13 @@ packages: dependencies: '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} engines: {node: '>=16'} peerDependencies: @@ -653,56 +601,23 @@ packages: dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 - dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.0 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: false - - /@solana/spl-token@0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: false - - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token@0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.94.0 dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(typescript@5.6.3) + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/web3.js': 1.98.2(typescript@5.6.3) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -719,39 +634,15 @@ packages: buffer: 6.0.3 dev: false - /@solana/web3.js@1.95.8: - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} - dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /@solana/web3.js@1.98.0: - resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + /@solana/web3.js@1.98.2(typescript@5.6.3): + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} dependencies: '@babel/runtime': 7.25.7 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.1.1(typescript@5.6.3) agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 bn.js: 5.2.1 borsh: 0.7.0 bs58: 4.0.1 @@ -764,66 +655,22 @@ packages: transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate dev: false - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.65 - '@types/node-fetch': 2.6.12 - bn.js: 5.2.1 - decimal.js: 10.4.3 - typescript: 4.9.5 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - utf-8-validate - dev: false - - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: false - /@swc/helpers@0.5.13: resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} dependencies: tslib: 2.7.0 dev: false - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} - dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 - big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - utf-8-validate - dev: false - - /@switchboard-xyz/common@3.0.12: - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} + /@switchboard-xyz/common@3.4.1(typescript@5.6.3): + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} engines: {node: '>=20'} dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(typescript@5.6.3) + axios: 1.10.0 big.js: 6.2.2 bn.js: 5.2.1 bs58: 6.0.0 @@ -832,33 +679,32 @@ packages: js-sha256: 0.11.0 protobufjs: 7.4.0 yaml: 2.6.1 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + /@switchboard-xyz/on-demand@2.11.0(typescript@5.6.3): + resolution: {integrity: sha512-w4iHyRpvIuv2CT2Bcap6zIdunLYcDBuMUliyJuxmxLD+ch2Lta1QWHAZCsjuBasE2OhSKoTz3MAtapYuCuR2gA==} engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x - dependencies: - '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.98.0 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.8.4 - big.js: 6.2.2 - bs58: 5.0.0 + dependencies: + '@coral-xyz/anchor-31': /@coral-xyz/anchor@0.31.1(typescript@5.6.3) + '@isaacs/ttlcache': 1.4.1 + '@switchboard-xyz/common': 3.4.1(typescript@5.6.3) + axios: 1.10.0 + bs58: 6.0.0 + buffer: 6.0.3 js-yaml: 4.1.0 - protobufjs: 7.4.0 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - debug - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate dev: false @@ -866,12 +712,6 @@ packages: resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} dev: true - /@types/bn.js@5.1.6: - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} - dependencies: - '@types/node': 20.16.11 - dev: false - /@types/chai@4.3.20: resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} dev: true @@ -892,23 +732,10 @@ packages: resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} dev: true - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: false - /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false - /@types/node@18.19.65: - resolution: {integrity: sha512-Ay5BZuO1UkTmVHzZJNvZKw/E+iB3GQABb6kijEz89w2JrfhNA+M/ebp18pfz9Gqe9ywhMC8AA8yC01lZq48J+Q==} - dependencies: - undici-types: 5.26.5 - dev: false - /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -934,6 +761,10 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true + /@zod/core@0.11.6: + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + dev: false + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -990,8 +821,8 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + /axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -1000,8 +831,8 @@ packages: - debug dev: false - /axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + /axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -1161,6 +992,11 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false + /chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -1213,6 +1049,11 @@ packages: engines: {node: '>=18'} dev: false + /commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -1221,10 +1062,6 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: false - /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1241,11 +1078,6 @@ packages: - encoding dev: false - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false - /debug@4.3.3(supports-color@8.1.1): resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -1295,13 +1127,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.7.0 - dev: false - /dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -1580,10 +1405,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -1602,12 +1423,6 @@ packages: get-func-name: 2.0.2 dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 - dev: false - /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -1692,13 +1507,6 @@ packages: hasBin: true dev: true - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.7.0 - dev: false - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -1846,13 +1654,6 @@ packages: randombytes: 2.1.0 dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.7.0 - dev: false - /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -1987,21 +1788,11 @@ packages: engines: {node: '>=4'} dev: true - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false - /typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: false - /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2083,6 +1874,19 @@ packages: utf-8-validate: 5.0.10 dev: false + /ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2131,3 +1935,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + dependencies: + '@zod/core': 0.11.6 + dev: false diff --git a/solauto-sdk/src/idls/switchboard.json b/solauto-sdk/src/idls/switchboard.json deleted file mode 100644 index 6996121a..00000000 --- a/solauto-sdk/src/idls/switchboard.json +++ /dev/null @@ -1,1949 +0,0 @@ -{ - "address": "SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv", - "metadata": { - "name": "sb_on_demand", - "version": "0.1.0", - "spec": "0.1.0", - "description": "Created with Anchor" - }, - "instructions": [ - { - "name": "guardian_quote_verify", - "discriminator": [168, 36, 93, 156, 157, 150, 148, 45], - "accounts": [ - { "name": "guardian", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true, "relations": ["oracle"] }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianQuoteVerifyParams" } } - } - ] - }, - { - "name": "guardian_register", - "discriminator": [159, 76, 53, 117, 219, 29, 116, 135], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianRegisterParams" } } - } - ] - }, - { - "name": "guardian_unregister", - "discriminator": [215, 19, 61, 120, 155, 224, 120, 60], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianUnregisterParams" } } - } - ] - }, - { - "name": "oracle_heartbeat", - "discriminator": [10, 175, 217, 130, 111, 35, 117, 54], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "oracle_signer", "signer": true }, - { - "name": "queue", - "writable": true, - "relations": ["oracle", "gc_node"] - }, - { "name": "gc_node", "writable": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "queue_escrow", "writable": true }, - { - "name": "stake_program", - "address": "SBSTk6t52R89MmCdD739Rdd97HdbTQUFHe41vCX7pTt", - "relations": ["program_state"] - }, - { "name": "delegation_pool", "writable": true }, - { "name": "delegation_group", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleHeartbeatParams" } } - } - ] - }, - { - "name": "oracle_init", - "discriminator": [21, 158, 66, 65, 60, 221, 148, 61], - "accounts": [ - { "name": "oracle", "writable": true, "signer": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool", "relations": ["program_state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleInitParams" } } - } - ] - }, - { - "name": "oracle_set_configs", - "discriminator": [129, 111, 223, 4, 191, 188, 70, 180], - "accounts": [ - { "name": "oracle" }, - { "name": "authority", "signer": true, "relations": ["oracle"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleSetConfigsParams" } } - } - ] - }, - { - "name": "oracle_update_delegation", - "discriminator": [46, 198, 113, 223, 160, 189, 118, 90], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "queue", "relations": ["oracle"] }, - { "name": "authority", "signer": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "delegation_pool", "writable": true }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "switch_mint" }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "wsol_vault", "writable": true }, - { "name": "switch_vault", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" }, - { "name": "delegation_group" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleUpdateDelegationParams" } } - } - ] - }, - { - "name": "permission_set", - "discriminator": [211, 122, 185, 120, 129, 182, 55, 103], - "accounts": [ - { "name": "authority", "signer": true }, - { "name": "granter" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PermissionSetParams" } } - } - ] - }, - { - "name": "pull_feed_close", - "discriminator": [19, 134, 50, 142, 177, 215, 196, 83], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "reward_escrow", "writable": true }, - { "name": "lut", "writable": true }, - { "name": "lut_signer" }, - { "name": "payer", "writable": true, "signer": true }, - { "name": "state" }, - { - "name": "authority", - "writable": true, - "signer": true, - "relations": ["pull_feed"] - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedCloseParams" } } - } - ] - }, - { - "name": "pull_feed_init", - "discriminator": [198, 130, 53, 198, 235, 61, 143, 40], - "accounts": [ - { "name": "pull_feed", "writable": true, "signer": true }, - { "name": "queue" }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "pull_feed" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedInitParams" } } - } - ] - }, - { - "name": "pull_feed_set_configs", - "discriminator": [217, 45, 11, 246, 64, 26, 82, 168], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "authority", "signer": true, "relations": ["pull_feed"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSetConfigsParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response", - "discriminator": [150, 22, 215, 166, 143, 93, 48, 137], - "accounts": [ - { "name": "feed", "writable": true }, - { "name": "queue", "relations": ["feed"] }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response_many", - "discriminator": [47, 156, 45, 25, 200, 71, 37, 215], - "accounts": [ - { "name": "queue" }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseManyParams" } } - } - ] - }, - { - "name": "queue_add_mr_enclave", - "discriminator": [199, 255, 81, 50, 60, 133, 171, 138], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAddMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_allow_subsidies", - "discriminator": [94, 203, 82, 157, 188, 138, 202, 108], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "state", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAllowSubsidiesParams" } } - } - ] - }, - { - "name": "queue_garbage_collect", - "discriminator": [187, 208, 104, 247, 16, 91, 96, 98], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueGarbageCollectParams" } } - } - ] - }, - { - "name": "queue_init", - "discriminator": [144, 18, 99, 145, 133, 27, 207, 13], - "accounts": [ - { "name": "queue", "writable": true, "signer": true }, - { - "name": "queue_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "queue" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "native_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer", "writable": true }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitParams" } } - } - ] - }, - { - "name": "queue_init_delegation_group", - "discriminator": [239, 146, 75, 158, 20, 166, 159, 14], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "delegation_group", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitDelegationGroupParams" } } - } - ] - }, - { - "name": "queue_remove_mr_enclave", - "discriminator": [3, 64, 135, 33, 190, 133, 68, 252], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueRemoveMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_set_configs", - "discriminator": [54, 183, 243, 199, 49, 103, 142, 48], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueSetConfigsParams" } } - } - ] - }, - { - "name": "randomness_commit", - "discriminator": [52, 170, 152, 201, 179, 133, 242, 141], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "queue", "relations": ["randomness", "oracle"] }, - { "name": "oracle", "writable": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "authority", "signer": true, "relations": ["randomness"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessCommitParams" } } - } - ] - }, - { - "name": "randomness_init", - "discriminator": [9, 9, 204, 33, 50, 116, 113, 15], - "accounts": [ - { "name": "randomness", "writable": true, "signer": true }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "randomness" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority", "signer": true }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessInitParams" } } - } - ] - }, - { - "name": "randomness_reveal", - "discriminator": [197, 181, 187, 10, 30, 58, 20, 73], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "oracle", "relations": ["randomness"] }, - { "name": "queue", "relations": ["oracle"] }, - { - "name": "stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110, - 101, 115, 115, 83, 116, 97, 116, 115 - ] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "authority", "signer": true, "relations": ["randomness"] }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_escrow", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessRevealParams" } } - } - ] - }, - { - "name": "state_init", - "discriminator": [103, 241, 106, 190, 217, 153, 87, 105], - "accounts": [ - { - "name": "state", - "writable": true, - "pda": { - "seeds": [{ "kind": "const", "value": [83, 84, 65, 84, 69] }] - } - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateInitParams" } } - } - ] - }, - { - "name": "state_set_configs", - "discriminator": [40, 98, 76, 37, 206, 9, 47, 144], - "accounts": [ - { "name": "state", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateSetConfigsParams" } } - } - ] - } - ], - "accounts": [ - { - "name": "OracleAccountData", - "discriminator": [128, 30, 16, 241, 170, 73, 55, 54] - }, - { - "name": "OracleStatsAccountData", - "discriminator": [180, 157, 178, 234, 240, 27, 152, 179] - }, - { - "name": "PullFeedAccountData", - "discriminator": [196, 27, 108, 196, 10, 215, 219, 40] - }, - { - "name": "QueueAccountData", - "discriminator": [217, 194, 55, 127, 184, 83, 138, 1] - }, - { - "name": "RandomnessAccountData", - "discriminator": [10, 66, 229, 135, 220, 239, 217, 114] - }, - { "name": "State", "discriminator": [216, 146, 107, 94, 104, 75, 182, 177] } - ], - "events": [ - { - "name": "CostWhitelistEvent", - "discriminator": [56, 107, 191, 127, 116, 6, 138, 149] - }, - { - "name": "GarbageCollectionEvent", - "discriminator": [232, 235, 2, 188, 8, 143, 145, 237] - }, - { - "name": "GuardianQuoteVerifyEvent", - "discriminator": [31, 37, 39, 6, 214, 186, 33, 115] - }, - { - "name": "OracleHeartbeatEvent", - "discriminator": [52, 29, 166, 2, 94, 7, 188, 13] - }, - { - "name": "OracleInitEvent", - "discriminator": [89, 193, 219, 200, 1, 83, 167, 24] - }, - { - "name": "OracleQuoteOverrideEvent", - "discriminator": [78, 204, 191, 210, 164, 196, 244, 65] - }, - { - "name": "OracleQuoteRotateEvent", - "discriminator": [26, 189, 196, 192, 225, 127, 26, 228] - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "discriminator": [203, 209, 79, 0, 20, 71, 226, 202] - }, - { - "name": "PermissionSetEvent", - "discriminator": [148, 86, 123, 0, 102, 20, 119, 206] - }, - { - "name": "PullFeedErrorValueEvent", - "discriminator": [225, 80, 192, 95, 14, 12, 83, 192] - }, - { - "name": "PullFeedValueEvents", - "discriminator": [86, 7, 231, 28, 122, 161, 117, 69] - }, - { - "name": "QueueAddMrEnclaveEvent", - "discriminator": [170, 186, 175, 38, 216, 51, 69, 175] - }, - { - "name": "QueueInitEvent", - "discriminator": [44, 137, 99, 227, 107, 8, 30, 105] - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "discriminator": [4, 105, 196, 60, 84, 122, 203, 196] - }, - { - "name": "RandomnessCommitEvent", - "discriminator": [88, 60, 172, 90, 112, 10, 206, 147] - } - ], - "errors": [ - { "code": 6000, "name": "GenericError" }, - { "code": 6001, "name": "InvalidQuote" }, - { "code": 6002, "name": "InsufficientQueue" }, - { "code": 6003, "name": "QueueFull" }, - { "code": 6004, "name": "InvalidEnclaveSigner" }, - { "code": 6005, "name": "InvalidSigner" }, - { "code": 6006, "name": "MrEnclaveAlreadyExists" }, - { "code": 6007, "name": "MrEnclaveAtCapacity" }, - { "code": 6008, "name": "MrEnclaveDoesntExist" }, - { "code": 6009, "name": "PermissionDenied" }, - { "code": 6010, "name": "InvalidQueue" }, - { "code": 6011, "name": "IncorrectMrEnclave" }, - { "code": 6012, "name": "InvalidAuthority" }, - { "code": 6013, "name": "InvalidMrEnclave" }, - { "code": 6014, "name": "InvalidTimestamp" }, - { "code": 6015, "name": "InvalidOracleIdx" }, - { "code": 6016, "name": "InvalidSecpSignature" }, - { "code": 6017, "name": "InvalidGuardianQueue" }, - { "code": 6018, "name": "InvalidIndex" }, - { "code": 6019, "name": "InvalidOracleQueue" }, - { "code": 6020, "name": "InvalidPermission" }, - { "code": 6021, "name": "InvalidePermissionedAccount" }, - { "code": 6022, "name": "InvalidEpochRotate" }, - { "code": 6023, "name": "InvalidEpochFinalize" }, - { "code": 6024, "name": "InvalidEscrow" }, - { "code": 6025, "name": "IllegalOracle" }, - { "code": 6026, "name": "IllegalExecuteAttempt" }, - { "code": 6027, "name": "IllegalFeedValue" }, - { "code": 6028, "name": "InvalidOracleFeedStats" }, - { "code": 6029, "name": "InvalidStateAuthority" }, - { "code": 6030, "name": "NotEnoughSamples" }, - { "code": 6031, "name": "OracleIsVerified" }, - { "code": 6032, "name": "QueueIsEmpty" }, - { "code": 6033, "name": "SecpRecoverFailure" }, - { "code": 6034, "name": "StaleSample" }, - { "code": 6035, "name": "SwitchboardRandomnessTooOld" }, - { "code": 6036, "name": "EpochIdMismatch" }, - { "code": 6037, "name": "GuardianAlreadyVoted" }, - { "code": 6038, "name": "RandomnessNotRequested" }, - { "code": 6039, "name": "InvalidSlotNumber" }, - { "code": 6040, "name": "RandomnessOracleKeyExpired" }, - { "code": 6041, "name": "InvalidAdvisory" }, - { "code": 6042, "name": "InvalidOracleStats" }, - { "code": 6043, "name": "InvalidStakeProgram" }, - { "code": 6044, "name": "InvalidStakePool" }, - { "code": 6045, "name": "InvalidDelegationPool" }, - { "code": 6046, "name": "UnparsableAccount" }, - { "code": 6047, "name": "InvalidInstruction" }, - { "code": 6048, "name": "OracleAlreadyVerified" }, - { "code": 6049, "name": "GuardianNotVerified" }, - { "code": 6050, "name": "InvalidConstraint" }, - { "code": 6051, "name": "InvalidDelegationGroup" }, - { "code": 6052, "name": "OracleKeyNotFound" }, - { "code": 6053, "name": "GuardianReregisterAttempt" } - ], - "types": [ - { - "name": "CompactResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "f32" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "f32" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - } - ] - } - }, - { - "name": "CostWhitelistEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "CurrentResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "docs": [ - "The median value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "range", - "docs": ["The range of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "min_value", - "docs": [ - "The minimum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "max_value", - "docs": [ - "The maximum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "num_samples", - "docs": ["The number of samples used to calculate this result"], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { - "name": "min_slot", - "docs": [ - "The slot at which the first considered submission was made" - ], - "type": "u64" - }, - { - "name": "max_slot", - "docs": [ - "The slot at which the last considered submission was made" - ], - "type": "u64" - } - ] - } - }, - { - "name": "GarbageCollectionEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "timestamp", "type": "i64" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } }, - { "name": "_reserved1", "type": "u32" }, - { "name": "ed25519_key", "type": "pubkey" }, - { "name": "secp256k1_key", "type": { "array": ["u8", 64] } }, - { "name": "slot", "type": "u64" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "advisories", "type": { "vec": "u32" } } - ] - } - }, - { - "name": "GuardianRegisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "GuardianUnregisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "MegaSlotInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "perf_goal", "type": "i64" }, - { "name": "current_signature_count", "type": "i64" } - ] - } - }, - { - "name": "MultiSubmission", - "type": { - "kind": "struct", - "fields": [ - { "name": "values", "type": { "vec": "i128" } }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" } - ] - } - }, - { - "name": "OracleAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave", - "docs": ["Represents the state of the quote verifiers enclave."], - "type": { "defined": { "name": "Quote" } } - }, - { - "name": "authority", - "docs": [ - "The authority of the EnclaveAccount which is permitted to make account changes." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "Queue used for attestation to verify a MRENCLAVE measurement." - ], - "type": "pubkey" - }, - { - "name": "created_at", - "docs": ["The unix timestamp when the quote was created."], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": ["The last time the quote heartbeated on-chain."], - "type": "i64" - }, - { "name": "secp_authority", "type": { "array": ["u8", 64] } }, - { - "name": "gateway_uri", - "docs": ["URI location of the verifier's gateway."], - "type": { "array": ["u8", 64] } - }, - { "name": "permissions", "type": "u64" }, - { - "name": "is_on_queue", - "docs": [ - "Whether the quote is located on the AttestationQueues buffer." - ], - "type": "u8" - }, - { "name": "_padding1", "type": { "array": ["u8", 7] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "last_reward_epoch", "type": "u64" }, - { "name": "_ebuf4", "type": { "array": ["u8", 16] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 1024] } } - ] - } - }, - { - "name": "OracleEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "slash_score", "type": "u64" }, - { "name": "reward_score", "type": "u64" }, - { "name": "stake_score", "type": "u64" } - ] - } - }, - { - "name": "OracleHeartbeatEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleHeartbeatParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "gateway_uri", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "recent_slot", "type": "u64" }, - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { - "name": "secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleQuoteOverrideEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleQuoteRotateEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "OracleSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": { "option": "pubkey" } }, - { - "name": "new_secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleStatsAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "owner", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { - "name": "finalized_epoch", - "docs": [ - "The last epoch that has completed. cleared after registered with the", - "staking program." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "current_epoch", - "docs": [ - "The current epoch info being used by the oracle. for stake. Will moved", - "to finalized_epoch as soon as the epoch is over." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "mega_slot_info", - "type": { "defined": { "name": "MegaSlotInfo" } } - }, - { "name": "last_transfer_slot", "type": "u64" }, - { "name": "bump", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "_ebuf", - "docs": ["Reserved."], - "type": { "array": ["u8", 1024] } - } - ] - } - }, - { - "name": "OracleSubmission", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "oracle", - "docs": ["The public key of the oracle that submitted this value."], - "type": "pubkey" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { "name": "padding1", "type": { "array": ["u8", 8] } }, - { - "name": "value", - "docs": ["The value that was submitted."], - "type": "i128" - } - ] - } - }, - { - "name": "OracleUpdateDelegationParams", - "type": { - "kind": "struct", - "fields": [{ "name": "_reserved1", "type": "u64" }] - } - }, - { - "name": "PermissionSetEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "permission", "type": "pubkey" }] - } - }, - { - "name": "PermissionSetParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "permission", "type": "u8" }, - { "name": "enable", "type": "bool" } - ] - } - }, - { - "name": "PullFeedAccountData", - "docs": ["A representation of the data in a pull feed account."], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "submissions", - "docs": ["The oracle submissions for this feed."], - "type": { - "array": [{ "defined": { "name": "OracleSubmission" } }, 32] - } - }, - { - "name": "authority", - "docs": [ - "The public key of the authority that can update the feed hash that", - "this account will use for registering updates." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "The public key of the queue which oracles must be bound to in order to", - "submit data to this feed." - ], - "type": "pubkey" - }, - { - "name": "feed_hash", - "docs": [ - "SHA-256 hash of the job schema oracles will execute to produce data", - "for this feed." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "initialized_at", - "docs": ["The slot at which this account was initialized."], - "type": "i64" - }, - { "name": "permissions", "type": "u64" }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "padding1", "type": { "array": ["u8", 2] } }, - { "name": "historical_result_idx", "type": "u8" }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "last_update_timestamp", "type": "i64" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_reserved1", "type": { "array": ["u8", 32] } }, - { - "name": "result", - "type": { "defined": { "name": "CurrentResult" } } - }, - { "name": "max_staleness", "type": "u32" }, - { "name": "padding2", "type": { "array": ["u8", 12] } }, - { - "name": "historical_results", - "type": { - "array": [{ "defined": { "name": "CompactResult" } }, 32] - } - }, - { "name": "_ebuf4", "type": { "array": ["u8", 8] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } } - ] - } - }, - { - "name": "PullFeedCloseParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "PullFeedErrorValueEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "PullFeedInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed_hash", "type": { "array": ["u8", 32] } }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "recent_slot", "type": "u64" }, - { "name": "ipfs_hash", "type": { "array": ["u8", 32] } }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "max_staleness", "type": "u32" } - ] - } - }, - { - "name": "PullFeedSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "feed_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "max_variance", "type": { "option": "u64" } }, - { "name": "min_responses", "type": { "option": "u32" } }, - { "name": "name", "type": { "option": { "array": ["u8", 32] } } }, - { - "name": "ipfs_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "min_sample_size", "type": { "option": "u8" } }, - { "name": "max_staleness", "type": { "option": "u32" } } - ] - } - }, - { - "name": "PullFeedSubmitResponseManyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "MultiSubmission" } } } - } - ] - } - }, - { - "name": "PullFeedSubmitResponseParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "Submission" } } } - } - ] - } - }, - { - "name": "PullFeedValueEvents", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "oracles", "type": { "vec": "pubkey" } }, - { "name": "values", "type": { "vec": { "vec": "i128" } } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "QueueAccountData", - "docs": [ - "An Queue represents a round-robin queue of oracle oracles who attest on-chain", - "whether a Switchboard Function was executed within an enclave against an expected set of", - "enclave measurements.", - "", - "For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and", - "wait for an existing oracle to attest their quote. If the oracle's quote matches an expected", - "measurement within the queues mr_enclaves config, it is granted permissions and will start", - "being assigned update requests." - ], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "docs": [ - "The address of the authority which is permitted to add/remove allowed enclave measurements." - ], - "type": "pubkey" - }, - { - "name": "mr_enclaves", - "docs": ["Allowed enclave measurements."], - "type": { "array": [{ "array": ["u8", 32] }, 32] } - }, - { - "name": "oracle_keys", - "docs": [ - "The addresses of the quote oracles who have a valid", - "verification status and have heartbeated on-chain recently." - ], - "type": { "array": ["pubkey", 128] } - }, - { - "name": "max_quote_verification_age", - "docs": [ - "The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain." - ], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": [ - "The unix timestamp when the last quote oracle heartbeated on-chain." - ], - "type": "i64" - }, - { "name": "node_timeout", "type": "i64" }, - { - "name": "oracle_min_stake", - "docs": [ - "The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes." - ], - "type": "u64" - }, - { "name": "allow_authority_override_after", "type": "i64" }, - { - "name": "mr_enclaves_len", - "docs": ["The number of allowed enclave measurements."], - "type": "u32" - }, - { - "name": "oracle_keys_len", - "docs": [ - "The length of valid quote oracles for the given attestation queue." - ], - "type": "u32" - }, - { - "name": "reward", - "docs": [ - "The reward paid to quote oracles for attesting on-chain." - ], - "type": "u32" - }, - { - "name": "curr_idx", - "docs": [ - "Incrementer used to track the current quote oracle permitted to run any available functions." - ], - "type": "u32" - }, - { - "name": "gc_idx", - "docs": [ - "Incrementer used to garbage collect and remove stale quote oracles." - ], - "type": "u32" - }, - { "name": "require_authority_heartbeat_permission", "type": "u8" }, - { "name": "require_authority_verify_permission", "type": "u8" }, - { "name": "require_usage_permissions", "type": "u8" }, - { "name": "signer_bump", "type": "u8" }, - { "name": "mint", "type": "pubkey" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "allow_subsidies", "type": "u8" }, - { - "name": "_ebuf6", - "docs": ["Reserved."], - "type": { "array": ["u8", 23] } - }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueAllowSubsidiesParams", - "type": { - "kind": "struct", - "fields": [{ "name": "allow_subsidies", "type": "u8" }] - } - }, - { - "name": "QueueGarbageCollectParams", - "type": { "kind": "struct", "fields": [{ "name": "idx", "type": "u32" }] } - }, - { - "name": "QueueInitDelegationGroupParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "QueueInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "queue", "type": "pubkey" }] - } - }, - { - "name": "QueueInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "allow_authority_override_after", "type": "u32" }, - { "name": "require_authority_heartbeat_permission", "type": "bool" }, - { "name": "require_usage_permissions", "type": "bool" }, - { "name": "max_quote_verification_age", "type": "u32" }, - { "name": "reward", "type": "u32" }, - { "name": "node_timeout", "type": "u32" }, - { "name": "recent_slot", "type": "u64" } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "reward", "type": { "option": "u32" } }, - { "name": "node_timeout", "type": { "option": "i64" } } - ] - } - }, - { - "name": "Quote", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave_signer", - "docs": ["The address of the signer generated within an enclave."], - "type": "pubkey" - }, - { - "name": "mr_enclave", - "docs": [ - "The quotes MRENCLAVE measurement dictating the contents of the secure enclave." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "verification_status", - "docs": ["The VerificationStatus of the quote."], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "verification_timestamp", - "docs": ["The unix timestamp when the quote was last verified."], - "type": "i64" - }, - { - "name": "valid_until", - "docs": [ - "The unix timestamp when the quotes verification status expires." - ], - "type": "i64" - }, - { - "name": "quote_registry", - "docs": [ - "The off-chain registry where the verifiers quote can be located." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "registry_key", - "docs": [ - "Key to lookup the buffer data on IPFS or an alternative decentralized storage solution." - ], - "type": { "array": ["u8", 64] } - }, - { - "name": "secp256k1_signer", - "docs": [ - "The secp256k1 public key of the enclave signer. Derived from the enclave_signer." - ], - "type": { "array": ["u8", 64] } - }, - { "name": "last_ed25519_signer", "type": "pubkey" }, - { "name": "last_secp256k1_signer", "type": { "array": ["u8", 64] } }, - { "name": "last_rotate_slot", "type": "u64" }, - { "name": "guardian_approvers", "type": { "array": ["pubkey", 64] } }, - { "name": "guardian_approvers_len", "type": "u8" }, - { "name": "padding2", "type": { "array": ["u8", 7] } }, - { "name": "staging_ed25519_signer", "type": "pubkey" }, - { - "name": "staging_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { - "name": "_ebuf4", - "docs": ["Reserved."], - "type": { "array": ["u8", 32] } - }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "RandomnessAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "seed_slothash", "type": { "array": ["u8", 32] } }, - { "name": "seed_slot", "type": "u64" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "reveal_slot", "type": "u64" }, - { "name": "value", "type": { "array": ["u8", 32] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 128] } }, - { - "name": "active_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { "name": "active_secp256k1_expiration", "type": "i64" } - ] - } - }, - { - "name": "RandomnessCommitEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "randomness_account", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "slot", "type": "u64" }, - { "name": "slothash", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "RandomnessCommitParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "RandomnessInitParams", - "type": { - "kind": "struct", - "fields": [{ "name": "recent_slot", "type": "u64" }] - } - }, - { - "name": "RandomnessRevealParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "value", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "State", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "bump", "type": "u8" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 5] } }, - { "name": "authority", "type": "pubkey" }, - { "name": "guardian_queue", "type": "pubkey" }, - { "name": "reserved1", "type": "u64" }, - { "name": "epoch_length", "type": "u64" }, - { - "name": "current_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "next_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "finalized_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "sgx_advisories", "type": { "array": ["u16", 32] } }, - { "name": "advisories_len", "type": "u8" }, - { "name": "padding2", "type": "u8" }, - { "name": "flat_reward_cut_percentage", "type": "u8" }, - { "name": "enable_slashing", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "base_reward", "type": "u32" }, - { "name": "_ebuf6", "type": { "array": ["u8", 28] } }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 512] } }, - { - "name": "cost_whitelist", - "docs": ["Cost whitelist by authority"], - "type": { "array": ["pubkey", 32] } - } - ] - } - }, - { - "name": "StateEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "_reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" } - ] - } - }, - { "name": "StateInitParams", "type": { "kind": "struct", "fields": [] } }, - { - "name": "StateSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": "pubkey" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "add_advisory", "type": "u16" }, - { "name": "rm_advisory", "type": "u16" }, - { "name": "epoch_length", "type": "u32" }, - { "name": "reset_epochs", "type": "bool" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "base_reward", "type": "u32" }, - { "name": "add_cost_wl", "type": "pubkey" }, - { "name": "rm_cost_wl", "type": "pubkey" } - ] - } - }, - { - "name": "Submission", - "type": { - "kind": "struct", - "fields": [ - { "name": "value", "type": "i128" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "offset", "type": "u8" } - ] - } - } - ] -} diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index 7f635d6f..a29ed0a5 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -6,10 +6,9 @@ import { } from "@solana/web3.js"; import { Signer, transactionBuilder } from "@metaplex-foundation/umi"; import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; -import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; +import { AnchorProvider, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; -import switchboardIdl from "../idls/switchboard.json"; import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; import { TransactionItemInputs } from "../types"; import { @@ -18,7 +17,7 @@ import { } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; -export function getPullFeed( +export async function getPullFeed( conn: Connection, mint: PublicKey, wallet?: PublicKey @@ -37,11 +36,12 @@ export function getPullFeed( dummyWallet, AnchorProvider.defaultOptions() ); - const program = new Program(switchboardIdl as Idl, provider); + const { PullFeed, ON_DEMAND_MAINNET_PID } = OnDemand; + const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); - const { PullFeed } = OnDemand; + console.log(new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId).toString()) return new PullFeed( - program, + sbProgram, new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) ); } @@ -51,12 +51,18 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); - const [pullIx, responses] = await retryWithExponentialBackoff( + const feed = await getPullFeed( + conn, + mint, + toWeb3JsPublicKey(signer.publicKey) + ); + const gateway = await feed.fetchGatewayUrl(); + const [pullIxs, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ + gateway: gateway, chain: "solana", - network: "mainnet-beta", + network: "mainnet", }); if (!res[1] || !res[1][0].value) { throw new Error("Unable to fetch Switchboard pull IX"); @@ -67,7 +73,7 @@ export async function buildSwbSubmitResponseTx( 200 ); - if (!pullIx) { + if (!pullIxs || !pullIxs.length) { throw new Error("Unable to fetch SWB crank IX"); } @@ -81,7 +87,9 @@ export async function buildSwbSubmitResponseTx( }; return { - tx: transactionBuilder([getWrappedInstruction(signer, pullIx!)]), + tx: transactionBuilder( + pullIxs.map((x) => getWrappedInstruction(signer, x)) + ), lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), @@ -103,7 +111,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = getPullFeed(conn, mint); + const feed = await getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = From 66bd27790d5653fd45df6a8bcfdfef8008de4d9b Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 9 Jul 2025 10:21:08 -0400 Subject: [PATCH 58/83] Revert "bump versions" This reverts commit 66fce9514ce2f0535cce4c02c100e7499dd8024e. --- pnpm-lock.yaml | 217 ++- solauto-sdk/package.json | 10 +- solauto-sdk/pnpm-lock.yaml | 480 +++-- solauto-sdk/src/idls/switchboard.json | 1949 +++++++++++++++++++++ solauto-sdk/src/utils/switchboardUtils.ts | 32 +- 5 files changed, 2400 insertions(+), 288 deletions(-) create mode 100644 solauto-sdk/src/idls/switchboard.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 312f22c7..4a9acb1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,12 @@ packages: dependencies: regenerator-runtime: 0.14.1 + /@brokerloop/ttlcache@3.2.3: + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + dependencies: + '@soncodi/signal': 2.0.7 + dev: true + /@common.js/quick-lru@7.0.0: resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} engines: {node: '>=18'} @@ -131,11 +137,6 @@ packages: yargs: 17.7.2 dev: false - /@isaacs/ttlcache@1.4.1: - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - dev: true - /@js-sdsl/ordered-map@4.4.2: resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} dev: false @@ -525,16 +526,6 @@ packages: typescript: 4.9.5 dev: true - /@solana/codecs-core@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - dependencies: - '@solana/errors': 2.1.1(typescript@4.9.5) - typescript: 4.9.5 - dev: true - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5): resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} peerDependencies: @@ -584,17 +575,6 @@ packages: typescript: 4.9.5 dev: true - /@solana/codecs-numbers@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - dependencies: - '@solana/codecs-core': 2.1.1(typescript@4.9.5) - '@solana/errors': 2.1.1(typescript@4.9.5) - typescript: 4.9.5 - dev: true - /@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22): resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} peerDependencies: @@ -692,18 +672,6 @@ packages: typescript: 4.9.5 dev: true - /@solana/errors@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - dependencies: - chalk: 5.4.1 - commander: 13.1.0 - typescript: 4.9.5 - dev: true - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} peerDependencies: @@ -811,6 +779,25 @@ packages: - utf-8-validate dev: true + /@solana/spl-token@0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: true + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} @@ -977,31 +964,29 @@ packages: - encoding - utf-8-validate - /@solana/web3.js@1.98.2(typescript@4.9.5): - resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.1.1(typescript@4.9.5) - agentkeepalive: 4.5.0 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8 + '@types/bn.js': 5.1.6 + '@types/node': 18.19.67 + '@types/node-fetch': 2.6.12 bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 + decimal.js: 10.4.3 + typescript: 4.9.5 transitivePeerDependencies: - bufferutil - encoding - - typescript + - fastestsmallesttextencoderdecoder - utf-8-validate dev: true + /@soncodi/signal@2.0.7: + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + dev: true + /@sqds/multisig@2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-WOiL7La+RSiJsz7jVO85yhSiiSvNMUthiWuLPeWVOoD6IYa34BEAzanF1RdXRWGglSbRFYCTkyr+Ay1WmXmSRQ==} engines: {node: '>=14'} @@ -1030,6 +1015,28 @@ packages: dependencies: tslib: 2.7.0 + /@switchboard-xyz/common@2.5.5: + resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} + engines: {node: '>=12'} + dependencies: + '@solana/web3.js': 1.95.8 + axios: 1.7.8 + big.js: 6.2.2 + bn.js: 5.2.1 + bs58: 5.0.0 + cron-validator: 1.3.1 + decimal.js: 10.4.3 + js-sha256: 0.11.0 + lodash: 4.17.21 + protobufjs: 7.4.0 + yaml: 2.6.1 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + dev: true + /@switchboard-xyz/common@3.0.12: resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} engines: {node: '>=20'} @@ -1072,26 +1079,25 @@ packages: - utf-8-validate dev: false - /@switchboard-xyz/common@3.4.1(typescript@4.9.5): - resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} - engines: {node: '>=20'} + /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + engines: {node: '>= 18'} dependencies: - '@solana/web3.js': 1.98.2(typescript@4.9.5) - axios: 1.10.0 + '@brokerloop/ttlcache': 3.2.3 + '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 + '@solana/web3.js': 1.95.8 + '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) + '@switchboard-xyz/common': 2.5.5 + axios: 1.7.8 big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 6.0.0 - buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 + bs58: 5.0.0 + js-yaml: 4.1.0 protobufjs: 7.4.0 - yaml: 2.6.1 - zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding - - typescript + - fastestsmallesttextencoderdecoder - utf-8-validate dev: true @@ -1114,25 +1120,6 @@ packages: - utf-8-validate dev: false - /@switchboard-xyz/on-demand@2.8.1(typescript@4.9.5): - resolution: {integrity: sha512-MqUXMuqmYfhjMdFIAyFOvCYr1BeacmA3ZY6Eu2RkHJLG1X3NAKdCHR2Bj13UU/H9P7HrKhse29Sn7QdbSeEp/w==} - engines: {node: '>= 18'} - dependencies: - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@isaacs/ttlcache': 1.4.1 - '@switchboard-xyz/common': 3.4.1(typescript@4.9.5) - axios: 1.10.0 - bs58: 6.0.0 - buffer: 6.0.3 - js-yaml: 4.1.0 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - typescript - - utf-8-validate - dev: true - /@types/bn.js@5.1.6: resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} dependencies: @@ -1144,9 +1131,22 @@ packages: dependencies: '@types/node': 20.16.11 + /@types/node-fetch@2.6.12: + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + dependencies: + '@types/node': 20.16.11 + form-data: 4.0.1 + dev: true + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + /@types/node@18.19.67: + resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -1177,10 +1177,6 @@ packages: '@wallet-standard/base': 1.1.0 dev: false - /@zod/core@0.11.6: - resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} - dev: true - /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1241,16 +1237,6 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: true - /axios@1.7.8: resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: @@ -1373,11 +1359,6 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1408,11 +1389,6 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - /commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - dev: true - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1421,6 +1397,10 @@ packages: engines: {node: '>= 6'} dev: false + /cron-validator@1.3.1: + resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} + dev: true + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1768,6 +1748,10 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -2011,6 +1995,10 @@ packages: hasBin: true dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2119,12 +2107,6 @@ packages: yargs-parser: 21.1.1 dev: false - /zod@4.0.0-beta.20250505T195954: - resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} - dependencies: - '@zod/core': 0.11.6 - dev: true - file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {directory: solauto-sdk, type: directory} id: file:solauto-sdk @@ -2140,10 +2122,9 @@ packages: '@solana/web3.js': 1.95.8 '@sqds/multisig': 2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) '@switchboard-xyz/common': 3.0.12 - '@switchboard-xyz/on-demand': 2.8.1(typescript@4.9.5) + '@switchboard-xyz/on-demand': 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) '@types/node': 20.16.11 axios: 1.7.8 - big.js: 6.2.2 bs58: 5.0.0 cross-fetch: 4.0.0 dotenv: 16.4.7 diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 75d71aa4..7093eb24 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.784", + "version": "1.0.782", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -12,16 +12,16 @@ "test:unit": "ts-mocha -p ./tsconfig.json -t 1000000 tests/unit/**/*.ts" }, "dependencies": { - "@coral-xyz/anchor": "=0.31.1", + "@coral-xyz/anchor": "^0.30.1", "@jup-ag/api": "=6.0.24", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", "@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.1", "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "=1.98.2", - "@switchboard-xyz/common": "=3.4.1", - "@switchboard-xyz/on-demand": "=2.11.0", + "@solana/web3.js": "=1.95.8", + "@switchboard-xyz/common": "=3.0.12", + "@switchboard-xyz/on-demand": "=1.2.51", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 4d59ae42..5003c773 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@coral-xyz/anchor': - specifier: '=0.31.1' - version: 0.31.1(typescript@5.6.3) + specifier: ^0.30.1 + version: 0.30.1 '@jup-ag/api': specifier: '=6.0.24' version: 6.0.24 @@ -16,25 +16,25 @@ dependencies: version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-signer-wallet-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@solana/spl-token': specifier: ^0.4.0 - version: 0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/web3.js': - specifier: '=1.98.2' - version: 1.98.2(typescript@5.6.3) + specifier: '=1.95.8' + version: 1.95.8 '@switchboard-xyz/common': - specifier: '=3.4.1' - version: 3.4.1(typescript@5.6.3) + specifier: '=3.0.12' + version: 3.0.12 '@switchboard-xyz/on-demand': - specifier: '=2.11.0' - version: 2.11.0(typescript@5.6.3) + specifier: '=1.2.51' + version: 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) axios: specifier: ^1.7.8 version: 1.7.8 @@ -89,56 +89,58 @@ packages: regenerator-runtime: 0.14.1 dev: false - /@coral-xyz/anchor-errors@0.31.1: - resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} + /@brokerloop/ttlcache@3.2.3: + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + dependencies: + '@soncodi/signal': 2.0.7 + dev: false + + /@coral-xyz/anchor-errors@0.30.1: + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} engines: {node: '>=10'} dev: false - /@coral-xyz/anchor@0.31.1(typescript@5.6.3): - resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} - engines: {node: '>=17'} + /@coral-xyz/anchor@0.30.1: + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} dependencies: - '@coral-xyz/anchor-errors': 0.31.1 - '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.2) + '@coral-xyz/anchor-errors': 0.30.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8) '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 cross-fetch: 3.1.8 + crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 + snake-case: 3.0.4 superstruct: 0.15.5 toml: 3.0.0 transitivePeerDependencies: - bufferutil - encoding - - typescript - utf-8-validate dev: false - /@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.2): - resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} + /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8): + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} engines: {node: '>=10'} peerDependencies: - '@solana/web3.js': ^1.69.0 + '@solana/web3.js': ^1.68.0 dependencies: - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false - /@isaacs/ttlcache@1.4.1: - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - dev: false - /@jup-ag/api@6.0.24: resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} dev: false - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 @@ -146,14 +148,14 @@ packages: dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 transitivePeerDependencies: - encoding dev: false @@ -166,16 +168,16 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@noble/curves': 1.6.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 dev: false /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -215,15 +217,15 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 dev: false /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -260,36 +262,36 @@ packages: '@metaplex-foundation/umi-serializers-numbers': 0.8.9 dev: false - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 dev: false - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 dev: false - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 buffer: 6.0.3 dev: false @@ -356,18 +358,17 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@solana/buffer-layout-utils@0.2.0(typescript@5.6.3): + /@solana/buffer-layout-utils@0.2.0: resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: - bufferutil - encoding - - typescript - utf-8-validate dev: false @@ -387,22 +388,21 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): + /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 dev: false - /@solana/codecs-core@2.1.1(typescript@5.6.3): - resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} - engines: {node: '>=20.18.0'} + /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5' dependencies: - '@solana/errors': 2.1.1(typescript@5.6.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -417,6 +417,17 @@ packages: typescript: 5.6.3 dev: false + /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 + dev: false + /@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -438,24 +449,23 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): + /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 dev: false - /@solana/codecs-numbers@2.1.1(typescript@5.6.3): - resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} - engines: {node: '>=20.18.0'} + /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5' dependencies: - '@solana/codecs-core': 2.1.1(typescript@5.6.3) - '@solana/errors': 2.1.1(typescript@5.6.3) + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -472,6 +482,19 @@ packages: typescript: 5.6.3 dev: false + /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 4.9.5 + dev: false + /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -500,6 +523,21 @@ packages: - fastestsmallesttextencoderdecoder dev: false + /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: false + /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -526,7 +564,7 @@ packages: typescript: 5.6.3 dev: false - /@solana/errors@2.0.0-rc.1(typescript@5.6.3): + /@solana/errors@2.0.0-rc.1(typescript@4.9.5): resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true peerDependencies: @@ -534,18 +572,17 @@ packages: dependencies: chalk: 5.3.0 commander: 12.1.0 - typescript: 5.6.3 + typescript: 4.9.5 dev: false - /@solana/errors@2.1.1(typescript@5.6.3): - resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} - engines: {node: '>=20.18.0'} + /@solana/errors@2.0.0-rc.1(typescript@5.6.3): + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5' dependencies: - chalk: 5.4.1 - commander: 13.1.0 + chalk: 5.3.0 + commander: 12.1.0 typescript: 5.6.3 dev: false @@ -564,6 +601,21 @@ packages: - fastestsmallesttextencoderdecoder dev: false + /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: false + /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -579,7 +631,7 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} peerDependencies: @@ -587,13 +639,13 @@ packages: dependencies: '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} engines: {node: '>=16'} peerDependencies: @@ -601,23 +653,56 @@ packages: dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token@0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.98.0 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + dev: false + + /@solana/spl-token@0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.98.0 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: false + + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.94.0 dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(typescript@5.6.3) - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/web3.js': 1.95.8 buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -634,15 +719,15 @@ packages: buffer: 6.0.3 dev: false - /@solana/web3.js@1.98.2(typescript@5.6.3): - resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + /@solana/web3.js@1.95.8: + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} dependencies: '@babel/runtime': 7.25.7 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.1.1(typescript@5.6.3) agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 bn.js: 5.2.1 borsh: 0.7.0 bs58: 4.0.1 @@ -655,22 +740,90 @@ packages: transitivePeerDependencies: - bufferutil - encoding - - typescript - utf-8-validate dev: false + /@solana/web3.js@1.98.0: + resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + dependencies: + '@babel/runtime': 7.25.7 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.2 + node-fetch: 2.7.0 + rpc-websockets: 9.0.4 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.98.0 + '@types/bn.js': 5.1.6 + '@types/node': 18.19.65 + '@types/node-fetch': 2.6.12 + bn.js: 5.2.1 + decimal.js: 10.4.3 + typescript: 4.9.5 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + dev: false + + /@soncodi/signal@2.0.7: + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + dev: false + /@swc/helpers@0.5.13: resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} dependencies: tslib: 2.7.0 dev: false - /@switchboard-xyz/common@3.4.1(typescript@5.6.3): - resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + /@switchboard-xyz/common@2.5.5: + resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} + engines: {node: '>=12'} + dependencies: + '@solana/web3.js': 1.98.0 + axios: 1.8.4 + big.js: 6.2.2 + bn.js: 5.2.1 + bs58: 5.0.0 + cron-validator: 1.3.1 + decimal.js: 10.4.3 + js-sha256: 0.11.0 + lodash: 4.17.21 + protobufjs: 7.4.0 + yaml: 2.6.1 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + dev: false + + /@switchboard-xyz/common@3.0.12: + resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} engines: {node: '>=20'} dependencies: - '@solana/web3.js': 1.98.2(typescript@5.6.3) - axios: 1.10.0 + '@solana/web3.js': 1.98.0 + axios: 1.8.4 big.js: 6.2.2 bn.js: 5.2.1 bs58: 6.0.0 @@ -679,32 +832,33 @@ packages: js-sha256: 0.11.0 protobufjs: 7.4.0 yaml: 2.6.1 - zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding - - typescript - utf-8-validate dev: false - /@switchboard-xyz/on-demand@2.11.0(typescript@5.6.3): - resolution: {integrity: sha512-w4iHyRpvIuv2CT2Bcap6zIdunLYcDBuMUliyJuxmxLD+ch2Lta1QWHAZCsjuBasE2OhSKoTz3MAtapYuCuR2gA==} + /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} engines: {node: '>= 18'} - dependencies: - '@coral-xyz/anchor-31': /@coral-xyz/anchor@0.31.1(typescript@5.6.3) - '@isaacs/ttlcache': 1.4.1 - '@switchboard-xyz/common': 3.4.1(typescript@5.6.3) - axios: 1.10.0 - bs58: 6.0.0 - buffer: 6.0.3 + deprecated: deprecated in favor of 2.x.x + dependencies: + '@brokerloop/ttlcache': 3.2.3 + '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 + '@solana/web3.js': 1.98.0 + '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) + '@switchboard-xyz/common': 2.5.5 + axios: 1.8.4 + big.js: 6.2.2 + bs58: 5.0.0 js-yaml: 4.1.0 - ws: 8.18.3 + protobufjs: 7.4.0 transitivePeerDependencies: - bufferutil - debug - encoding - - typescript + - fastestsmallesttextencoderdecoder - utf-8-validate dev: false @@ -712,6 +866,12 @@ packages: resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} dev: true + /@types/bn.js@5.1.6: + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + dependencies: + '@types/node': 20.16.11 + dev: false + /@types/chai@4.3.20: resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} dev: true @@ -732,10 +892,23 @@ packages: resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} dev: true + /@types/node-fetch@2.6.12: + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + dependencies: + '@types/node': 20.16.11 + form-data: 4.0.1 + dev: false + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false + /@types/node@18.19.65: + resolution: {integrity: sha512-Ay5BZuO1UkTmVHzZJNvZKw/E+iB3GQABb6kijEz89w2JrfhNA+M/ebp18pfz9Gqe9ywhMC8AA8yC01lZq48J+Q==} + dependencies: + undici-types: 5.26.5 + dev: false + /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -761,10 +934,6 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true - /@zod/core@0.11.6: - resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} - dev: false - /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -821,8 +990,8 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + /axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -831,8 +1000,8 @@ packages: - debug dev: false - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + /axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -992,11 +1161,6 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false - /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -1049,11 +1213,6 @@ packages: engines: {node: '>=18'} dev: false - /commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -1062,6 +1221,10 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /cron-validator@1.3.1: + resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} + dev: false + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1078,6 +1241,11 @@ packages: - encoding dev: false + /crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + dev: false + /debug@4.3.3(supports-color@8.1.1): resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -1127,6 +1295,13 @@ packages: engines: {node: '>=0.3.1'} dev: true + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.7.0 + dev: false + /dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -1405,6 +1580,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -1423,6 +1602,12 @@ packages: get-func-name: 2.0.2 dev: true + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.7.0 + dev: false + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -1507,6 +1692,13 @@ packages: hasBin: true dev: true + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.7.0 + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -1654,6 +1846,13 @@ packages: randombytes: 2.1.0 dev: true + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.7.0 + dev: false + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -1788,11 +1987,21 @@ packages: engines: {node: '>=4'} dev: true + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false + /typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -1874,19 +2083,6 @@ packages: utf-8-validate: 5.0.10 dev: false - /ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -1935,9 +2131,3 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - - /zod@4.0.0-beta.20250505T195954: - resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} - dependencies: - '@zod/core': 0.11.6 - dev: false diff --git a/solauto-sdk/src/idls/switchboard.json b/solauto-sdk/src/idls/switchboard.json new file mode 100644 index 00000000..6996121a --- /dev/null +++ b/solauto-sdk/src/idls/switchboard.json @@ -0,0 +1,1949 @@ +{ + "address": "SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv", + "metadata": { + "name": "sb_on_demand", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "guardian_quote_verify", + "discriminator": [168, 36, 93, 156, 157, 150, 148, 45], + "accounts": [ + { "name": "guardian", "writable": true }, + { "name": "oracle", "writable": true }, + { "name": "authority", "signer": true, "relations": ["oracle"] }, + { "name": "guardian_queue", "writable": true, "relations": ["state"] }, + { "name": "state" }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "GuardianQuoteVerifyParams" } } + } + ] + }, + { + "name": "guardian_register", + "discriminator": [159, 76, 53, 117, 219, 29, 116, 135], + "accounts": [ + { "name": "oracle", "writable": true }, + { "name": "state" }, + { "name": "guardian_queue", "relations": ["state"] }, + { "name": "authority", "signer": true, "relations": ["state"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "GuardianRegisterParams" } } + } + ] + }, + { + "name": "guardian_unregister", + "discriminator": [215, 19, 61, 120, 155, 224, 120, 60], + "accounts": [ + { "name": "oracle", "writable": true }, + { "name": "state" }, + { "name": "guardian_queue", "writable": true, "relations": ["state"] }, + { "name": "authority", "signer": true, "relations": ["state"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "GuardianUnregisterParams" } } + } + ] + }, + { + "name": "oracle_heartbeat", + "discriminator": [10, 175, 217, 130, 111, 35, 117, 54], + "accounts": [ + { "name": "oracle", "writable": true }, + { + "name": "oracle_stats", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "oracle_signer", "signer": true }, + { + "name": "queue", + "writable": true, + "relations": ["oracle", "gc_node"] + }, + { "name": "gc_node", "writable": true }, + { "name": "program_state", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "native_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "queue_escrow", "writable": true }, + { + "name": "stake_program", + "address": "SBSTk6t52R89MmCdD739Rdd97HdbTQUFHe41vCX7pTt", + "relations": ["program_state"] + }, + { "name": "delegation_pool", "writable": true }, + { "name": "delegation_group", "writable": true } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleHeartbeatParams" } } + } + ] + }, + { + "name": "oracle_init", + "discriminator": [21, 158, 66, 65, 60, 221, 148, 61], + "accounts": [ + { "name": "oracle", "writable": true, "signer": true }, + { + "name": "oracle_stats", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "program_state", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { "name": "stake_program", "relations": ["program_state"] }, + { "name": "stake_pool", "relations": ["program_state"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleInitParams" } } + } + ] + }, + { + "name": "oracle_set_configs", + "discriminator": [129, 111, 223, 4, 191, 188, 70, 180], + "accounts": [ + { "name": "oracle" }, + { "name": "authority", "signer": true, "relations": ["oracle"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleSetConfigsParams" } } + } + ] + }, + { + "name": "oracle_update_delegation", + "discriminator": [46, 198, 113, 223, 160, 189, 118, 90], + "accounts": [ + { "name": "oracle", "writable": true }, + { + "name": "oracle_stats", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "queue", "relations": ["oracle"] }, + { "name": "authority", "signer": true }, + { "name": "program_state", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { "name": "delegation_pool", "writable": true }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { "name": "switch_mint" }, + { + "name": "native_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "wsol_vault", "writable": true }, + { "name": "switch_vault", "writable": true }, + { "name": "stake_program", "relations": ["program_state"] }, + { "name": "stake_pool" }, + { "name": "delegation_group" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleUpdateDelegationParams" } } + } + ] + }, + { + "name": "permission_set", + "discriminator": [211, 122, 185, 120, 129, 182, 55, 103], + "accounts": [ + { "name": "authority", "signer": true }, + { "name": "granter" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PermissionSetParams" } } + } + ] + }, + { + "name": "pull_feed_close", + "discriminator": [19, 134, 50, 142, 177, 215, 196, 83], + "accounts": [ + { "name": "pull_feed", "writable": true }, + { "name": "reward_escrow", "writable": true }, + { "name": "lut", "writable": true }, + { "name": "lut_signer" }, + { "name": "payer", "writable": true, "signer": true }, + { "name": "state" }, + { + "name": "authority", + "writable": true, + "signer": true, + "relations": ["pull_feed"] + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedCloseParams" } } + } + ] + }, + { + "name": "pull_feed_init", + "discriminator": [198, 130, 53, 198, 235, 61, 143, 40], + "accounts": [ + { "name": "pull_feed", "writable": true, "signer": true }, + { "name": "queue" }, + { "name": "authority" }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "program_state" }, + { + "name": "reward_escrow", + "writable": true, + "pda": { + "seeds": [ + { "kind": "account", "path": "pull_feed" }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { "kind": "account", "path": "wrapped_sol_mint" } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "wrapped_sol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedInitParams" } } + } + ] + }, + { + "name": "pull_feed_set_configs", + "discriminator": [217, 45, 11, 246, 64, 26, 82, 168], + "accounts": [ + { "name": "pull_feed", "writable": true }, + { "name": "authority", "signer": true, "relations": ["pull_feed"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedSetConfigsParams" } } + } + ] + }, + { + "name": "pull_feed_submit_response", + "discriminator": [150, 22, 215, 166, 143, 93, 48, 137], + "accounts": [ + { "name": "feed", "writable": true }, + { "name": "queue", "relations": ["feed"] }, + { "name": "program_state" }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "reward_vault", "writable": true }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "token_mint", + "address": "So11111111111111111111111111111111111111112" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedSubmitResponseParams" } } + } + ] + }, + { + "name": "pull_feed_submit_response_many", + "discriminator": [47, 156, 45, 25, 200, 71, 37, 215], + "accounts": [ + { "name": "queue" }, + { "name": "program_state" }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "reward_vault", "writable": true }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "token_mint", + "address": "So11111111111111111111111111111111111111112" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedSubmitResponseManyParams" } } + } + ] + }, + { + "name": "queue_add_mr_enclave", + "discriminator": [199, 255, 81, 50, 60, 133, 171, 138], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "program_authority" }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueAddMrEnclaveParams" } } + } + ] + }, + { + "name": "queue_allow_subsidies", + "discriminator": [94, 203, 82, 157, 188, 138, 202, 108], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true, "relations": ["state"] }, + { "name": "state", "writable": true } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueAllowSubsidiesParams" } } + } + ] + }, + { + "name": "queue_garbage_collect", + "discriminator": [187, 208, 104, 247, 16, 91, 96, 98], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "oracle", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueGarbageCollectParams" } } + } + ] + }, + { + "name": "queue_init", + "discriminator": [144, 18, 99, 145, 133, 27, 207, 13], + "accounts": [ + { "name": "queue", "writable": true, "signer": true }, + { + "name": "queue_escrow", + "writable": true, + "pda": { + "seeds": [ + { "kind": "account", "path": "queue" }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { "kind": "account", "path": "native_mint" } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { "name": "authority" }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "native_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "program_state" }, + { "name": "lut_signer", "writable": true }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueInitParams" } } + } + ] + }, + { + "name": "queue_init_delegation_group", + "discriminator": [239, 146, 75, 158, 20, 166, 159, 14], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "program_state" }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { "name": "delegation_group", "writable": true }, + { "name": "stake_program", "relations": ["program_state"] }, + { "name": "stake_pool" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueInitDelegationGroupParams" } } + } + ] + }, + { + "name": "queue_remove_mr_enclave", + "discriminator": [3, 64, 135, 33, 190, 133, 68, 252], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "program_authority" }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueRemoveMrEnclaveParams" } } + } + ] + }, + { + "name": "queue_set_configs", + "discriminator": [54, 183, 243, 199, 49, 103, 142, 48], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueSetConfigsParams" } } + } + ] + }, + { + "name": "randomness_commit", + "discriminator": [52, 170, 152, 201, 179, 133, 242, 141], + "accounts": [ + { "name": "randomness", "writable": true }, + { "name": "queue", "relations": ["randomness", "oracle"] }, + { "name": "oracle", "writable": true }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { "name": "authority", "signer": true, "relations": ["randomness"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "RandomnessCommitParams" } } + } + ] + }, + { + "name": "randomness_init", + "discriminator": [9, 9, 204, 33, 50, 116, 113, 15], + "accounts": [ + { "name": "randomness", "writable": true, "signer": true }, + { + "name": "reward_escrow", + "writable": true, + "pda": { + "seeds": [ + { "kind": "account", "path": "randomness" }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { "kind": "account", "path": "wrapped_sol_mint" } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { "name": "authority", "signer": true }, + { "name": "queue", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "wrapped_sol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "program_state" }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "RandomnessInitParams" } } + } + ] + }, + { + "name": "randomness_reveal", + "discriminator": [197, 181, 187, 10, 30, 58, 20, 73], + "accounts": [ + { "name": "randomness", "writable": true }, + { "name": "oracle", "relations": ["randomness"] }, + { "name": "queue", "relations": ["oracle"] }, + { + "name": "stats", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110, + 101, 115, 115, 83, 116, 97, 116, 115 + ] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "authority", "signer": true, "relations": ["randomness"] }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "reward_escrow", "writable": true }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "wrapped_sol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "program_state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "RandomnessRevealParams" } } + } + ] + }, + { + "name": "state_init", + "discriminator": [103, 241, 106, 190, 217, 153, 87, 105], + "accounts": [ + { + "name": "state", + "writable": true, + "pda": { + "seeds": [{ "kind": "const", "value": [83, 84, 65, 84, 69] }] + } + }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "StateInitParams" } } + } + ] + }, + { + "name": "state_set_configs", + "discriminator": [40, 98, 76, 37, 206, 9, 47, 144], + "accounts": [ + { "name": "state", "writable": true }, + { "name": "authority", "signer": true, "relations": ["state"] }, + { "name": "queue", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "StateSetConfigsParams" } } + } + ] + } + ], + "accounts": [ + { + "name": "OracleAccountData", + "discriminator": [128, 30, 16, 241, 170, 73, 55, 54] + }, + { + "name": "OracleStatsAccountData", + "discriminator": [180, 157, 178, 234, 240, 27, 152, 179] + }, + { + "name": "PullFeedAccountData", + "discriminator": [196, 27, 108, 196, 10, 215, 219, 40] + }, + { + "name": "QueueAccountData", + "discriminator": [217, 194, 55, 127, 184, 83, 138, 1] + }, + { + "name": "RandomnessAccountData", + "discriminator": [10, 66, 229, 135, 220, 239, 217, 114] + }, + { "name": "State", "discriminator": [216, 146, 107, 94, 104, 75, 182, 177] } + ], + "events": [ + { + "name": "CostWhitelistEvent", + "discriminator": [56, 107, 191, 127, 116, 6, 138, 149] + }, + { + "name": "GarbageCollectionEvent", + "discriminator": [232, 235, 2, 188, 8, 143, 145, 237] + }, + { + "name": "GuardianQuoteVerifyEvent", + "discriminator": [31, 37, 39, 6, 214, 186, 33, 115] + }, + { + "name": "OracleHeartbeatEvent", + "discriminator": [52, 29, 166, 2, 94, 7, 188, 13] + }, + { + "name": "OracleInitEvent", + "discriminator": [89, 193, 219, 200, 1, 83, 167, 24] + }, + { + "name": "OracleQuoteOverrideEvent", + "discriminator": [78, 204, 191, 210, 164, 196, 244, 65] + }, + { + "name": "OracleQuoteRotateEvent", + "discriminator": [26, 189, 196, 192, 225, 127, 26, 228] + }, + { + "name": "OracleQuoteVerifyRequestEvent", + "discriminator": [203, 209, 79, 0, 20, 71, 226, 202] + }, + { + "name": "PermissionSetEvent", + "discriminator": [148, 86, 123, 0, 102, 20, 119, 206] + }, + { + "name": "PullFeedErrorValueEvent", + "discriminator": [225, 80, 192, 95, 14, 12, 83, 192] + }, + { + "name": "PullFeedValueEvents", + "discriminator": [86, 7, 231, 28, 122, 161, 117, 69] + }, + { + "name": "QueueAddMrEnclaveEvent", + "discriminator": [170, 186, 175, 38, 216, 51, 69, 175] + }, + { + "name": "QueueInitEvent", + "discriminator": [44, 137, 99, 227, 107, 8, 30, 105] + }, + { + "name": "QueueRemoveMrEnclaveEvent", + "discriminator": [4, 105, 196, 60, 84, 122, 203, 196] + }, + { + "name": "RandomnessCommitEvent", + "discriminator": [88, 60, 172, 90, 112, 10, 206, 147] + } + ], + "errors": [ + { "code": 6000, "name": "GenericError" }, + { "code": 6001, "name": "InvalidQuote" }, + { "code": 6002, "name": "InsufficientQueue" }, + { "code": 6003, "name": "QueueFull" }, + { "code": 6004, "name": "InvalidEnclaveSigner" }, + { "code": 6005, "name": "InvalidSigner" }, + { "code": 6006, "name": "MrEnclaveAlreadyExists" }, + { "code": 6007, "name": "MrEnclaveAtCapacity" }, + { "code": 6008, "name": "MrEnclaveDoesntExist" }, + { "code": 6009, "name": "PermissionDenied" }, + { "code": 6010, "name": "InvalidQueue" }, + { "code": 6011, "name": "IncorrectMrEnclave" }, + { "code": 6012, "name": "InvalidAuthority" }, + { "code": 6013, "name": "InvalidMrEnclave" }, + { "code": 6014, "name": "InvalidTimestamp" }, + { "code": 6015, "name": "InvalidOracleIdx" }, + { "code": 6016, "name": "InvalidSecpSignature" }, + { "code": 6017, "name": "InvalidGuardianQueue" }, + { "code": 6018, "name": "InvalidIndex" }, + { "code": 6019, "name": "InvalidOracleQueue" }, + { "code": 6020, "name": "InvalidPermission" }, + { "code": 6021, "name": "InvalidePermissionedAccount" }, + { "code": 6022, "name": "InvalidEpochRotate" }, + { "code": 6023, "name": "InvalidEpochFinalize" }, + { "code": 6024, "name": "InvalidEscrow" }, + { "code": 6025, "name": "IllegalOracle" }, + { "code": 6026, "name": "IllegalExecuteAttempt" }, + { "code": 6027, "name": "IllegalFeedValue" }, + { "code": 6028, "name": "InvalidOracleFeedStats" }, + { "code": 6029, "name": "InvalidStateAuthority" }, + { "code": 6030, "name": "NotEnoughSamples" }, + { "code": 6031, "name": "OracleIsVerified" }, + { "code": 6032, "name": "QueueIsEmpty" }, + { "code": 6033, "name": "SecpRecoverFailure" }, + { "code": 6034, "name": "StaleSample" }, + { "code": 6035, "name": "SwitchboardRandomnessTooOld" }, + { "code": 6036, "name": "EpochIdMismatch" }, + { "code": 6037, "name": "GuardianAlreadyVoted" }, + { "code": 6038, "name": "RandomnessNotRequested" }, + { "code": 6039, "name": "InvalidSlotNumber" }, + { "code": 6040, "name": "RandomnessOracleKeyExpired" }, + { "code": 6041, "name": "InvalidAdvisory" }, + { "code": 6042, "name": "InvalidOracleStats" }, + { "code": 6043, "name": "InvalidStakeProgram" }, + { "code": 6044, "name": "InvalidStakePool" }, + { "code": 6045, "name": "InvalidDelegationPool" }, + { "code": 6046, "name": "UnparsableAccount" }, + { "code": 6047, "name": "InvalidInstruction" }, + { "code": 6048, "name": "OracleAlreadyVerified" }, + { "code": 6049, "name": "GuardianNotVerified" }, + { "code": 6050, "name": "InvalidConstraint" }, + { "code": 6051, "name": "InvalidDelegationGroup" }, + { "code": 6052, "name": "OracleKeyNotFound" }, + { "code": 6053, "name": "GuardianReregisterAttempt" } + ], + "types": [ + { + "name": "CompactResult", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "std_dev", + "docs": [ + "The standard deviation of the submissions needed for quorom size" + ], + "type": "f32" + }, + { + "name": "mean", + "docs": ["The mean of the submissions needed for quorom size"], + "type": "f32" + }, + { + "name": "slot", + "docs": ["The slot at which this value was signed."], + "type": "u64" + } + ] + } + }, + { + "name": "CostWhitelistEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "feeds", "type": { "vec": "pubkey" } }, + { "name": "reward", "type": "u32" } + ] + } + }, + { + "name": "CurrentResult", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "value", + "docs": [ + "The median value of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "std_dev", + "docs": [ + "The standard deviation of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "mean", + "docs": ["The mean of the submissions needed for quorom size"], + "type": "i128" + }, + { + "name": "range", + "docs": ["The range of the submissions needed for quorom size"], + "type": "i128" + }, + { + "name": "min_value", + "docs": [ + "The minimum value of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "max_value", + "docs": [ + "The maximum value of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "num_samples", + "docs": ["The number of samples used to calculate this result"], + "type": "u8" + }, + { "name": "padding1", "type": { "array": ["u8", 7] } }, + { + "name": "slot", + "docs": ["The slot at which this value was signed."], + "type": "u64" + }, + { + "name": "min_slot", + "docs": [ + "The slot at which the first considered submission was made" + ], + "type": "u64" + }, + { + "name": "max_slot", + "docs": [ + "The slot at which the last considered submission was made" + ], + "type": "u64" + } + ] + } + }, + { + "name": "GarbageCollectionEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "oracle", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" } + ] + } + }, + { + "name": "GuardianQuoteVerifyEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "quote", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" } + ] + } + }, + { + "name": "GuardianQuoteVerifyParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "timestamp", "type": "i64" }, + { "name": "mr_enclave", "type": { "array": ["u8", 32] } }, + { "name": "_reserved1", "type": "u32" }, + { "name": "ed25519_key", "type": "pubkey" }, + { "name": "secp256k1_key", "type": { "array": ["u8", 64] } }, + { "name": "slot", "type": "u64" }, + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" }, + { "name": "advisories", "type": { "vec": "u32" } } + ] + } + }, + { + "name": "GuardianRegisterParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "GuardianUnregisterParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "MegaSlotInfo", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "reserved1", "type": "u64" }, + { "name": "slot_end", "type": "u64" }, + { "name": "perf_goal", "type": "i64" }, + { "name": "current_signature_count", "type": "i64" } + ] + } + }, + { + "name": "MultiSubmission", + "type": { + "kind": "struct", + "fields": [ + { "name": "values", "type": { "vec": "i128" } }, + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" } + ] + } + }, + { + "name": "OracleAccountData", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "enclave", + "docs": ["Represents the state of the quote verifiers enclave."], + "type": { "defined": { "name": "Quote" } } + }, + { + "name": "authority", + "docs": [ + "The authority of the EnclaveAccount which is permitted to make account changes." + ], + "type": "pubkey" + }, + { + "name": "queue", + "docs": [ + "Queue used for attestation to verify a MRENCLAVE measurement." + ], + "type": "pubkey" + }, + { + "name": "created_at", + "docs": ["The unix timestamp when the quote was created."], + "type": "i64" + }, + { + "name": "last_heartbeat", + "docs": ["The last time the quote heartbeated on-chain."], + "type": "i64" + }, + { "name": "secp_authority", "type": { "array": ["u8", 64] } }, + { + "name": "gateway_uri", + "docs": ["URI location of the verifier's gateway."], + "type": { "array": ["u8", 64] } + }, + { "name": "permissions", "type": "u64" }, + { + "name": "is_on_queue", + "docs": [ + "Whether the quote is located on the AttestationQueues buffer." + ], + "type": "u8" + }, + { "name": "_padding1", "type": { "array": ["u8", 7] } }, + { "name": "lut_slot", "type": "u64" }, + { "name": "last_reward_epoch", "type": "u64" }, + { "name": "_ebuf4", "type": { "array": ["u8", 16] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 32] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 1024] } } + ] + } + }, + { + "name": "OracleEpochInfo", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "id", "type": "u64" }, + { "name": "reserved1", "type": "u64" }, + { "name": "slot_end", "type": "u64" }, + { "name": "slash_score", "type": "u64" }, + { "name": "reward_score", "type": "u64" }, + { "name": "stake_score", "type": "u64" } + ] + } + }, + { + "name": "OracleHeartbeatEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "oracle", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" } + ] + } + }, + { + "name": "OracleHeartbeatParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "gateway_uri", + "type": { "option": { "array": ["u8", 64] } } + } + ] + } + }, + { + "name": "OracleInitEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "oracle", "type": "pubkey" }] + } + }, + { + "name": "OracleInitParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "recent_slot", "type": "u64" }, + { "name": "authority", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" }, + { + "name": "secp_authority", + "type": { "option": { "array": ["u8", 64] } } + } + ] + } + }, + { + "name": "OracleQuoteOverrideEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "oracle", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" } + ] + } + }, + { + "name": "OracleQuoteRotateEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "oracle", "type": "pubkey" }] + } + }, + { + "name": "OracleQuoteVerifyRequestEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "quote", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" } + ] + } + }, + { + "name": "OracleSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "new_authority", "type": { "option": "pubkey" } }, + { + "name": "new_secp_authority", + "type": { "option": { "array": ["u8", 64] } } + } + ] + } + }, + { + "name": "OracleStatsAccountData", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "owner", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" }, + { + "name": "finalized_epoch", + "docs": [ + "The last epoch that has completed. cleared after registered with the", + "staking program." + ], + "type": { "defined": { "name": "OracleEpochInfo" } } + }, + { + "name": "current_epoch", + "docs": [ + "The current epoch info being used by the oracle. for stake. Will moved", + "to finalized_epoch as soon as the epoch is over." + ], + "type": { "defined": { "name": "OracleEpochInfo" } } + }, + { + "name": "mega_slot_info", + "type": { "defined": { "name": "MegaSlotInfo" } } + }, + { "name": "last_transfer_slot", "type": "u64" }, + { "name": "bump", "type": "u8" }, + { "name": "padding1", "type": { "array": ["u8", 7] } }, + { + "name": "_ebuf", + "docs": ["Reserved."], + "type": { "array": ["u8", 1024] } + } + ] + } + }, + { + "name": "OracleSubmission", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "oracle", + "docs": ["The public key of the oracle that submitted this value."], + "type": "pubkey" + }, + { + "name": "slot", + "docs": ["The slot at which this value was signed."], + "type": "u64" + }, + { "name": "padding1", "type": { "array": ["u8", 8] } }, + { + "name": "value", + "docs": ["The value that was submitted."], + "type": "i128" + } + ] + } + }, + { + "name": "OracleUpdateDelegationParams", + "type": { + "kind": "struct", + "fields": [{ "name": "_reserved1", "type": "u64" }] + } + }, + { + "name": "PermissionSetEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "permission", "type": "pubkey" }] + } + }, + { + "name": "PermissionSetParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "permission", "type": "u8" }, + { "name": "enable", "type": "bool" } + ] + } + }, + { + "name": "PullFeedAccountData", + "docs": ["A representation of the data in a pull feed account."], + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "submissions", + "docs": ["The oracle submissions for this feed."], + "type": { + "array": [{ "defined": { "name": "OracleSubmission" } }, 32] + } + }, + { + "name": "authority", + "docs": [ + "The public key of the authority that can update the feed hash that", + "this account will use for registering updates." + ], + "type": "pubkey" + }, + { + "name": "queue", + "docs": [ + "The public key of the queue which oracles must be bound to in order to", + "submit data to this feed." + ], + "type": "pubkey" + }, + { + "name": "feed_hash", + "docs": [ + "SHA-256 hash of the job schema oracles will execute to produce data", + "for this feed." + ], + "type": { "array": ["u8", 32] } + }, + { + "name": "initialized_at", + "docs": ["The slot at which this account was initialized."], + "type": "i64" + }, + { "name": "permissions", "type": "u64" }, + { "name": "max_variance", "type": "u64" }, + { "name": "min_responses", "type": "u32" }, + { "name": "name", "type": { "array": ["u8", 32] } }, + { "name": "padding1", "type": { "array": ["u8", 2] } }, + { "name": "historical_result_idx", "type": "u8" }, + { "name": "min_sample_size", "type": "u8" }, + { "name": "last_update_timestamp", "type": "i64" }, + { "name": "lut_slot", "type": "u64" }, + { "name": "_reserved1", "type": { "array": ["u8", 32] } }, + { + "name": "result", + "type": { "defined": { "name": "CurrentResult" } } + }, + { "name": "max_staleness", "type": "u32" }, + { "name": "padding2", "type": { "array": ["u8", 12] } }, + { + "name": "historical_results", + "type": { + "array": [{ "defined": { "name": "CompactResult" } }, 32] + } + }, + { "name": "_ebuf4", "type": { "array": ["u8", 8] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 256] } } + ] + } + }, + { + "name": "PullFeedCloseParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "PullFeedErrorValueEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "feed", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" } + ] + } + }, + { + "name": "PullFeedInitParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "feed_hash", "type": { "array": ["u8", 32] } }, + { "name": "max_variance", "type": "u64" }, + { "name": "min_responses", "type": "u32" }, + { "name": "name", "type": { "array": ["u8", 32] } }, + { "name": "recent_slot", "type": "u64" }, + { "name": "ipfs_hash", "type": { "array": ["u8", 32] } }, + { "name": "min_sample_size", "type": "u8" }, + { "name": "max_staleness", "type": "u32" } + ] + } + }, + { + "name": "PullFeedSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "feed_hash", + "type": { "option": { "array": ["u8", 32] } } + }, + { "name": "authority", "type": { "option": "pubkey" } }, + { "name": "max_variance", "type": { "option": "u64" } }, + { "name": "min_responses", "type": { "option": "u32" } }, + { "name": "name", "type": { "option": { "array": ["u8", 32] } } }, + { + "name": "ipfs_hash", + "type": { "option": { "array": ["u8", 32] } } + }, + { "name": "min_sample_size", "type": { "option": "u8" } }, + { "name": "max_staleness", "type": { "option": "u32" } } + ] + } + }, + { + "name": "PullFeedSubmitResponseManyParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "slot", "type": "u64" }, + { + "name": "submissions", + "type": { "vec": { "defined": { "name": "MultiSubmission" } } } + } + ] + } + }, + { + "name": "PullFeedSubmitResponseParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "slot", "type": "u64" }, + { + "name": "submissions", + "type": { "vec": { "defined": { "name": "Submission" } } } + } + ] + } + }, + { + "name": "PullFeedValueEvents", + "type": { + "kind": "struct", + "fields": [ + { "name": "feeds", "type": { "vec": "pubkey" } }, + { "name": "oracles", "type": { "vec": "pubkey" } }, + { "name": "values", "type": { "vec": { "vec": "i128" } } }, + { "name": "reward", "type": "u32" } + ] + } + }, + { + "name": "QueueAccountData", + "docs": [ + "An Queue represents a round-robin queue of oracle oracles who attest on-chain", + "whether a Switchboard Function was executed within an enclave against an expected set of", + "enclave measurements.", + "", + "For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and", + "wait for an existing oracle to attest their quote. If the oracle's quote matches an expected", + "measurement within the queues mr_enclaves config, it is granted permissions and will start", + "being assigned update requests." + ], + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "authority", + "docs": [ + "The address of the authority which is permitted to add/remove allowed enclave measurements." + ], + "type": "pubkey" + }, + { + "name": "mr_enclaves", + "docs": ["Allowed enclave measurements."], + "type": { "array": [{ "array": ["u8", 32] }, 32] } + }, + { + "name": "oracle_keys", + "docs": [ + "The addresses of the quote oracles who have a valid", + "verification status and have heartbeated on-chain recently." + ], + "type": { "array": ["pubkey", 128] } + }, + { + "name": "max_quote_verification_age", + "docs": [ + "The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain." + ], + "type": "i64" + }, + { + "name": "last_heartbeat", + "docs": [ + "The unix timestamp when the last quote oracle heartbeated on-chain." + ], + "type": "i64" + }, + { "name": "node_timeout", "type": "i64" }, + { + "name": "oracle_min_stake", + "docs": [ + "The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes." + ], + "type": "u64" + }, + { "name": "allow_authority_override_after", "type": "i64" }, + { + "name": "mr_enclaves_len", + "docs": ["The number of allowed enclave measurements."], + "type": "u32" + }, + { + "name": "oracle_keys_len", + "docs": [ + "The length of valid quote oracles for the given attestation queue." + ], + "type": "u32" + }, + { + "name": "reward", + "docs": [ + "The reward paid to quote oracles for attesting on-chain." + ], + "type": "u32" + }, + { + "name": "curr_idx", + "docs": [ + "Incrementer used to track the current quote oracle permitted to run any available functions." + ], + "type": "u32" + }, + { + "name": "gc_idx", + "docs": [ + "Incrementer used to garbage collect and remove stale quote oracles." + ], + "type": "u32" + }, + { "name": "require_authority_heartbeat_permission", "type": "u8" }, + { "name": "require_authority_verify_permission", "type": "u8" }, + { "name": "require_usage_permissions", "type": "u8" }, + { "name": "signer_bump", "type": "u8" }, + { "name": "mint", "type": "pubkey" }, + { "name": "lut_slot", "type": "u64" }, + { "name": "allow_subsidies", "type": "u8" }, + { + "name": "_ebuf6", + "docs": ["Reserved."], + "type": { "array": ["u8", 23] } + }, + { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, + { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 512] } } + ] + } + }, + { + "name": "QueueAddMrEnclaveEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "queue", "type": "pubkey" }, + { "name": "mr_enclave", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "QueueAddMrEnclaveParams", + "type": { + "kind": "struct", + "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] + } + }, + { + "name": "QueueAllowSubsidiesParams", + "type": { + "kind": "struct", + "fields": [{ "name": "allow_subsidies", "type": "u8" }] + } + }, + { + "name": "QueueGarbageCollectParams", + "type": { "kind": "struct", "fields": [{ "name": "idx", "type": "u32" }] } + }, + { + "name": "QueueInitDelegationGroupParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "QueueInitEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "queue", "type": "pubkey" }] + } + }, + { + "name": "QueueInitParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "allow_authority_override_after", "type": "u32" }, + { "name": "require_authority_heartbeat_permission", "type": "bool" }, + { "name": "require_usage_permissions", "type": "bool" }, + { "name": "max_quote_verification_age", "type": "u32" }, + { "name": "reward", "type": "u32" }, + { "name": "node_timeout", "type": "u32" }, + { "name": "recent_slot", "type": "u64" } + ] + } + }, + { + "name": "QueueRemoveMrEnclaveEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "queue", "type": "pubkey" }, + { "name": "mr_enclave", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "QueueRemoveMrEnclaveParams", + "type": { + "kind": "struct", + "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] + } + }, + { + "name": "QueueSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "authority", "type": { "option": "pubkey" } }, + { "name": "reward", "type": { "option": "u32" } }, + { "name": "node_timeout", "type": { "option": "i64" } } + ] + } + }, + { + "name": "Quote", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "enclave_signer", + "docs": ["The address of the signer generated within an enclave."], + "type": "pubkey" + }, + { + "name": "mr_enclave", + "docs": [ + "The quotes MRENCLAVE measurement dictating the contents of the secure enclave." + ], + "type": { "array": ["u8", 32] } + }, + { + "name": "verification_status", + "docs": ["The VerificationStatus of the quote."], + "type": "u8" + }, + { "name": "padding1", "type": { "array": ["u8", 7] } }, + { + "name": "verification_timestamp", + "docs": ["The unix timestamp when the quote was last verified."], + "type": "i64" + }, + { + "name": "valid_until", + "docs": [ + "The unix timestamp when the quotes verification status expires." + ], + "type": "i64" + }, + { + "name": "quote_registry", + "docs": [ + "The off-chain registry where the verifiers quote can be located." + ], + "type": { "array": ["u8", 32] } + }, + { + "name": "registry_key", + "docs": [ + "Key to lookup the buffer data on IPFS or an alternative decentralized storage solution." + ], + "type": { "array": ["u8", 64] } + }, + { + "name": "secp256k1_signer", + "docs": [ + "The secp256k1 public key of the enclave signer. Derived from the enclave_signer." + ], + "type": { "array": ["u8", 64] } + }, + { "name": "last_ed25519_signer", "type": "pubkey" }, + { "name": "last_secp256k1_signer", "type": { "array": ["u8", 64] } }, + { "name": "last_rotate_slot", "type": "u64" }, + { "name": "guardian_approvers", "type": { "array": ["pubkey", 64] } }, + { "name": "guardian_approvers_len", "type": "u8" }, + { "name": "padding2", "type": { "array": ["u8", 7] } }, + { "name": "staging_ed25519_signer", "type": "pubkey" }, + { + "name": "staging_secp256k1_signer", + "type": { "array": ["u8", 64] } + }, + { + "name": "_ebuf4", + "docs": ["Reserved."], + "type": { "array": ["u8", 32] } + }, + { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 512] } } + ] + } + }, + { + "name": "RandomnessAccountData", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "authority", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" }, + { "name": "seed_slothash", "type": { "array": ["u8", 32] } }, + { "name": "seed_slot", "type": "u64" }, + { "name": "oracle", "type": "pubkey" }, + { "name": "reveal_slot", "type": "u64" }, + { "name": "value", "type": { "array": ["u8", 32] } }, + { "name": "lut_slot", "type": "u64" }, + { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 128] } }, + { + "name": "active_secp256k1_signer", + "type": { "array": ["u8", 64] } + }, + { "name": "active_secp256k1_expiration", "type": "i64" } + ] + } + }, + { + "name": "RandomnessCommitEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "randomness_account", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" }, + { "name": "slot", "type": "u64" }, + { "name": "slothash", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "RandomnessCommitParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "RandomnessInitParams", + "type": { + "kind": "struct", + "fields": [{ "name": "recent_slot", "type": "u64" }] + } + }, + { + "name": "RandomnessRevealParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" }, + { "name": "value", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "State", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "bump", "type": "u8" }, + { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, + { "name": "enable_staking", "type": "u8" }, + { "name": "padding1", "type": { "array": ["u8", 5] } }, + { "name": "authority", "type": "pubkey" }, + { "name": "guardian_queue", "type": "pubkey" }, + { "name": "reserved1", "type": "u64" }, + { "name": "epoch_length", "type": "u64" }, + { + "name": "current_epoch", + "type": { "defined": { "name": "StateEpochInfo" } } + }, + { + "name": "next_epoch", + "type": { "defined": { "name": "StateEpochInfo" } } + }, + { + "name": "finalized_epoch", + "type": { "defined": { "name": "StateEpochInfo" } } + }, + { "name": "stake_pool", "type": "pubkey" }, + { "name": "stake_program", "type": "pubkey" }, + { "name": "switch_mint", "type": "pubkey" }, + { "name": "sgx_advisories", "type": { "array": ["u16", 32] } }, + { "name": "advisories_len", "type": "u8" }, + { "name": "padding2", "type": "u8" }, + { "name": "flat_reward_cut_percentage", "type": "u8" }, + { "name": "enable_slashing", "type": "u8" }, + { "name": "subsidy_amount", "type": "u32" }, + { "name": "lut_slot", "type": "u64" }, + { "name": "base_reward", "type": "u32" }, + { "name": "_ebuf6", "type": { "array": ["u8", 28] } }, + { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, + { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 512] } }, + { + "name": "cost_whitelist", + "docs": ["Cost whitelist by authority"], + "type": { "array": ["pubkey", 32] } + } + ] + } + }, + { + "name": "StateEpochInfo", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "id", "type": "u64" }, + { "name": "_reserved1", "type": "u64" }, + { "name": "slot_end", "type": "u64" } + ] + } + }, + { "name": "StateInitParams", "type": { "kind": "struct", "fields": [] } }, + { + "name": "StateSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "new_authority", "type": "pubkey" }, + { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, + { "name": "stake_pool", "type": "pubkey" }, + { "name": "stake_program", "type": "pubkey" }, + { "name": "add_advisory", "type": "u16" }, + { "name": "rm_advisory", "type": "u16" }, + { "name": "epoch_length", "type": "u32" }, + { "name": "reset_epochs", "type": "bool" }, + { "name": "switch_mint", "type": "pubkey" }, + { "name": "enable_staking", "type": "u8" }, + { "name": "subsidy_amount", "type": "u32" }, + { "name": "base_reward", "type": "u32" }, + { "name": "add_cost_wl", "type": "pubkey" }, + { "name": "rm_cost_wl", "type": "pubkey" } + ] + } + }, + { + "name": "Submission", + "type": { + "kind": "struct", + "fields": [ + { "name": "value", "type": "i128" }, + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" }, + { "name": "offset", "type": "u8" } + ] + } + } + ] +} diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index a29ed0a5..7f635d6f 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -6,9 +6,10 @@ import { } from "@solana/web3.js"; import { Signer, transactionBuilder } from "@metaplex-foundation/umi"; import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; -import { AnchorProvider, Program } from "@coral-xyz/anchor"; +import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; +import switchboardIdl from "../idls/switchboard.json"; import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; import { TransactionItemInputs } from "../types"; import { @@ -17,7 +18,7 @@ import { } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; -export async function getPullFeed( +export function getPullFeed( conn: Connection, mint: PublicKey, wallet?: PublicKey @@ -36,12 +37,11 @@ export async function getPullFeed( dummyWallet, AnchorProvider.defaultOptions() ); - const { PullFeed, ON_DEMAND_MAINNET_PID } = OnDemand; - const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); + const program = new Program(switchboardIdl as Idl, provider); - console.log(new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId).toString()) + const { PullFeed } = OnDemand; return new PullFeed( - sbProgram, + program, new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) ); } @@ -51,18 +51,12 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = await getPullFeed( - conn, - mint, - toWeb3JsPublicKey(signer.publicKey) - ); - const gateway = await feed.fetchGatewayUrl(); - const [pullIxs, responses] = await retryWithExponentialBackoff( + const feed = getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); + const [pullIx, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ - gateway: gateway, chain: "solana", - network: "mainnet", + network: "mainnet-beta", }); if (!res[1] || !res[1][0].value) { throw new Error("Unable to fetch Switchboard pull IX"); @@ -73,7 +67,7 @@ export async function buildSwbSubmitResponseTx( 200 ); - if (!pullIxs || !pullIxs.length) { + if (!pullIx) { throw new Error("Unable to fetch SWB crank IX"); } @@ -87,9 +81,7 @@ export async function buildSwbSubmitResponseTx( }; return { - tx: transactionBuilder( - pullIxs.map((x) => getWrappedInstruction(signer, x)) - ), + tx: transactionBuilder([getWrappedInstruction(signer, pullIx!)]), lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), @@ -111,7 +103,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = await getPullFeed(conn, mint); + const feed = getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = From 46dfe2432ed64642431ae47f44086d2ba03f958e Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 11 Jul 2025 12:54:45 -0400 Subject: [PATCH 59/83] Revert "Revert "bump versions"" This reverts commit 66bd27790d5653fd45df6a8bcfdfef8008de4d9b. --- pnpm-lock.yaml | 217 +-- solauto-sdk/package.json | 10 +- solauto-sdk/pnpm-lock.yaml | 480 ++--- solauto-sdk/src/idls/switchboard.json | 1949 --------------------- solauto-sdk/src/utils/switchboardUtils.ts | 32 +- 5 files changed, 288 insertions(+), 2400 deletions(-) delete mode 100644 solauto-sdk/src/idls/switchboard.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a9acb1a..312f22c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,12 +34,6 @@ packages: dependencies: regenerator-runtime: 0.14.1 - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} - dependencies: - '@soncodi/signal': 2.0.7 - dev: true - /@common.js/quick-lru@7.0.0: resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} engines: {node: '>=18'} @@ -137,6 +131,11 @@ packages: yargs: 17.7.2 dev: false + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: true + /@js-sdsl/ordered-map@4.4.2: resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} dev: false @@ -526,6 +525,16 @@ packages: typescript: 4.9.5 dev: true + /@solana/codecs-core@2.1.1(typescript@4.9.5): + resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + dependencies: + '@solana/errors': 2.1.1(typescript@4.9.5) + typescript: 4.9.5 + dev: true + /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5): resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} peerDependencies: @@ -575,6 +584,17 @@ packages: typescript: 4.9.5 dev: true + /@solana/codecs-numbers@2.1.1(typescript@4.9.5): + resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + dependencies: + '@solana/codecs-core': 2.1.1(typescript@4.9.5) + '@solana/errors': 2.1.1(typescript@4.9.5) + typescript: 4.9.5 + dev: true + /@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22): resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} peerDependencies: @@ -672,6 +692,18 @@ packages: typescript: 4.9.5 dev: true + /@solana/errors@2.1.1(typescript@4.9.5): + resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + typescript: 4.9.5 + dev: true + /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} peerDependencies: @@ -779,25 +811,6 @@ packages: - utf-8-validate dev: true - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} @@ -964,29 +977,31 @@ packages: - encoding - utf-8-validate - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + /@solana/web3.js@1.98.2(typescript@4.9.5): + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} dependencies: + '@babel/runtime': 7.25.7 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.67 - '@types/node-fetch': 2.6.12 + '@solana/codecs-numbers': 2.1.1(typescript@4.9.5) + agentkeepalive: 4.5.0 bn.js: 5.2.1 - decimal.js: 10.4.3 - typescript: 4.9.5 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.2 + node-fetch: 2.7.0 + rpc-websockets: 9.0.4 + superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate dev: true - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: true - /@sqds/multisig@2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-WOiL7La+RSiJsz7jVO85yhSiiSvNMUthiWuLPeWVOoD6IYa34BEAzanF1RdXRWGglSbRFYCTkyr+Ay1WmXmSRQ==} engines: {node: '>=14'} @@ -1015,28 +1030,6 @@ packages: dependencies: tslib: 2.7.0 - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} - dependencies: - '@solana/web3.js': 1.95.8 - axios: 1.7.8 - big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - utf-8-validate - dev: true - /@switchboard-xyz/common@3.0.12: resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} engines: {node: '>=20'} @@ -1079,25 +1072,26 @@ packages: - utf-8-validate dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} - engines: {node: '>= 18'} + /@switchboard-xyz/common@3.4.1(typescript@4.9.5): + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + engines: {node: '>=20'} dependencies: - '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.95.8 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.7.8 + '@solana/web3.js': 1.98.2(typescript@4.9.5) + axios: 1.10.0 big.js: 6.2.2 - bs58: 5.0.0 - js-yaml: 4.1.0 + bn.js: 5.2.1 + bs58: 6.0.0 + buffer: 6.0.3 + decimal.js: 10.4.3 + js-sha256: 0.11.0 protobufjs: 7.4.0 + yaml: 2.6.1 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate dev: true @@ -1120,6 +1114,25 @@ packages: - utf-8-validate dev: false + /@switchboard-xyz/on-demand@2.8.1(typescript@4.9.5): + resolution: {integrity: sha512-MqUXMuqmYfhjMdFIAyFOvCYr1BeacmA3ZY6Eu2RkHJLG1X3NAKdCHR2Bj13UU/H9P7HrKhse29Sn7QdbSeEp/w==} + engines: {node: '>= 18'} + dependencies: + '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 + '@isaacs/ttlcache': 1.4.1 + '@switchboard-xyz/common': 3.4.1(typescript@4.9.5) + axios: 1.10.0 + bs58: 6.0.0 + buffer: 6.0.3 + js-yaml: 4.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - typescript + - utf-8-validate + dev: true + /@types/bn.js@5.1.6: resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} dependencies: @@ -1131,22 +1144,9 @@ packages: dependencies: '@types/node': 20.16.11 - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: true - /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - /@types/node@18.19.67: - resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -1177,6 +1177,10 @@ packages: '@wallet-standard/base': 1.1.0 dev: false + /@zod/core@0.11.6: + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + dev: true + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1237,6 +1241,16 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + /axios@1.7.8: resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: @@ -1359,6 +1373,11 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + /chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1389,6 +1408,11 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + /commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1397,10 +1421,6 @@ packages: engines: {node: '>= 6'} dev: false - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: true - /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1748,10 +1768,6 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -1995,10 +2011,6 @@ packages: hasBin: true dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2107,6 +2119,12 @@ packages: yargs-parser: 21.1.1 dev: false + /zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + dependencies: + '@zod/core': 0.11.6 + dev: true + file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {directory: solauto-sdk, type: directory} id: file:solauto-sdk @@ -2122,9 +2140,10 @@ packages: '@solana/web3.js': 1.95.8 '@sqds/multisig': 2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) '@switchboard-xyz/common': 3.0.12 - '@switchboard-xyz/on-demand': 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) + '@switchboard-xyz/on-demand': 2.8.1(typescript@4.9.5) '@types/node': 20.16.11 axios: 1.7.8 + big.js: 6.2.2 bs58: 5.0.0 cross-fetch: 4.0.0 dotenv: 16.4.7 diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 7093eb24..75d71aa4 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.782", + "version": "1.0.784", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -12,16 +12,16 @@ "test:unit": "ts-mocha -p ./tsconfig.json -t 1000000 tests/unit/**/*.ts" }, "dependencies": { - "@coral-xyz/anchor": "^0.30.1", + "@coral-xyz/anchor": "=0.31.1", "@jup-ag/api": "=6.0.24", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", "@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.1", "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "=1.95.8", - "@switchboard-xyz/common": "=3.0.12", - "@switchboard-xyz/on-demand": "=1.2.51", + "@solana/web3.js": "=1.98.2", + "@switchboard-xyz/common": "=3.4.1", + "@switchboard-xyz/on-demand": "=2.11.0", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 5003c773..4d59ae42 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1 + specifier: '=0.31.1' + version: 0.31.1(typescript@5.6.3) '@jup-ag/api': specifier: '=6.0.24' version: 6.0.24 @@ -16,25 +16,25 @@ dependencies: version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-signer-wallet-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@solana/spl-token': specifier: ^0.4.0 - version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + version: 0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/web3.js': - specifier: '=1.95.8' - version: 1.95.8 + specifier: '=1.98.2' + version: 1.98.2(typescript@5.6.3) '@switchboard-xyz/common': - specifier: '=3.0.12' - version: 3.0.12 + specifier: '=3.4.1' + version: 3.4.1(typescript@5.6.3) '@switchboard-xyz/on-demand': - specifier: '=1.2.51' - version: 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) + specifier: '=2.11.0' + version: 2.11.0(typescript@5.6.3) axios: specifier: ^1.7.8 version: 1.7.8 @@ -89,58 +89,56 @@ packages: regenerator-runtime: 0.14.1 dev: false - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} - dependencies: - '@soncodi/signal': 2.0.7 - dev: false - - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + /@coral-xyz/anchor-errors@0.31.1: + resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} engines: {node: '>=10'} dev: false - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} + /@coral-xyz/anchor@0.31.1(typescript@5.6.3): + resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} + engines: {node: '>=17'} dependencies: - '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8) + '@coral-xyz/anchor-errors': 0.31.1 + '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.2) '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 cross-fetch: 3.1.8 - crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 - snake-case: 3.0.4 superstruct: 0.15.5 toml: 3.0.0 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate dev: false - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + /@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.2): + resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} engines: {node: '>=10'} peerDependencies: - '@solana/web3.js': ^1.68.0 + '@solana/web3.js': ^1.69.0 dependencies: - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: false + /@jup-ag/api@6.0.24: resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} dev: false - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 @@ -148,14 +146,14 @@ packages: dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) transitivePeerDependencies: - encoding dev: false @@ -168,16 +166,16 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -217,15 +215,15 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -262,36 +260,36 @@ packages: '@metaplex-foundation/umi-serializers-numbers': 0.8.9 dev: false - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@solana/web3.js': 1.98.2(typescript@5.6.3) dev: false - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) buffer: 6.0.3 dev: false @@ -358,17 +356,18 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@solana/buffer-layout-utils@0.2.0: + /@solana/buffer-layout-utils@0.2.0(typescript@5.6.3): resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate dev: false @@ -388,21 +387,22 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): + /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + typescript: 5.6.3 dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + /@solana/codecs-core@2.1.1(typescript@5.6.3): + resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + '@solana/errors': 2.1.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -417,17 +417,6 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -449,23 +438,24 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): + /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + typescript: 5.6.3 dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + /@solana/codecs-numbers@2.1.1(typescript@5.6.3): + resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + '@solana/codecs-core': 2.1.1(typescript@5.6.3) + '@solana/errors': 2.1.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -482,19 +472,6 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.9.5 - dev: false - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -523,21 +500,6 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -564,7 +526,7 @@ packages: typescript: 5.6.3 dev: false - /@solana/errors@2.0.0-rc.1(typescript@4.9.5): + /@solana/errors@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true peerDependencies: @@ -572,17 +534,18 @@ packages: dependencies: chalk: 5.3.0 commander: 12.1.0 - typescript: 4.9.5 + typescript: 5.6.3 dev: false - /@solana/errors@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + /@solana/errors@2.1.1(typescript@5.6.3): + resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} + engines: {node: '>=20.18.0'} hasBin: true peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' dependencies: - chalk: 5.3.0 - commander: 12.1.0 + chalk: 5.4.1 + commander: 13.1.0 typescript: 5.6.3 dev: false @@ -601,21 +564,6 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -631,7 +579,7 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} peerDependencies: @@ -639,13 +587,13 @@ packages: dependencies: '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} engines: {node: '>=16'} peerDependencies: @@ -653,56 +601,23 @@ packages: dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.98.2(typescript@5.6.3) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 - dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.0 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: false - - /@solana/spl-token@0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: false - - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token@0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.94.0 dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(typescript@5.6.3) + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/web3.js': 1.98.2(typescript@5.6.3) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -719,39 +634,15 @@ packages: buffer: 6.0.3 dev: false - /@solana/web3.js@1.95.8: - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} - dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /@solana/web3.js@1.98.0: - resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + /@solana/web3.js@1.98.2(typescript@5.6.3): + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} dependencies: '@babel/runtime': 7.25.7 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.1.1(typescript@5.6.3) agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 bn.js: 5.2.1 borsh: 0.7.0 bs58: 4.0.1 @@ -764,66 +655,22 @@ packages: transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate dev: false - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.65 - '@types/node-fetch': 2.6.12 - bn.js: 5.2.1 - decimal.js: 10.4.3 - typescript: 4.9.5 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - utf-8-validate - dev: false - - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: false - /@swc/helpers@0.5.13: resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} dependencies: tslib: 2.7.0 dev: false - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} - dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 - big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - utf-8-validate - dev: false - - /@switchboard-xyz/common@3.0.12: - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} + /@switchboard-xyz/common@3.4.1(typescript@5.6.3): + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} engines: {node: '>=20'} dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(typescript@5.6.3) + axios: 1.10.0 big.js: 6.2.2 bn.js: 5.2.1 bs58: 6.0.0 @@ -832,33 +679,32 @@ packages: js-sha256: 0.11.0 protobufjs: 7.4.0 yaml: 2.6.1 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + /@switchboard-xyz/on-demand@2.11.0(typescript@5.6.3): + resolution: {integrity: sha512-w4iHyRpvIuv2CT2Bcap6zIdunLYcDBuMUliyJuxmxLD+ch2Lta1QWHAZCsjuBasE2OhSKoTz3MAtapYuCuR2gA==} engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x - dependencies: - '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.98.0 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.8.4 - big.js: 6.2.2 - bs58: 5.0.0 + dependencies: + '@coral-xyz/anchor-31': /@coral-xyz/anchor@0.31.1(typescript@5.6.3) + '@isaacs/ttlcache': 1.4.1 + '@switchboard-xyz/common': 3.4.1(typescript@5.6.3) + axios: 1.10.0 + bs58: 6.0.0 + buffer: 6.0.3 js-yaml: 4.1.0 - protobufjs: 7.4.0 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - debug - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate dev: false @@ -866,12 +712,6 @@ packages: resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} dev: true - /@types/bn.js@5.1.6: - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} - dependencies: - '@types/node': 20.16.11 - dev: false - /@types/chai@4.3.20: resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} dev: true @@ -892,23 +732,10 @@ packages: resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} dev: true - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: false - /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false - /@types/node@18.19.65: - resolution: {integrity: sha512-Ay5BZuO1UkTmVHzZJNvZKw/E+iB3GQABb6kijEz89w2JrfhNA+M/ebp18pfz9Gqe9ywhMC8AA8yC01lZq48J+Q==} - dependencies: - undici-types: 5.26.5 - dev: false - /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -934,6 +761,10 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true + /@zod/core@0.11.6: + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + dev: false + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -990,8 +821,8 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + /axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -1000,8 +831,8 @@ packages: - debug dev: false - /axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + /axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -1161,6 +992,11 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false + /chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -1213,6 +1049,11 @@ packages: engines: {node: '>=18'} dev: false + /commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -1221,10 +1062,6 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: false - /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1241,11 +1078,6 @@ packages: - encoding dev: false - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false - /debug@4.3.3(supports-color@8.1.1): resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -1295,13 +1127,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.7.0 - dev: false - /dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -1580,10 +1405,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -1602,12 +1423,6 @@ packages: get-func-name: 2.0.2 dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 - dev: false - /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -1692,13 +1507,6 @@ packages: hasBin: true dev: true - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.7.0 - dev: false - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -1846,13 +1654,6 @@ packages: randombytes: 2.1.0 dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.7.0 - dev: false - /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -1987,21 +1788,11 @@ packages: engines: {node: '>=4'} dev: true - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false - /typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: false - /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2083,6 +1874,19 @@ packages: utf-8-validate: 5.0.10 dev: false + /ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2131,3 +1935,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + dependencies: + '@zod/core': 0.11.6 + dev: false diff --git a/solauto-sdk/src/idls/switchboard.json b/solauto-sdk/src/idls/switchboard.json deleted file mode 100644 index 6996121a..00000000 --- a/solauto-sdk/src/idls/switchboard.json +++ /dev/null @@ -1,1949 +0,0 @@ -{ - "address": "SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv", - "metadata": { - "name": "sb_on_demand", - "version": "0.1.0", - "spec": "0.1.0", - "description": "Created with Anchor" - }, - "instructions": [ - { - "name": "guardian_quote_verify", - "discriminator": [168, 36, 93, 156, 157, 150, 148, 45], - "accounts": [ - { "name": "guardian", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true, "relations": ["oracle"] }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianQuoteVerifyParams" } } - } - ] - }, - { - "name": "guardian_register", - "discriminator": [159, 76, 53, 117, 219, 29, 116, 135], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianRegisterParams" } } - } - ] - }, - { - "name": "guardian_unregister", - "discriminator": [215, 19, 61, 120, 155, 224, 120, 60], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianUnregisterParams" } } - } - ] - }, - { - "name": "oracle_heartbeat", - "discriminator": [10, 175, 217, 130, 111, 35, 117, 54], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "oracle_signer", "signer": true }, - { - "name": "queue", - "writable": true, - "relations": ["oracle", "gc_node"] - }, - { "name": "gc_node", "writable": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "queue_escrow", "writable": true }, - { - "name": "stake_program", - "address": "SBSTk6t52R89MmCdD739Rdd97HdbTQUFHe41vCX7pTt", - "relations": ["program_state"] - }, - { "name": "delegation_pool", "writable": true }, - { "name": "delegation_group", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleHeartbeatParams" } } - } - ] - }, - { - "name": "oracle_init", - "discriminator": [21, 158, 66, 65, 60, 221, 148, 61], - "accounts": [ - { "name": "oracle", "writable": true, "signer": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool", "relations": ["program_state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleInitParams" } } - } - ] - }, - { - "name": "oracle_set_configs", - "discriminator": [129, 111, 223, 4, 191, 188, 70, 180], - "accounts": [ - { "name": "oracle" }, - { "name": "authority", "signer": true, "relations": ["oracle"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleSetConfigsParams" } } - } - ] - }, - { - "name": "oracle_update_delegation", - "discriminator": [46, 198, 113, 223, 160, 189, 118, 90], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "queue", "relations": ["oracle"] }, - { "name": "authority", "signer": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "delegation_pool", "writable": true }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "switch_mint" }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "wsol_vault", "writable": true }, - { "name": "switch_vault", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" }, - { "name": "delegation_group" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleUpdateDelegationParams" } } - } - ] - }, - { - "name": "permission_set", - "discriminator": [211, 122, 185, 120, 129, 182, 55, 103], - "accounts": [ - { "name": "authority", "signer": true }, - { "name": "granter" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PermissionSetParams" } } - } - ] - }, - { - "name": "pull_feed_close", - "discriminator": [19, 134, 50, 142, 177, 215, 196, 83], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "reward_escrow", "writable": true }, - { "name": "lut", "writable": true }, - { "name": "lut_signer" }, - { "name": "payer", "writable": true, "signer": true }, - { "name": "state" }, - { - "name": "authority", - "writable": true, - "signer": true, - "relations": ["pull_feed"] - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedCloseParams" } } - } - ] - }, - { - "name": "pull_feed_init", - "discriminator": [198, 130, 53, 198, 235, 61, 143, 40], - "accounts": [ - { "name": "pull_feed", "writable": true, "signer": true }, - { "name": "queue" }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "pull_feed" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedInitParams" } } - } - ] - }, - { - "name": "pull_feed_set_configs", - "discriminator": [217, 45, 11, 246, 64, 26, 82, 168], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "authority", "signer": true, "relations": ["pull_feed"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSetConfigsParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response", - "discriminator": [150, 22, 215, 166, 143, 93, 48, 137], - "accounts": [ - { "name": "feed", "writable": true }, - { "name": "queue", "relations": ["feed"] }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response_many", - "discriminator": [47, 156, 45, 25, 200, 71, 37, 215], - "accounts": [ - { "name": "queue" }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseManyParams" } } - } - ] - }, - { - "name": "queue_add_mr_enclave", - "discriminator": [199, 255, 81, 50, 60, 133, 171, 138], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAddMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_allow_subsidies", - "discriminator": [94, 203, 82, 157, 188, 138, 202, 108], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "state", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAllowSubsidiesParams" } } - } - ] - }, - { - "name": "queue_garbage_collect", - "discriminator": [187, 208, 104, 247, 16, 91, 96, 98], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueGarbageCollectParams" } } - } - ] - }, - { - "name": "queue_init", - "discriminator": [144, 18, 99, 145, 133, 27, 207, 13], - "accounts": [ - { "name": "queue", "writable": true, "signer": true }, - { - "name": "queue_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "queue" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "native_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer", "writable": true }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitParams" } } - } - ] - }, - { - "name": "queue_init_delegation_group", - "discriminator": [239, 146, 75, 158, 20, 166, 159, 14], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "delegation_group", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitDelegationGroupParams" } } - } - ] - }, - { - "name": "queue_remove_mr_enclave", - "discriminator": [3, 64, 135, 33, 190, 133, 68, 252], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueRemoveMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_set_configs", - "discriminator": [54, 183, 243, 199, 49, 103, 142, 48], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueSetConfigsParams" } } - } - ] - }, - { - "name": "randomness_commit", - "discriminator": [52, 170, 152, 201, 179, 133, 242, 141], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "queue", "relations": ["randomness", "oracle"] }, - { "name": "oracle", "writable": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "authority", "signer": true, "relations": ["randomness"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessCommitParams" } } - } - ] - }, - { - "name": "randomness_init", - "discriminator": [9, 9, 204, 33, 50, 116, 113, 15], - "accounts": [ - { "name": "randomness", "writable": true, "signer": true }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "randomness" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority", "signer": true }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessInitParams" } } - } - ] - }, - { - "name": "randomness_reveal", - "discriminator": [197, 181, 187, 10, 30, 58, 20, 73], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "oracle", "relations": ["randomness"] }, - { "name": "queue", "relations": ["oracle"] }, - { - "name": "stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110, - 101, 115, 115, 83, 116, 97, 116, 115 - ] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "authority", "signer": true, "relations": ["randomness"] }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_escrow", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessRevealParams" } } - } - ] - }, - { - "name": "state_init", - "discriminator": [103, 241, 106, 190, 217, 153, 87, 105], - "accounts": [ - { - "name": "state", - "writable": true, - "pda": { - "seeds": [{ "kind": "const", "value": [83, 84, 65, 84, 69] }] - } - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateInitParams" } } - } - ] - }, - { - "name": "state_set_configs", - "discriminator": [40, 98, 76, 37, 206, 9, 47, 144], - "accounts": [ - { "name": "state", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateSetConfigsParams" } } - } - ] - } - ], - "accounts": [ - { - "name": "OracleAccountData", - "discriminator": [128, 30, 16, 241, 170, 73, 55, 54] - }, - { - "name": "OracleStatsAccountData", - "discriminator": [180, 157, 178, 234, 240, 27, 152, 179] - }, - { - "name": "PullFeedAccountData", - "discriminator": [196, 27, 108, 196, 10, 215, 219, 40] - }, - { - "name": "QueueAccountData", - "discriminator": [217, 194, 55, 127, 184, 83, 138, 1] - }, - { - "name": "RandomnessAccountData", - "discriminator": [10, 66, 229, 135, 220, 239, 217, 114] - }, - { "name": "State", "discriminator": [216, 146, 107, 94, 104, 75, 182, 177] } - ], - "events": [ - { - "name": "CostWhitelistEvent", - "discriminator": [56, 107, 191, 127, 116, 6, 138, 149] - }, - { - "name": "GarbageCollectionEvent", - "discriminator": [232, 235, 2, 188, 8, 143, 145, 237] - }, - { - "name": "GuardianQuoteVerifyEvent", - "discriminator": [31, 37, 39, 6, 214, 186, 33, 115] - }, - { - "name": "OracleHeartbeatEvent", - "discriminator": [52, 29, 166, 2, 94, 7, 188, 13] - }, - { - "name": "OracleInitEvent", - "discriminator": [89, 193, 219, 200, 1, 83, 167, 24] - }, - { - "name": "OracleQuoteOverrideEvent", - "discriminator": [78, 204, 191, 210, 164, 196, 244, 65] - }, - { - "name": "OracleQuoteRotateEvent", - "discriminator": [26, 189, 196, 192, 225, 127, 26, 228] - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "discriminator": [203, 209, 79, 0, 20, 71, 226, 202] - }, - { - "name": "PermissionSetEvent", - "discriminator": [148, 86, 123, 0, 102, 20, 119, 206] - }, - { - "name": "PullFeedErrorValueEvent", - "discriminator": [225, 80, 192, 95, 14, 12, 83, 192] - }, - { - "name": "PullFeedValueEvents", - "discriminator": [86, 7, 231, 28, 122, 161, 117, 69] - }, - { - "name": "QueueAddMrEnclaveEvent", - "discriminator": [170, 186, 175, 38, 216, 51, 69, 175] - }, - { - "name": "QueueInitEvent", - "discriminator": [44, 137, 99, 227, 107, 8, 30, 105] - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "discriminator": [4, 105, 196, 60, 84, 122, 203, 196] - }, - { - "name": "RandomnessCommitEvent", - "discriminator": [88, 60, 172, 90, 112, 10, 206, 147] - } - ], - "errors": [ - { "code": 6000, "name": "GenericError" }, - { "code": 6001, "name": "InvalidQuote" }, - { "code": 6002, "name": "InsufficientQueue" }, - { "code": 6003, "name": "QueueFull" }, - { "code": 6004, "name": "InvalidEnclaveSigner" }, - { "code": 6005, "name": "InvalidSigner" }, - { "code": 6006, "name": "MrEnclaveAlreadyExists" }, - { "code": 6007, "name": "MrEnclaveAtCapacity" }, - { "code": 6008, "name": "MrEnclaveDoesntExist" }, - { "code": 6009, "name": "PermissionDenied" }, - { "code": 6010, "name": "InvalidQueue" }, - { "code": 6011, "name": "IncorrectMrEnclave" }, - { "code": 6012, "name": "InvalidAuthority" }, - { "code": 6013, "name": "InvalidMrEnclave" }, - { "code": 6014, "name": "InvalidTimestamp" }, - { "code": 6015, "name": "InvalidOracleIdx" }, - { "code": 6016, "name": "InvalidSecpSignature" }, - { "code": 6017, "name": "InvalidGuardianQueue" }, - { "code": 6018, "name": "InvalidIndex" }, - { "code": 6019, "name": "InvalidOracleQueue" }, - { "code": 6020, "name": "InvalidPermission" }, - { "code": 6021, "name": "InvalidePermissionedAccount" }, - { "code": 6022, "name": "InvalidEpochRotate" }, - { "code": 6023, "name": "InvalidEpochFinalize" }, - { "code": 6024, "name": "InvalidEscrow" }, - { "code": 6025, "name": "IllegalOracle" }, - { "code": 6026, "name": "IllegalExecuteAttempt" }, - { "code": 6027, "name": "IllegalFeedValue" }, - { "code": 6028, "name": "InvalidOracleFeedStats" }, - { "code": 6029, "name": "InvalidStateAuthority" }, - { "code": 6030, "name": "NotEnoughSamples" }, - { "code": 6031, "name": "OracleIsVerified" }, - { "code": 6032, "name": "QueueIsEmpty" }, - { "code": 6033, "name": "SecpRecoverFailure" }, - { "code": 6034, "name": "StaleSample" }, - { "code": 6035, "name": "SwitchboardRandomnessTooOld" }, - { "code": 6036, "name": "EpochIdMismatch" }, - { "code": 6037, "name": "GuardianAlreadyVoted" }, - { "code": 6038, "name": "RandomnessNotRequested" }, - { "code": 6039, "name": "InvalidSlotNumber" }, - { "code": 6040, "name": "RandomnessOracleKeyExpired" }, - { "code": 6041, "name": "InvalidAdvisory" }, - { "code": 6042, "name": "InvalidOracleStats" }, - { "code": 6043, "name": "InvalidStakeProgram" }, - { "code": 6044, "name": "InvalidStakePool" }, - { "code": 6045, "name": "InvalidDelegationPool" }, - { "code": 6046, "name": "UnparsableAccount" }, - { "code": 6047, "name": "InvalidInstruction" }, - { "code": 6048, "name": "OracleAlreadyVerified" }, - { "code": 6049, "name": "GuardianNotVerified" }, - { "code": 6050, "name": "InvalidConstraint" }, - { "code": 6051, "name": "InvalidDelegationGroup" }, - { "code": 6052, "name": "OracleKeyNotFound" }, - { "code": 6053, "name": "GuardianReregisterAttempt" } - ], - "types": [ - { - "name": "CompactResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "f32" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "f32" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - } - ] - } - }, - { - "name": "CostWhitelistEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "CurrentResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "docs": [ - "The median value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "range", - "docs": ["The range of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "min_value", - "docs": [ - "The minimum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "max_value", - "docs": [ - "The maximum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "num_samples", - "docs": ["The number of samples used to calculate this result"], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { - "name": "min_slot", - "docs": [ - "The slot at which the first considered submission was made" - ], - "type": "u64" - }, - { - "name": "max_slot", - "docs": [ - "The slot at which the last considered submission was made" - ], - "type": "u64" - } - ] - } - }, - { - "name": "GarbageCollectionEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "timestamp", "type": "i64" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } }, - { "name": "_reserved1", "type": "u32" }, - { "name": "ed25519_key", "type": "pubkey" }, - { "name": "secp256k1_key", "type": { "array": ["u8", 64] } }, - { "name": "slot", "type": "u64" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "advisories", "type": { "vec": "u32" } } - ] - } - }, - { - "name": "GuardianRegisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "GuardianUnregisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "MegaSlotInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "perf_goal", "type": "i64" }, - { "name": "current_signature_count", "type": "i64" } - ] - } - }, - { - "name": "MultiSubmission", - "type": { - "kind": "struct", - "fields": [ - { "name": "values", "type": { "vec": "i128" } }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" } - ] - } - }, - { - "name": "OracleAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave", - "docs": ["Represents the state of the quote verifiers enclave."], - "type": { "defined": { "name": "Quote" } } - }, - { - "name": "authority", - "docs": [ - "The authority of the EnclaveAccount which is permitted to make account changes." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "Queue used for attestation to verify a MRENCLAVE measurement." - ], - "type": "pubkey" - }, - { - "name": "created_at", - "docs": ["The unix timestamp when the quote was created."], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": ["The last time the quote heartbeated on-chain."], - "type": "i64" - }, - { "name": "secp_authority", "type": { "array": ["u8", 64] } }, - { - "name": "gateway_uri", - "docs": ["URI location of the verifier's gateway."], - "type": { "array": ["u8", 64] } - }, - { "name": "permissions", "type": "u64" }, - { - "name": "is_on_queue", - "docs": [ - "Whether the quote is located on the AttestationQueues buffer." - ], - "type": "u8" - }, - { "name": "_padding1", "type": { "array": ["u8", 7] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "last_reward_epoch", "type": "u64" }, - { "name": "_ebuf4", "type": { "array": ["u8", 16] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 1024] } } - ] - } - }, - { - "name": "OracleEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "slash_score", "type": "u64" }, - { "name": "reward_score", "type": "u64" }, - { "name": "stake_score", "type": "u64" } - ] - } - }, - { - "name": "OracleHeartbeatEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleHeartbeatParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "gateway_uri", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "recent_slot", "type": "u64" }, - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { - "name": "secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleQuoteOverrideEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleQuoteRotateEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "OracleSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": { "option": "pubkey" } }, - { - "name": "new_secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleStatsAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "owner", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { - "name": "finalized_epoch", - "docs": [ - "The last epoch that has completed. cleared after registered with the", - "staking program." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "current_epoch", - "docs": [ - "The current epoch info being used by the oracle. for stake. Will moved", - "to finalized_epoch as soon as the epoch is over." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "mega_slot_info", - "type": { "defined": { "name": "MegaSlotInfo" } } - }, - { "name": "last_transfer_slot", "type": "u64" }, - { "name": "bump", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "_ebuf", - "docs": ["Reserved."], - "type": { "array": ["u8", 1024] } - } - ] - } - }, - { - "name": "OracleSubmission", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "oracle", - "docs": ["The public key of the oracle that submitted this value."], - "type": "pubkey" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { "name": "padding1", "type": { "array": ["u8", 8] } }, - { - "name": "value", - "docs": ["The value that was submitted."], - "type": "i128" - } - ] - } - }, - { - "name": "OracleUpdateDelegationParams", - "type": { - "kind": "struct", - "fields": [{ "name": "_reserved1", "type": "u64" }] - } - }, - { - "name": "PermissionSetEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "permission", "type": "pubkey" }] - } - }, - { - "name": "PermissionSetParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "permission", "type": "u8" }, - { "name": "enable", "type": "bool" } - ] - } - }, - { - "name": "PullFeedAccountData", - "docs": ["A representation of the data in a pull feed account."], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "submissions", - "docs": ["The oracle submissions for this feed."], - "type": { - "array": [{ "defined": { "name": "OracleSubmission" } }, 32] - } - }, - { - "name": "authority", - "docs": [ - "The public key of the authority that can update the feed hash that", - "this account will use for registering updates." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "The public key of the queue which oracles must be bound to in order to", - "submit data to this feed." - ], - "type": "pubkey" - }, - { - "name": "feed_hash", - "docs": [ - "SHA-256 hash of the job schema oracles will execute to produce data", - "for this feed." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "initialized_at", - "docs": ["The slot at which this account was initialized."], - "type": "i64" - }, - { "name": "permissions", "type": "u64" }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "padding1", "type": { "array": ["u8", 2] } }, - { "name": "historical_result_idx", "type": "u8" }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "last_update_timestamp", "type": "i64" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_reserved1", "type": { "array": ["u8", 32] } }, - { - "name": "result", - "type": { "defined": { "name": "CurrentResult" } } - }, - { "name": "max_staleness", "type": "u32" }, - { "name": "padding2", "type": { "array": ["u8", 12] } }, - { - "name": "historical_results", - "type": { - "array": [{ "defined": { "name": "CompactResult" } }, 32] - } - }, - { "name": "_ebuf4", "type": { "array": ["u8", 8] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } } - ] - } - }, - { - "name": "PullFeedCloseParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "PullFeedErrorValueEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "PullFeedInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed_hash", "type": { "array": ["u8", 32] } }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "recent_slot", "type": "u64" }, - { "name": "ipfs_hash", "type": { "array": ["u8", 32] } }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "max_staleness", "type": "u32" } - ] - } - }, - { - "name": "PullFeedSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "feed_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "max_variance", "type": { "option": "u64" } }, - { "name": "min_responses", "type": { "option": "u32" } }, - { "name": "name", "type": { "option": { "array": ["u8", 32] } } }, - { - "name": "ipfs_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "min_sample_size", "type": { "option": "u8" } }, - { "name": "max_staleness", "type": { "option": "u32" } } - ] - } - }, - { - "name": "PullFeedSubmitResponseManyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "MultiSubmission" } } } - } - ] - } - }, - { - "name": "PullFeedSubmitResponseParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "Submission" } } } - } - ] - } - }, - { - "name": "PullFeedValueEvents", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "oracles", "type": { "vec": "pubkey" } }, - { "name": "values", "type": { "vec": { "vec": "i128" } } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "QueueAccountData", - "docs": [ - "An Queue represents a round-robin queue of oracle oracles who attest on-chain", - "whether a Switchboard Function was executed within an enclave against an expected set of", - "enclave measurements.", - "", - "For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and", - "wait for an existing oracle to attest their quote. If the oracle's quote matches an expected", - "measurement within the queues mr_enclaves config, it is granted permissions and will start", - "being assigned update requests." - ], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "docs": [ - "The address of the authority which is permitted to add/remove allowed enclave measurements." - ], - "type": "pubkey" - }, - { - "name": "mr_enclaves", - "docs": ["Allowed enclave measurements."], - "type": { "array": [{ "array": ["u8", 32] }, 32] } - }, - { - "name": "oracle_keys", - "docs": [ - "The addresses of the quote oracles who have a valid", - "verification status and have heartbeated on-chain recently." - ], - "type": { "array": ["pubkey", 128] } - }, - { - "name": "max_quote_verification_age", - "docs": [ - "The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain." - ], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": [ - "The unix timestamp when the last quote oracle heartbeated on-chain." - ], - "type": "i64" - }, - { "name": "node_timeout", "type": "i64" }, - { - "name": "oracle_min_stake", - "docs": [ - "The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes." - ], - "type": "u64" - }, - { "name": "allow_authority_override_after", "type": "i64" }, - { - "name": "mr_enclaves_len", - "docs": ["The number of allowed enclave measurements."], - "type": "u32" - }, - { - "name": "oracle_keys_len", - "docs": [ - "The length of valid quote oracles for the given attestation queue." - ], - "type": "u32" - }, - { - "name": "reward", - "docs": [ - "The reward paid to quote oracles for attesting on-chain." - ], - "type": "u32" - }, - { - "name": "curr_idx", - "docs": [ - "Incrementer used to track the current quote oracle permitted to run any available functions." - ], - "type": "u32" - }, - { - "name": "gc_idx", - "docs": [ - "Incrementer used to garbage collect and remove stale quote oracles." - ], - "type": "u32" - }, - { "name": "require_authority_heartbeat_permission", "type": "u8" }, - { "name": "require_authority_verify_permission", "type": "u8" }, - { "name": "require_usage_permissions", "type": "u8" }, - { "name": "signer_bump", "type": "u8" }, - { "name": "mint", "type": "pubkey" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "allow_subsidies", "type": "u8" }, - { - "name": "_ebuf6", - "docs": ["Reserved."], - "type": { "array": ["u8", 23] } - }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueAllowSubsidiesParams", - "type": { - "kind": "struct", - "fields": [{ "name": "allow_subsidies", "type": "u8" }] - } - }, - { - "name": "QueueGarbageCollectParams", - "type": { "kind": "struct", "fields": [{ "name": "idx", "type": "u32" }] } - }, - { - "name": "QueueInitDelegationGroupParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "QueueInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "queue", "type": "pubkey" }] - } - }, - { - "name": "QueueInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "allow_authority_override_after", "type": "u32" }, - { "name": "require_authority_heartbeat_permission", "type": "bool" }, - { "name": "require_usage_permissions", "type": "bool" }, - { "name": "max_quote_verification_age", "type": "u32" }, - { "name": "reward", "type": "u32" }, - { "name": "node_timeout", "type": "u32" }, - { "name": "recent_slot", "type": "u64" } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "reward", "type": { "option": "u32" } }, - { "name": "node_timeout", "type": { "option": "i64" } } - ] - } - }, - { - "name": "Quote", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave_signer", - "docs": ["The address of the signer generated within an enclave."], - "type": "pubkey" - }, - { - "name": "mr_enclave", - "docs": [ - "The quotes MRENCLAVE measurement dictating the contents of the secure enclave." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "verification_status", - "docs": ["The VerificationStatus of the quote."], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "verification_timestamp", - "docs": ["The unix timestamp when the quote was last verified."], - "type": "i64" - }, - { - "name": "valid_until", - "docs": [ - "The unix timestamp when the quotes verification status expires." - ], - "type": "i64" - }, - { - "name": "quote_registry", - "docs": [ - "The off-chain registry where the verifiers quote can be located." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "registry_key", - "docs": [ - "Key to lookup the buffer data on IPFS or an alternative decentralized storage solution." - ], - "type": { "array": ["u8", 64] } - }, - { - "name": "secp256k1_signer", - "docs": [ - "The secp256k1 public key of the enclave signer. Derived from the enclave_signer." - ], - "type": { "array": ["u8", 64] } - }, - { "name": "last_ed25519_signer", "type": "pubkey" }, - { "name": "last_secp256k1_signer", "type": { "array": ["u8", 64] } }, - { "name": "last_rotate_slot", "type": "u64" }, - { "name": "guardian_approvers", "type": { "array": ["pubkey", 64] } }, - { "name": "guardian_approvers_len", "type": "u8" }, - { "name": "padding2", "type": { "array": ["u8", 7] } }, - { "name": "staging_ed25519_signer", "type": "pubkey" }, - { - "name": "staging_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { - "name": "_ebuf4", - "docs": ["Reserved."], - "type": { "array": ["u8", 32] } - }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "RandomnessAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "seed_slothash", "type": { "array": ["u8", 32] } }, - { "name": "seed_slot", "type": "u64" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "reveal_slot", "type": "u64" }, - { "name": "value", "type": { "array": ["u8", 32] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 128] } }, - { - "name": "active_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { "name": "active_secp256k1_expiration", "type": "i64" } - ] - } - }, - { - "name": "RandomnessCommitEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "randomness_account", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "slot", "type": "u64" }, - { "name": "slothash", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "RandomnessCommitParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "RandomnessInitParams", - "type": { - "kind": "struct", - "fields": [{ "name": "recent_slot", "type": "u64" }] - } - }, - { - "name": "RandomnessRevealParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "value", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "State", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "bump", "type": "u8" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 5] } }, - { "name": "authority", "type": "pubkey" }, - { "name": "guardian_queue", "type": "pubkey" }, - { "name": "reserved1", "type": "u64" }, - { "name": "epoch_length", "type": "u64" }, - { - "name": "current_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "next_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "finalized_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "sgx_advisories", "type": { "array": ["u16", 32] } }, - { "name": "advisories_len", "type": "u8" }, - { "name": "padding2", "type": "u8" }, - { "name": "flat_reward_cut_percentage", "type": "u8" }, - { "name": "enable_slashing", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "base_reward", "type": "u32" }, - { "name": "_ebuf6", "type": { "array": ["u8", 28] } }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 512] } }, - { - "name": "cost_whitelist", - "docs": ["Cost whitelist by authority"], - "type": { "array": ["pubkey", 32] } - } - ] - } - }, - { - "name": "StateEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "_reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" } - ] - } - }, - { "name": "StateInitParams", "type": { "kind": "struct", "fields": [] } }, - { - "name": "StateSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": "pubkey" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "add_advisory", "type": "u16" }, - { "name": "rm_advisory", "type": "u16" }, - { "name": "epoch_length", "type": "u32" }, - { "name": "reset_epochs", "type": "bool" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "base_reward", "type": "u32" }, - { "name": "add_cost_wl", "type": "pubkey" }, - { "name": "rm_cost_wl", "type": "pubkey" } - ] - } - }, - { - "name": "Submission", - "type": { - "kind": "struct", - "fields": [ - { "name": "value", "type": "i128" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "offset", "type": "u8" } - ] - } - } - ] -} diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index 7f635d6f..a29ed0a5 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -6,10 +6,9 @@ import { } from "@solana/web3.js"; import { Signer, transactionBuilder } from "@metaplex-foundation/umi"; import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; -import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; +import { AnchorProvider, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; -import switchboardIdl from "../idls/switchboard.json"; import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; import { TransactionItemInputs } from "../types"; import { @@ -18,7 +17,7 @@ import { } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; -export function getPullFeed( +export async function getPullFeed( conn: Connection, mint: PublicKey, wallet?: PublicKey @@ -37,11 +36,12 @@ export function getPullFeed( dummyWallet, AnchorProvider.defaultOptions() ); - const program = new Program(switchboardIdl as Idl, provider); + const { PullFeed, ON_DEMAND_MAINNET_PID } = OnDemand; + const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); - const { PullFeed } = OnDemand; + console.log(new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId).toString()) return new PullFeed( - program, + sbProgram, new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) ); } @@ -51,12 +51,18 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); - const [pullIx, responses] = await retryWithExponentialBackoff( + const feed = await getPullFeed( + conn, + mint, + toWeb3JsPublicKey(signer.publicKey) + ); + const gateway = await feed.fetchGatewayUrl(); + const [pullIxs, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ + gateway: gateway, chain: "solana", - network: "mainnet-beta", + network: "mainnet", }); if (!res[1] || !res[1][0].value) { throw new Error("Unable to fetch Switchboard pull IX"); @@ -67,7 +73,7 @@ export async function buildSwbSubmitResponseTx( 200 ); - if (!pullIx) { + if (!pullIxs || !pullIxs.length) { throw new Error("Unable to fetch SWB crank IX"); } @@ -81,7 +87,9 @@ export async function buildSwbSubmitResponseTx( }; return { - tx: transactionBuilder([getWrappedInstruction(signer, pullIx!)]), + tx: transactionBuilder( + pullIxs.map((x) => getWrappedInstruction(signer, x)) + ), lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), @@ -103,7 +111,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = getPullFeed(conn, mint); + const feed = await getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = From 65f71d98f9b7690a1e4f292711da72fdf34c0cd6 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Fri, 11 Jul 2025 12:55:26 -0400 Subject: [PATCH 60/83] Revert "Revert "Revert "bump versions""" This reverts commit 46dfe2432ed64642431ae47f44086d2ba03f958e. --- pnpm-lock.yaml | 217 ++- solauto-sdk/package.json | 10 +- solauto-sdk/pnpm-lock.yaml | 480 +++-- solauto-sdk/src/idls/switchboard.json | 1949 +++++++++++++++++++++ solauto-sdk/src/utils/switchboardUtils.ts | 32 +- 5 files changed, 2400 insertions(+), 288 deletions(-) create mode 100644 solauto-sdk/src/idls/switchboard.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 312f22c7..4a9acb1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,12 @@ packages: dependencies: regenerator-runtime: 0.14.1 + /@brokerloop/ttlcache@3.2.3: + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + dependencies: + '@soncodi/signal': 2.0.7 + dev: true + /@common.js/quick-lru@7.0.0: resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} engines: {node: '>=18'} @@ -131,11 +137,6 @@ packages: yargs: 17.7.2 dev: false - /@isaacs/ttlcache@1.4.1: - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - dev: true - /@js-sdsl/ordered-map@4.4.2: resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} dev: false @@ -525,16 +526,6 @@ packages: typescript: 4.9.5 dev: true - /@solana/codecs-core@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - dependencies: - '@solana/errors': 2.1.1(typescript@4.9.5) - typescript: 4.9.5 - dev: true - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5): resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} peerDependencies: @@ -584,17 +575,6 @@ packages: typescript: 4.9.5 dev: true - /@solana/codecs-numbers@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - dependencies: - '@solana/codecs-core': 2.1.1(typescript@4.9.5) - '@solana/errors': 2.1.1(typescript@4.9.5) - typescript: 4.9.5 - dev: true - /@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22): resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} peerDependencies: @@ -692,18 +672,6 @@ packages: typescript: 4.9.5 dev: true - /@solana/errors@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - dependencies: - chalk: 5.4.1 - commander: 13.1.0 - typescript: 4.9.5 - dev: true - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} peerDependencies: @@ -811,6 +779,25 @@ packages: - utf-8-validate dev: true + /@solana/spl-token@0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: true + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} @@ -977,31 +964,29 @@ packages: - encoding - utf-8-validate - /@solana/web3.js@1.98.2(typescript@4.9.5): - resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.1.1(typescript@4.9.5) - agentkeepalive: 4.5.0 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8 + '@types/bn.js': 5.1.6 + '@types/node': 18.19.67 + '@types/node-fetch': 2.6.12 bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 + decimal.js: 10.4.3 + typescript: 4.9.5 transitivePeerDependencies: - bufferutil - encoding - - typescript + - fastestsmallesttextencoderdecoder - utf-8-validate dev: true + /@soncodi/signal@2.0.7: + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + dev: true + /@sqds/multisig@2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {integrity: sha512-WOiL7La+RSiJsz7jVO85yhSiiSvNMUthiWuLPeWVOoD6IYa34BEAzanF1RdXRWGglSbRFYCTkyr+Ay1WmXmSRQ==} engines: {node: '>=14'} @@ -1030,6 +1015,28 @@ packages: dependencies: tslib: 2.7.0 + /@switchboard-xyz/common@2.5.5: + resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} + engines: {node: '>=12'} + dependencies: + '@solana/web3.js': 1.95.8 + axios: 1.7.8 + big.js: 6.2.2 + bn.js: 5.2.1 + bs58: 5.0.0 + cron-validator: 1.3.1 + decimal.js: 10.4.3 + js-sha256: 0.11.0 + lodash: 4.17.21 + protobufjs: 7.4.0 + yaml: 2.6.1 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + dev: true + /@switchboard-xyz/common@3.0.12: resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} engines: {node: '>=20'} @@ -1072,26 +1079,25 @@ packages: - utf-8-validate dev: false - /@switchboard-xyz/common@3.4.1(typescript@4.9.5): - resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} - engines: {node: '>=20'} + /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + engines: {node: '>= 18'} dependencies: - '@solana/web3.js': 1.98.2(typescript@4.9.5) - axios: 1.10.0 + '@brokerloop/ttlcache': 3.2.3 + '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 + '@solana/web3.js': 1.95.8 + '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) + '@switchboard-xyz/common': 2.5.5 + axios: 1.7.8 big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 6.0.0 - buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 + bs58: 5.0.0 + js-yaml: 4.1.0 protobufjs: 7.4.0 - yaml: 2.6.1 - zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding - - typescript + - fastestsmallesttextencoderdecoder - utf-8-validate dev: true @@ -1114,25 +1120,6 @@ packages: - utf-8-validate dev: false - /@switchboard-xyz/on-demand@2.8.1(typescript@4.9.5): - resolution: {integrity: sha512-MqUXMuqmYfhjMdFIAyFOvCYr1BeacmA3ZY6Eu2RkHJLG1X3NAKdCHR2Bj13UU/H9P7HrKhse29Sn7QdbSeEp/w==} - engines: {node: '>= 18'} - dependencies: - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@isaacs/ttlcache': 1.4.1 - '@switchboard-xyz/common': 3.4.1(typescript@4.9.5) - axios: 1.10.0 - bs58: 6.0.0 - buffer: 6.0.3 - js-yaml: 4.1.0 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - typescript - - utf-8-validate - dev: true - /@types/bn.js@5.1.6: resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} dependencies: @@ -1144,9 +1131,22 @@ packages: dependencies: '@types/node': 20.16.11 + /@types/node-fetch@2.6.12: + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + dependencies: + '@types/node': 20.16.11 + form-data: 4.0.1 + dev: true + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + /@types/node@18.19.67: + resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -1177,10 +1177,6 @@ packages: '@wallet-standard/base': 1.1.0 dev: false - /@zod/core@0.11.6: - resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} - dev: true - /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1241,16 +1237,6 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: true - /axios@1.7.8: resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: @@ -1373,11 +1359,6 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1408,11 +1389,6 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - /commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - dev: true - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1421,6 +1397,10 @@ packages: engines: {node: '>= 6'} dev: false + /cron-validator@1.3.1: + resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} + dev: true + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1768,6 +1748,10 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -2011,6 +1995,10 @@ packages: hasBin: true dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2119,12 +2107,6 @@ packages: yargs-parser: 21.1.1 dev: false - /zod@4.0.0-beta.20250505T195954: - resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} - dependencies: - '@zod/core': 0.11.6 - dev: true - file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): resolution: {directory: solauto-sdk, type: directory} id: file:solauto-sdk @@ -2140,10 +2122,9 @@ packages: '@solana/web3.js': 1.95.8 '@sqds/multisig': 2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) '@switchboard-xyz/common': 3.0.12 - '@switchboard-xyz/on-demand': 2.8.1(typescript@4.9.5) + '@switchboard-xyz/on-demand': 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) '@types/node': 20.16.11 axios: 1.7.8 - big.js: 6.2.2 bs58: 5.0.0 cross-fetch: 4.0.0 dotenv: 16.4.7 diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 75d71aa4..7093eb24 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.784", + "version": "1.0.782", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -12,16 +12,16 @@ "test:unit": "ts-mocha -p ./tsconfig.json -t 1000000 tests/unit/**/*.ts" }, "dependencies": { - "@coral-xyz/anchor": "=0.31.1", + "@coral-xyz/anchor": "^0.30.1", "@jup-ag/api": "=6.0.24", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", "@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.1", "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "=1.98.2", - "@switchboard-xyz/common": "=3.4.1", - "@switchboard-xyz/on-demand": "=2.11.0", + "@solana/web3.js": "=1.95.8", + "@switchboard-xyz/common": "=3.0.12", + "@switchboard-xyz/on-demand": "=1.2.51", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 4d59ae42..5003c773 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@coral-xyz/anchor': - specifier: '=0.31.1' - version: 0.31.1(typescript@5.6.3) + specifier: ^0.30.1 + version: 0.30.1 '@jup-ag/api': specifier: '=6.0.24' version: 6.0.24 @@ -16,25 +16,25 @@ dependencies: version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-signer-wallet-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@solana/spl-token': specifier: ^0.4.0 - version: 0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/web3.js': - specifier: '=1.98.2' - version: 1.98.2(typescript@5.6.3) + specifier: '=1.95.8' + version: 1.95.8 '@switchboard-xyz/common': - specifier: '=3.4.1' - version: 3.4.1(typescript@5.6.3) + specifier: '=3.0.12' + version: 3.0.12 '@switchboard-xyz/on-demand': - specifier: '=2.11.0' - version: 2.11.0(typescript@5.6.3) + specifier: '=1.2.51' + version: 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) axios: specifier: ^1.7.8 version: 1.7.8 @@ -89,56 +89,58 @@ packages: regenerator-runtime: 0.14.1 dev: false - /@coral-xyz/anchor-errors@0.31.1: - resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} + /@brokerloop/ttlcache@3.2.3: + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + dependencies: + '@soncodi/signal': 2.0.7 + dev: false + + /@coral-xyz/anchor-errors@0.30.1: + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} engines: {node: '>=10'} dev: false - /@coral-xyz/anchor@0.31.1(typescript@5.6.3): - resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} - engines: {node: '>=17'} + /@coral-xyz/anchor@0.30.1: + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} dependencies: - '@coral-xyz/anchor-errors': 0.31.1 - '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.2) + '@coral-xyz/anchor-errors': 0.30.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8) '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 cross-fetch: 3.1.8 + crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 + snake-case: 3.0.4 superstruct: 0.15.5 toml: 3.0.0 transitivePeerDependencies: - bufferutil - encoding - - typescript - utf-8-validate dev: false - /@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.2): - resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} + /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8): + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} engines: {node: '>=10'} peerDependencies: - '@solana/web3.js': ^1.69.0 + '@solana/web3.js': ^1.68.0 dependencies: - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false - /@isaacs/ttlcache@1.4.1: - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - dev: false - /@jup-ag/api@6.0.24: resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} dev: false - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 @@ -146,14 +148,14 @@ packages: dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 transitivePeerDependencies: - encoding dev: false @@ -166,16 +168,16 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) '@noble/curves': 1.6.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 dev: false /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -215,15 +217,15 @@ packages: '@metaplex-foundation/umi': 0.9.2 dev: false - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 dev: false /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): @@ -260,36 +262,36 @@ packages: '@metaplex-foundation/umi-serializers-numbers': 0.8.9 dev: false - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 dev: false - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8 dev: false - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2): + /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 buffer: 6.0.3 dev: false @@ -356,18 +358,17 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@solana/buffer-layout-utils@0.2.0(typescript@5.6.3): + /@solana/buffer-layout-utils@0.2.0: resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: - bufferutil - encoding - - typescript - utf-8-validate dev: false @@ -387,22 +388,21 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): + /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 dev: false - /@solana/codecs-core@2.1.1(typescript@5.6.3): - resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} - engines: {node: '>=20.18.0'} + /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5' dependencies: - '@solana/errors': 2.1.1(typescript@5.6.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -417,6 +417,17 @@ packages: typescript: 5.6.3 dev: false + /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 + dev: false + /@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3): resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -438,24 +449,23 @@ packages: typescript: 5.6.3 dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): + /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: typescript: '>=5' dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 dev: false - /@solana/codecs-numbers@2.1.1(typescript@5.6.3): - resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} - engines: {node: '>=20.18.0'} + /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5' dependencies: - '@solana/codecs-core': 2.1.1(typescript@5.6.3) - '@solana/errors': 2.1.1(typescript@5.6.3) + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) typescript: 5.6.3 dev: false @@ -472,6 +482,19 @@ packages: typescript: 5.6.3 dev: false + /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 4.9.5 + dev: false + /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -500,6 +523,21 @@ packages: - fastestsmallesttextencoderdecoder dev: false + /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: false + /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -526,7 +564,7 @@ packages: typescript: 5.6.3 dev: false - /@solana/errors@2.0.0-rc.1(typescript@5.6.3): + /@solana/errors@2.0.0-rc.1(typescript@4.9.5): resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true peerDependencies: @@ -534,18 +572,17 @@ packages: dependencies: chalk: 5.3.0 commander: 12.1.0 - typescript: 5.6.3 + typescript: 4.9.5 dev: false - /@solana/errors@2.1.1(typescript@5.6.3): - resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} - engines: {node: '>=20.18.0'} + /@solana/errors@2.0.0-rc.1(typescript@5.6.3): + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5' dependencies: - chalk: 5.4.1 - commander: 13.1.0 + chalk: 5.3.0 + commander: 12.1.0 typescript: 5.6.3 dev: false @@ -564,6 +601,21 @@ packages: - fastestsmallesttextencoderdecoder dev: false + /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + dev: false + /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -579,7 +631,7 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} peerDependencies: @@ -587,13 +639,13 @@ packages: dependencies: '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} engines: {node: '>=16'} peerDependencies: @@ -601,23 +653,56 @@ packages: dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/web3.js': 1.95.8 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token@0.4.8(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): + /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.98.0 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + dev: false + + /@solana/spl-token@0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.98.0 + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + dev: false + + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.94.0 dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(typescript@5.6.3) - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.2)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.98.2(typescript@5.6.3) + '@solana/buffer-layout-utils': 0.2.0 + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + '@solana/web3.js': 1.95.8 buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -634,15 +719,15 @@ packages: buffer: 6.0.3 dev: false - /@solana/web3.js@1.98.2(typescript@5.6.3): - resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + /@solana/web3.js@1.95.8: + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} dependencies: '@babel/runtime': 7.25.7 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.1.1(typescript@5.6.3) agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 bn.js: 5.2.1 borsh: 0.7.0 bs58: 4.0.1 @@ -655,22 +740,90 @@ packages: transitivePeerDependencies: - bufferutil - encoding - - typescript - utf-8-validate dev: false + /@solana/web3.js@1.98.0: + resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + dependencies: + '@babel/runtime': 7.25.7 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.2 + node-fetch: 2.7.0 + rpc-websockets: 9.0.4 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.98.0 + '@types/bn.js': 5.1.6 + '@types/node': 18.19.65 + '@types/node-fetch': 2.6.12 + bn.js: 5.2.1 + decimal.js: 10.4.3 + typescript: 4.9.5 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + dev: false + + /@soncodi/signal@2.0.7: + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + dev: false + /@swc/helpers@0.5.13: resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} dependencies: tslib: 2.7.0 dev: false - /@switchboard-xyz/common@3.4.1(typescript@5.6.3): - resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + /@switchboard-xyz/common@2.5.5: + resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} + engines: {node: '>=12'} + dependencies: + '@solana/web3.js': 1.98.0 + axios: 1.8.4 + big.js: 6.2.2 + bn.js: 5.2.1 + bs58: 5.0.0 + cron-validator: 1.3.1 + decimal.js: 10.4.3 + js-sha256: 0.11.0 + lodash: 4.17.21 + protobufjs: 7.4.0 + yaml: 2.6.1 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + dev: false + + /@switchboard-xyz/common@3.0.12: + resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} engines: {node: '>=20'} dependencies: - '@solana/web3.js': 1.98.2(typescript@5.6.3) - axios: 1.10.0 + '@solana/web3.js': 1.98.0 + axios: 1.8.4 big.js: 6.2.2 bn.js: 5.2.1 bs58: 6.0.0 @@ -679,32 +832,33 @@ packages: js-sha256: 0.11.0 protobufjs: 7.4.0 yaml: 2.6.1 - zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding - - typescript - utf-8-validate dev: false - /@switchboard-xyz/on-demand@2.11.0(typescript@5.6.3): - resolution: {integrity: sha512-w4iHyRpvIuv2CT2Bcap6zIdunLYcDBuMUliyJuxmxLD+ch2Lta1QWHAZCsjuBasE2OhSKoTz3MAtapYuCuR2gA==} + /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} engines: {node: '>= 18'} - dependencies: - '@coral-xyz/anchor-31': /@coral-xyz/anchor@0.31.1(typescript@5.6.3) - '@isaacs/ttlcache': 1.4.1 - '@switchboard-xyz/common': 3.4.1(typescript@5.6.3) - axios: 1.10.0 - bs58: 6.0.0 - buffer: 6.0.3 + deprecated: deprecated in favor of 2.x.x + dependencies: + '@brokerloop/ttlcache': 3.2.3 + '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 + '@solana/web3.js': 1.98.0 + '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) + '@switchboard-xyz/common': 2.5.5 + axios: 1.8.4 + big.js: 6.2.2 + bs58: 5.0.0 js-yaml: 4.1.0 - ws: 8.18.3 + protobufjs: 7.4.0 transitivePeerDependencies: - bufferutil - debug - encoding - - typescript + - fastestsmallesttextencoderdecoder - utf-8-validate dev: false @@ -712,6 +866,12 @@ packages: resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} dev: true + /@types/bn.js@5.1.6: + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + dependencies: + '@types/node': 20.16.11 + dev: false + /@types/chai@4.3.20: resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} dev: true @@ -732,10 +892,23 @@ packages: resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} dev: true + /@types/node-fetch@2.6.12: + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + dependencies: + '@types/node': 20.16.11 + form-data: 4.0.1 + dev: false + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false + /@types/node@18.19.65: + resolution: {integrity: sha512-Ay5BZuO1UkTmVHzZJNvZKw/E+iB3GQABb6kijEz89w2JrfhNA+M/ebp18pfz9Gqe9ywhMC8AA8yC01lZq48J+Q==} + dependencies: + undici-types: 5.26.5 + dev: false + /@types/node@20.16.11: resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} dependencies: @@ -761,10 +934,6 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true - /@zod/core@0.11.6: - resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} - dev: false - /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -821,8 +990,8 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + /axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -831,8 +1000,8 @@ packages: - debug dev: false - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + /axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -992,11 +1161,6 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false - /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -1049,11 +1213,6 @@ packages: engines: {node: '>=18'} dev: false - /commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -1062,6 +1221,10 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /cron-validator@1.3.1: + resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} + dev: false + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -1078,6 +1241,11 @@ packages: - encoding dev: false + /crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + dev: false + /debug@4.3.3(supports-color@8.1.1): resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -1127,6 +1295,13 @@ packages: engines: {node: '>=0.3.1'} dev: true + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.7.0 + dev: false + /dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -1405,6 +1580,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -1423,6 +1602,12 @@ packages: get-func-name: 2.0.2 dev: true + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.7.0 + dev: false + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -1507,6 +1692,13 @@ packages: hasBin: true dev: true + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.7.0 + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -1654,6 +1846,13 @@ packages: randombytes: 2.1.0 dev: true + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.7.0 + dev: false + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -1788,11 +1987,21 @@ packages: engines: {node: '>=4'} dev: true + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false + /typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -1874,19 +2083,6 @@ packages: utf-8-validate: 5.0.10 dev: false - /ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -1935,9 +2131,3 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - - /zod@4.0.0-beta.20250505T195954: - resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} - dependencies: - '@zod/core': 0.11.6 - dev: false diff --git a/solauto-sdk/src/idls/switchboard.json b/solauto-sdk/src/idls/switchboard.json new file mode 100644 index 00000000..6996121a --- /dev/null +++ b/solauto-sdk/src/idls/switchboard.json @@ -0,0 +1,1949 @@ +{ + "address": "SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv", + "metadata": { + "name": "sb_on_demand", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "guardian_quote_verify", + "discriminator": [168, 36, 93, 156, 157, 150, 148, 45], + "accounts": [ + { "name": "guardian", "writable": true }, + { "name": "oracle", "writable": true }, + { "name": "authority", "signer": true, "relations": ["oracle"] }, + { "name": "guardian_queue", "writable": true, "relations": ["state"] }, + { "name": "state" }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "GuardianQuoteVerifyParams" } } + } + ] + }, + { + "name": "guardian_register", + "discriminator": [159, 76, 53, 117, 219, 29, 116, 135], + "accounts": [ + { "name": "oracle", "writable": true }, + { "name": "state" }, + { "name": "guardian_queue", "relations": ["state"] }, + { "name": "authority", "signer": true, "relations": ["state"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "GuardianRegisterParams" } } + } + ] + }, + { + "name": "guardian_unregister", + "discriminator": [215, 19, 61, 120, 155, 224, 120, 60], + "accounts": [ + { "name": "oracle", "writable": true }, + { "name": "state" }, + { "name": "guardian_queue", "writable": true, "relations": ["state"] }, + { "name": "authority", "signer": true, "relations": ["state"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "GuardianUnregisterParams" } } + } + ] + }, + { + "name": "oracle_heartbeat", + "discriminator": [10, 175, 217, 130, 111, 35, 117, 54], + "accounts": [ + { "name": "oracle", "writable": true }, + { + "name": "oracle_stats", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "oracle_signer", "signer": true }, + { + "name": "queue", + "writable": true, + "relations": ["oracle", "gc_node"] + }, + { "name": "gc_node", "writable": true }, + { "name": "program_state", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "native_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "queue_escrow", "writable": true }, + { + "name": "stake_program", + "address": "SBSTk6t52R89MmCdD739Rdd97HdbTQUFHe41vCX7pTt", + "relations": ["program_state"] + }, + { "name": "delegation_pool", "writable": true }, + { "name": "delegation_group", "writable": true } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleHeartbeatParams" } } + } + ] + }, + { + "name": "oracle_init", + "discriminator": [21, 158, 66, 65, 60, 221, 148, 61], + "accounts": [ + { "name": "oracle", "writable": true, "signer": true }, + { + "name": "oracle_stats", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "program_state", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { "name": "stake_program", "relations": ["program_state"] }, + { "name": "stake_pool", "relations": ["program_state"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleInitParams" } } + } + ] + }, + { + "name": "oracle_set_configs", + "discriminator": [129, 111, 223, 4, 191, 188, 70, 180], + "accounts": [ + { "name": "oracle" }, + { "name": "authority", "signer": true, "relations": ["oracle"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleSetConfigsParams" } } + } + ] + }, + { + "name": "oracle_update_delegation", + "discriminator": [46, 198, 113, 223, 160, 189, 118, 90], + "accounts": [ + { "name": "oracle", "writable": true }, + { + "name": "oracle_stats", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "queue", "relations": ["oracle"] }, + { "name": "authority", "signer": true }, + { "name": "program_state", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { "name": "delegation_pool", "writable": true }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { "name": "switch_mint" }, + { + "name": "native_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "wsol_vault", "writable": true }, + { "name": "switch_vault", "writable": true }, + { "name": "stake_program", "relations": ["program_state"] }, + { "name": "stake_pool" }, + { "name": "delegation_group" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "OracleUpdateDelegationParams" } } + } + ] + }, + { + "name": "permission_set", + "discriminator": [211, 122, 185, 120, 129, 182, 55, 103], + "accounts": [ + { "name": "authority", "signer": true }, + { "name": "granter" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PermissionSetParams" } } + } + ] + }, + { + "name": "pull_feed_close", + "discriminator": [19, 134, 50, 142, 177, 215, 196, 83], + "accounts": [ + { "name": "pull_feed", "writable": true }, + { "name": "reward_escrow", "writable": true }, + { "name": "lut", "writable": true }, + { "name": "lut_signer" }, + { "name": "payer", "writable": true, "signer": true }, + { "name": "state" }, + { + "name": "authority", + "writable": true, + "signer": true, + "relations": ["pull_feed"] + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedCloseParams" } } + } + ] + }, + { + "name": "pull_feed_init", + "discriminator": [198, 130, 53, 198, 235, 61, 143, 40], + "accounts": [ + { "name": "pull_feed", "writable": true, "signer": true }, + { "name": "queue" }, + { "name": "authority" }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "program_state" }, + { + "name": "reward_escrow", + "writable": true, + "pda": { + "seeds": [ + { "kind": "account", "path": "pull_feed" }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { "kind": "account", "path": "wrapped_sol_mint" } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "wrapped_sol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedInitParams" } } + } + ] + }, + { + "name": "pull_feed_set_configs", + "discriminator": [217, 45, 11, 246, 64, 26, 82, 168], + "accounts": [ + { "name": "pull_feed", "writable": true }, + { "name": "authority", "signer": true, "relations": ["pull_feed"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedSetConfigsParams" } } + } + ] + }, + { + "name": "pull_feed_submit_response", + "discriminator": [150, 22, 215, 166, 143, 93, 48, 137], + "accounts": [ + { "name": "feed", "writable": true }, + { "name": "queue", "relations": ["feed"] }, + { "name": "program_state" }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "reward_vault", "writable": true }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "token_mint", + "address": "So11111111111111111111111111111111111111112" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedSubmitResponseParams" } } + } + ] + }, + { + "name": "pull_feed_submit_response_many", + "discriminator": [47, 156, 45, 25, 200, 71, 37, 215], + "accounts": [ + { "name": "queue" }, + { "name": "program_state" }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "reward_vault", "writable": true }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "token_mint", + "address": "So11111111111111111111111111111111111111112" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "PullFeedSubmitResponseManyParams" } } + } + ] + }, + { + "name": "queue_add_mr_enclave", + "discriminator": [199, 255, 81, 50, 60, 133, 171, 138], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "program_authority" }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueAddMrEnclaveParams" } } + } + ] + }, + { + "name": "queue_allow_subsidies", + "discriminator": [94, 203, 82, 157, 188, 138, 202, 108], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true, "relations": ["state"] }, + { "name": "state", "writable": true } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueAllowSubsidiesParams" } } + } + ] + }, + { + "name": "queue_garbage_collect", + "discriminator": [187, 208, 104, 247, 16, 91, 96, 98], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "oracle", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueGarbageCollectParams" } } + } + ] + }, + { + "name": "queue_init", + "discriminator": [144, 18, 99, 145, 133, 27, 207, 13], + "accounts": [ + { "name": "queue", "writable": true, "signer": true }, + { + "name": "queue_escrow", + "writable": true, + "pda": { + "seeds": [ + { "kind": "account", "path": "queue" }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { "kind": "account", "path": "native_mint" } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { "name": "authority" }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "native_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "program_state" }, + { "name": "lut_signer", "writable": true }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueInitParams" } } + } + ] + }, + { + "name": "queue_init_delegation_group", + "discriminator": [239, 146, 75, 158, 20, 166, 159, 14], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "program_state" }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + }, + { "name": "delegation_group", "writable": true }, + { "name": "stake_program", "relations": ["program_state"] }, + { "name": "stake_pool" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueInitDelegationGroupParams" } } + } + ] + }, + { + "name": "queue_remove_mr_enclave", + "discriminator": [3, 64, 135, 33, 190, 133, 68, 252], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "program_authority" }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueRemoveMrEnclaveParams" } } + } + ] + }, + { + "name": "queue_set_configs", + "discriminator": [54, 183, 243, 199, 49, 103, 142, 48], + "accounts": [ + { "name": "queue", "writable": true }, + { "name": "authority", "signer": true }, + { "name": "state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "QueueSetConfigsParams" } } + } + ] + }, + { + "name": "randomness_commit", + "discriminator": [52, 170, 152, 201, 179, 133, 242, 141], + "accounts": [ + { "name": "randomness", "writable": true }, + { "name": "queue", "relations": ["randomness", "oracle"] }, + { "name": "oracle", "writable": true }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { "name": "authority", "signer": true, "relations": ["randomness"] } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "RandomnessCommitParams" } } + } + ] + }, + { + "name": "randomness_init", + "discriminator": [9, 9, 204, 33, 50, 116, 113, 15], + "accounts": [ + { "name": "randomness", "writable": true, "signer": true }, + { + "name": "reward_escrow", + "writable": true, + "pda": { + "seeds": [ + { "kind": "account", "path": "randomness" }, + { + "kind": "const", + "value": [ + 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, + 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, + 245, 133, 126, 255, 0, 169 + ] + }, + { "kind": "account", "path": "wrapped_sol_mint" } + ], + "program": { + "kind": "const", + "value": [ + 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, + 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, + 219, 233, 248, 89 + ] + } + } + }, + { "name": "authority", "signer": true }, + { "name": "queue", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "wrapped_sol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "program_state" }, + { "name": "lut_signer" }, + { "name": "lut", "writable": true }, + { + "name": "address_lookup_table_program", + "address": "AddressLookupTab1e1111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "RandomnessInitParams" } } + } + ] + }, + { + "name": "randomness_reveal", + "discriminator": [197, 181, 187, 10, 30, 58, 20, 73], + "accounts": [ + { "name": "randomness", "writable": true }, + { "name": "oracle", "relations": ["randomness"] }, + { "name": "queue", "relations": ["oracle"] }, + { + "name": "stats", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110, + 101, 115, 115, 83, 116, 97, 116, 115 + ] + }, + { "kind": "account", "path": "oracle" } + ] + } + }, + { "name": "authority", "signer": true, "relations": ["randomness"] }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "recent_slothashes", + "address": "SysvarS1otHashes111111111111111111111111111" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { "name": "reward_escrow", "writable": true }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "wrapped_sol_mint", + "address": "So11111111111111111111111111111111111111112" + }, + { "name": "program_state" } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "RandomnessRevealParams" } } + } + ] + }, + { + "name": "state_init", + "discriminator": [103, 241, 106, 190, 217, 153, 87, 105], + "accounts": [ + { + "name": "state", + "writable": true, + "pda": { + "seeds": [{ "kind": "const", "value": [83, 84, 65, 84, 69] }] + } + }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "StateInitParams" } } + } + ] + }, + { + "name": "state_set_configs", + "discriminator": [40, 98, 76, 37, 206, 9, 47, 144], + "accounts": [ + { "name": "state", "writable": true }, + { "name": "authority", "signer": true, "relations": ["state"] }, + { "name": "queue", "writable": true }, + { "name": "payer", "writable": true, "signer": true }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "params", + "type": { "defined": { "name": "StateSetConfigsParams" } } + } + ] + } + ], + "accounts": [ + { + "name": "OracleAccountData", + "discriminator": [128, 30, 16, 241, 170, 73, 55, 54] + }, + { + "name": "OracleStatsAccountData", + "discriminator": [180, 157, 178, 234, 240, 27, 152, 179] + }, + { + "name": "PullFeedAccountData", + "discriminator": [196, 27, 108, 196, 10, 215, 219, 40] + }, + { + "name": "QueueAccountData", + "discriminator": [217, 194, 55, 127, 184, 83, 138, 1] + }, + { + "name": "RandomnessAccountData", + "discriminator": [10, 66, 229, 135, 220, 239, 217, 114] + }, + { "name": "State", "discriminator": [216, 146, 107, 94, 104, 75, 182, 177] } + ], + "events": [ + { + "name": "CostWhitelistEvent", + "discriminator": [56, 107, 191, 127, 116, 6, 138, 149] + }, + { + "name": "GarbageCollectionEvent", + "discriminator": [232, 235, 2, 188, 8, 143, 145, 237] + }, + { + "name": "GuardianQuoteVerifyEvent", + "discriminator": [31, 37, 39, 6, 214, 186, 33, 115] + }, + { + "name": "OracleHeartbeatEvent", + "discriminator": [52, 29, 166, 2, 94, 7, 188, 13] + }, + { + "name": "OracleInitEvent", + "discriminator": [89, 193, 219, 200, 1, 83, 167, 24] + }, + { + "name": "OracleQuoteOverrideEvent", + "discriminator": [78, 204, 191, 210, 164, 196, 244, 65] + }, + { + "name": "OracleQuoteRotateEvent", + "discriminator": [26, 189, 196, 192, 225, 127, 26, 228] + }, + { + "name": "OracleQuoteVerifyRequestEvent", + "discriminator": [203, 209, 79, 0, 20, 71, 226, 202] + }, + { + "name": "PermissionSetEvent", + "discriminator": [148, 86, 123, 0, 102, 20, 119, 206] + }, + { + "name": "PullFeedErrorValueEvent", + "discriminator": [225, 80, 192, 95, 14, 12, 83, 192] + }, + { + "name": "PullFeedValueEvents", + "discriminator": [86, 7, 231, 28, 122, 161, 117, 69] + }, + { + "name": "QueueAddMrEnclaveEvent", + "discriminator": [170, 186, 175, 38, 216, 51, 69, 175] + }, + { + "name": "QueueInitEvent", + "discriminator": [44, 137, 99, 227, 107, 8, 30, 105] + }, + { + "name": "QueueRemoveMrEnclaveEvent", + "discriminator": [4, 105, 196, 60, 84, 122, 203, 196] + }, + { + "name": "RandomnessCommitEvent", + "discriminator": [88, 60, 172, 90, 112, 10, 206, 147] + } + ], + "errors": [ + { "code": 6000, "name": "GenericError" }, + { "code": 6001, "name": "InvalidQuote" }, + { "code": 6002, "name": "InsufficientQueue" }, + { "code": 6003, "name": "QueueFull" }, + { "code": 6004, "name": "InvalidEnclaveSigner" }, + { "code": 6005, "name": "InvalidSigner" }, + { "code": 6006, "name": "MrEnclaveAlreadyExists" }, + { "code": 6007, "name": "MrEnclaveAtCapacity" }, + { "code": 6008, "name": "MrEnclaveDoesntExist" }, + { "code": 6009, "name": "PermissionDenied" }, + { "code": 6010, "name": "InvalidQueue" }, + { "code": 6011, "name": "IncorrectMrEnclave" }, + { "code": 6012, "name": "InvalidAuthority" }, + { "code": 6013, "name": "InvalidMrEnclave" }, + { "code": 6014, "name": "InvalidTimestamp" }, + { "code": 6015, "name": "InvalidOracleIdx" }, + { "code": 6016, "name": "InvalidSecpSignature" }, + { "code": 6017, "name": "InvalidGuardianQueue" }, + { "code": 6018, "name": "InvalidIndex" }, + { "code": 6019, "name": "InvalidOracleQueue" }, + { "code": 6020, "name": "InvalidPermission" }, + { "code": 6021, "name": "InvalidePermissionedAccount" }, + { "code": 6022, "name": "InvalidEpochRotate" }, + { "code": 6023, "name": "InvalidEpochFinalize" }, + { "code": 6024, "name": "InvalidEscrow" }, + { "code": 6025, "name": "IllegalOracle" }, + { "code": 6026, "name": "IllegalExecuteAttempt" }, + { "code": 6027, "name": "IllegalFeedValue" }, + { "code": 6028, "name": "InvalidOracleFeedStats" }, + { "code": 6029, "name": "InvalidStateAuthority" }, + { "code": 6030, "name": "NotEnoughSamples" }, + { "code": 6031, "name": "OracleIsVerified" }, + { "code": 6032, "name": "QueueIsEmpty" }, + { "code": 6033, "name": "SecpRecoverFailure" }, + { "code": 6034, "name": "StaleSample" }, + { "code": 6035, "name": "SwitchboardRandomnessTooOld" }, + { "code": 6036, "name": "EpochIdMismatch" }, + { "code": 6037, "name": "GuardianAlreadyVoted" }, + { "code": 6038, "name": "RandomnessNotRequested" }, + { "code": 6039, "name": "InvalidSlotNumber" }, + { "code": 6040, "name": "RandomnessOracleKeyExpired" }, + { "code": 6041, "name": "InvalidAdvisory" }, + { "code": 6042, "name": "InvalidOracleStats" }, + { "code": 6043, "name": "InvalidStakeProgram" }, + { "code": 6044, "name": "InvalidStakePool" }, + { "code": 6045, "name": "InvalidDelegationPool" }, + { "code": 6046, "name": "UnparsableAccount" }, + { "code": 6047, "name": "InvalidInstruction" }, + { "code": 6048, "name": "OracleAlreadyVerified" }, + { "code": 6049, "name": "GuardianNotVerified" }, + { "code": 6050, "name": "InvalidConstraint" }, + { "code": 6051, "name": "InvalidDelegationGroup" }, + { "code": 6052, "name": "OracleKeyNotFound" }, + { "code": 6053, "name": "GuardianReregisterAttempt" } + ], + "types": [ + { + "name": "CompactResult", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "std_dev", + "docs": [ + "The standard deviation of the submissions needed for quorom size" + ], + "type": "f32" + }, + { + "name": "mean", + "docs": ["The mean of the submissions needed for quorom size"], + "type": "f32" + }, + { + "name": "slot", + "docs": ["The slot at which this value was signed."], + "type": "u64" + } + ] + } + }, + { + "name": "CostWhitelistEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "feeds", "type": { "vec": "pubkey" } }, + { "name": "reward", "type": "u32" } + ] + } + }, + { + "name": "CurrentResult", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "value", + "docs": [ + "The median value of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "std_dev", + "docs": [ + "The standard deviation of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "mean", + "docs": ["The mean of the submissions needed for quorom size"], + "type": "i128" + }, + { + "name": "range", + "docs": ["The range of the submissions needed for quorom size"], + "type": "i128" + }, + { + "name": "min_value", + "docs": [ + "The minimum value of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "max_value", + "docs": [ + "The maximum value of the submissions needed for quorom size" + ], + "type": "i128" + }, + { + "name": "num_samples", + "docs": ["The number of samples used to calculate this result"], + "type": "u8" + }, + { "name": "padding1", "type": { "array": ["u8", 7] } }, + { + "name": "slot", + "docs": ["The slot at which this value was signed."], + "type": "u64" + }, + { + "name": "min_slot", + "docs": [ + "The slot at which the first considered submission was made" + ], + "type": "u64" + }, + { + "name": "max_slot", + "docs": [ + "The slot at which the last considered submission was made" + ], + "type": "u64" + } + ] + } + }, + { + "name": "GarbageCollectionEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "oracle", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" } + ] + } + }, + { + "name": "GuardianQuoteVerifyEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "quote", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" } + ] + } + }, + { + "name": "GuardianQuoteVerifyParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "timestamp", "type": "i64" }, + { "name": "mr_enclave", "type": { "array": ["u8", 32] } }, + { "name": "_reserved1", "type": "u32" }, + { "name": "ed25519_key", "type": "pubkey" }, + { "name": "secp256k1_key", "type": { "array": ["u8", 64] } }, + { "name": "slot", "type": "u64" }, + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" }, + { "name": "advisories", "type": { "vec": "u32" } } + ] + } + }, + { + "name": "GuardianRegisterParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "GuardianUnregisterParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "MegaSlotInfo", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "reserved1", "type": "u64" }, + { "name": "slot_end", "type": "u64" }, + { "name": "perf_goal", "type": "i64" }, + { "name": "current_signature_count", "type": "i64" } + ] + } + }, + { + "name": "MultiSubmission", + "type": { + "kind": "struct", + "fields": [ + { "name": "values", "type": { "vec": "i128" } }, + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" } + ] + } + }, + { + "name": "OracleAccountData", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "enclave", + "docs": ["Represents the state of the quote verifiers enclave."], + "type": { "defined": { "name": "Quote" } } + }, + { + "name": "authority", + "docs": [ + "The authority of the EnclaveAccount which is permitted to make account changes." + ], + "type": "pubkey" + }, + { + "name": "queue", + "docs": [ + "Queue used for attestation to verify a MRENCLAVE measurement." + ], + "type": "pubkey" + }, + { + "name": "created_at", + "docs": ["The unix timestamp when the quote was created."], + "type": "i64" + }, + { + "name": "last_heartbeat", + "docs": ["The last time the quote heartbeated on-chain."], + "type": "i64" + }, + { "name": "secp_authority", "type": { "array": ["u8", 64] } }, + { + "name": "gateway_uri", + "docs": ["URI location of the verifier's gateway."], + "type": { "array": ["u8", 64] } + }, + { "name": "permissions", "type": "u64" }, + { + "name": "is_on_queue", + "docs": [ + "Whether the quote is located on the AttestationQueues buffer." + ], + "type": "u8" + }, + { "name": "_padding1", "type": { "array": ["u8", 7] } }, + { "name": "lut_slot", "type": "u64" }, + { "name": "last_reward_epoch", "type": "u64" }, + { "name": "_ebuf4", "type": { "array": ["u8", 16] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 32] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 1024] } } + ] + } + }, + { + "name": "OracleEpochInfo", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "id", "type": "u64" }, + { "name": "reserved1", "type": "u64" }, + { "name": "slot_end", "type": "u64" }, + { "name": "slash_score", "type": "u64" }, + { "name": "reward_score", "type": "u64" }, + { "name": "stake_score", "type": "u64" } + ] + } + }, + { + "name": "OracleHeartbeatEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "oracle", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" } + ] + } + }, + { + "name": "OracleHeartbeatParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "gateway_uri", + "type": { "option": { "array": ["u8", 64] } } + } + ] + } + }, + { + "name": "OracleInitEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "oracle", "type": "pubkey" }] + } + }, + { + "name": "OracleInitParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "recent_slot", "type": "u64" }, + { "name": "authority", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" }, + { + "name": "secp_authority", + "type": { "option": { "array": ["u8", 64] } } + } + ] + } + }, + { + "name": "OracleQuoteOverrideEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "oracle", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" } + ] + } + }, + { + "name": "OracleQuoteRotateEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "oracle", "type": "pubkey" }] + } + }, + { + "name": "OracleQuoteVerifyRequestEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "quote", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" } + ] + } + }, + { + "name": "OracleSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "new_authority", "type": { "option": "pubkey" } }, + { + "name": "new_secp_authority", + "type": { "option": { "array": ["u8", 64] } } + } + ] + } + }, + { + "name": "OracleStatsAccountData", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "owner", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" }, + { + "name": "finalized_epoch", + "docs": [ + "The last epoch that has completed. cleared after registered with the", + "staking program." + ], + "type": { "defined": { "name": "OracleEpochInfo" } } + }, + { + "name": "current_epoch", + "docs": [ + "The current epoch info being used by the oracle. for stake. Will moved", + "to finalized_epoch as soon as the epoch is over." + ], + "type": { "defined": { "name": "OracleEpochInfo" } } + }, + { + "name": "mega_slot_info", + "type": { "defined": { "name": "MegaSlotInfo" } } + }, + { "name": "last_transfer_slot", "type": "u64" }, + { "name": "bump", "type": "u8" }, + { "name": "padding1", "type": { "array": ["u8", 7] } }, + { + "name": "_ebuf", + "docs": ["Reserved."], + "type": { "array": ["u8", 1024] } + } + ] + } + }, + { + "name": "OracleSubmission", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "oracle", + "docs": ["The public key of the oracle that submitted this value."], + "type": "pubkey" + }, + { + "name": "slot", + "docs": ["The slot at which this value was signed."], + "type": "u64" + }, + { "name": "padding1", "type": { "array": ["u8", 8] } }, + { + "name": "value", + "docs": ["The value that was submitted."], + "type": "i128" + } + ] + } + }, + { + "name": "OracleUpdateDelegationParams", + "type": { + "kind": "struct", + "fields": [{ "name": "_reserved1", "type": "u64" }] + } + }, + { + "name": "PermissionSetEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "permission", "type": "pubkey" }] + } + }, + { + "name": "PermissionSetParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "permission", "type": "u8" }, + { "name": "enable", "type": "bool" } + ] + } + }, + { + "name": "PullFeedAccountData", + "docs": ["A representation of the data in a pull feed account."], + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "submissions", + "docs": ["The oracle submissions for this feed."], + "type": { + "array": [{ "defined": { "name": "OracleSubmission" } }, 32] + } + }, + { + "name": "authority", + "docs": [ + "The public key of the authority that can update the feed hash that", + "this account will use for registering updates." + ], + "type": "pubkey" + }, + { + "name": "queue", + "docs": [ + "The public key of the queue which oracles must be bound to in order to", + "submit data to this feed." + ], + "type": "pubkey" + }, + { + "name": "feed_hash", + "docs": [ + "SHA-256 hash of the job schema oracles will execute to produce data", + "for this feed." + ], + "type": { "array": ["u8", 32] } + }, + { + "name": "initialized_at", + "docs": ["The slot at which this account was initialized."], + "type": "i64" + }, + { "name": "permissions", "type": "u64" }, + { "name": "max_variance", "type": "u64" }, + { "name": "min_responses", "type": "u32" }, + { "name": "name", "type": { "array": ["u8", 32] } }, + { "name": "padding1", "type": { "array": ["u8", 2] } }, + { "name": "historical_result_idx", "type": "u8" }, + { "name": "min_sample_size", "type": "u8" }, + { "name": "last_update_timestamp", "type": "i64" }, + { "name": "lut_slot", "type": "u64" }, + { "name": "_reserved1", "type": { "array": ["u8", 32] } }, + { + "name": "result", + "type": { "defined": { "name": "CurrentResult" } } + }, + { "name": "max_staleness", "type": "u32" }, + { "name": "padding2", "type": { "array": ["u8", 12] } }, + { + "name": "historical_results", + "type": { + "array": [{ "defined": { "name": "CompactResult" } }, 32] + } + }, + { "name": "_ebuf4", "type": { "array": ["u8", 8] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 256] } } + ] + } + }, + { + "name": "PullFeedCloseParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "PullFeedErrorValueEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "feed", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" } + ] + } + }, + { + "name": "PullFeedInitParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "feed_hash", "type": { "array": ["u8", 32] } }, + { "name": "max_variance", "type": "u64" }, + { "name": "min_responses", "type": "u32" }, + { "name": "name", "type": { "array": ["u8", 32] } }, + { "name": "recent_slot", "type": "u64" }, + { "name": "ipfs_hash", "type": { "array": ["u8", 32] } }, + { "name": "min_sample_size", "type": "u8" }, + { "name": "max_staleness", "type": "u32" } + ] + } + }, + { + "name": "PullFeedSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { + "name": "feed_hash", + "type": { "option": { "array": ["u8", 32] } } + }, + { "name": "authority", "type": { "option": "pubkey" } }, + { "name": "max_variance", "type": { "option": "u64" } }, + { "name": "min_responses", "type": { "option": "u32" } }, + { "name": "name", "type": { "option": { "array": ["u8", 32] } } }, + { + "name": "ipfs_hash", + "type": { "option": { "array": ["u8", 32] } } + }, + { "name": "min_sample_size", "type": { "option": "u8" } }, + { "name": "max_staleness", "type": { "option": "u32" } } + ] + } + }, + { + "name": "PullFeedSubmitResponseManyParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "slot", "type": "u64" }, + { + "name": "submissions", + "type": { "vec": { "defined": { "name": "MultiSubmission" } } } + } + ] + } + }, + { + "name": "PullFeedSubmitResponseParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "slot", "type": "u64" }, + { + "name": "submissions", + "type": { "vec": { "defined": { "name": "Submission" } } } + } + ] + } + }, + { + "name": "PullFeedValueEvents", + "type": { + "kind": "struct", + "fields": [ + { "name": "feeds", "type": { "vec": "pubkey" } }, + { "name": "oracles", "type": { "vec": "pubkey" } }, + { "name": "values", "type": { "vec": { "vec": "i128" } } }, + { "name": "reward", "type": "u32" } + ] + } + }, + { + "name": "QueueAccountData", + "docs": [ + "An Queue represents a round-robin queue of oracle oracles who attest on-chain", + "whether a Switchboard Function was executed within an enclave against an expected set of", + "enclave measurements.", + "", + "For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and", + "wait for an existing oracle to attest their quote. If the oracle's quote matches an expected", + "measurement within the queues mr_enclaves config, it is granted permissions and will start", + "being assigned update requests." + ], + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "authority", + "docs": [ + "The address of the authority which is permitted to add/remove allowed enclave measurements." + ], + "type": "pubkey" + }, + { + "name": "mr_enclaves", + "docs": ["Allowed enclave measurements."], + "type": { "array": [{ "array": ["u8", 32] }, 32] } + }, + { + "name": "oracle_keys", + "docs": [ + "The addresses of the quote oracles who have a valid", + "verification status and have heartbeated on-chain recently." + ], + "type": { "array": ["pubkey", 128] } + }, + { + "name": "max_quote_verification_age", + "docs": [ + "The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain." + ], + "type": "i64" + }, + { + "name": "last_heartbeat", + "docs": [ + "The unix timestamp when the last quote oracle heartbeated on-chain." + ], + "type": "i64" + }, + { "name": "node_timeout", "type": "i64" }, + { + "name": "oracle_min_stake", + "docs": [ + "The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes." + ], + "type": "u64" + }, + { "name": "allow_authority_override_after", "type": "i64" }, + { + "name": "mr_enclaves_len", + "docs": ["The number of allowed enclave measurements."], + "type": "u32" + }, + { + "name": "oracle_keys_len", + "docs": [ + "The length of valid quote oracles for the given attestation queue." + ], + "type": "u32" + }, + { + "name": "reward", + "docs": [ + "The reward paid to quote oracles for attesting on-chain." + ], + "type": "u32" + }, + { + "name": "curr_idx", + "docs": [ + "Incrementer used to track the current quote oracle permitted to run any available functions." + ], + "type": "u32" + }, + { + "name": "gc_idx", + "docs": [ + "Incrementer used to garbage collect and remove stale quote oracles." + ], + "type": "u32" + }, + { "name": "require_authority_heartbeat_permission", "type": "u8" }, + { "name": "require_authority_verify_permission", "type": "u8" }, + { "name": "require_usage_permissions", "type": "u8" }, + { "name": "signer_bump", "type": "u8" }, + { "name": "mint", "type": "pubkey" }, + { "name": "lut_slot", "type": "u64" }, + { "name": "allow_subsidies", "type": "u8" }, + { + "name": "_ebuf6", + "docs": ["Reserved."], + "type": { "array": ["u8", 23] } + }, + { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, + { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 512] } } + ] + } + }, + { + "name": "QueueAddMrEnclaveEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "queue", "type": "pubkey" }, + { "name": "mr_enclave", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "QueueAddMrEnclaveParams", + "type": { + "kind": "struct", + "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] + } + }, + { + "name": "QueueAllowSubsidiesParams", + "type": { + "kind": "struct", + "fields": [{ "name": "allow_subsidies", "type": "u8" }] + } + }, + { + "name": "QueueGarbageCollectParams", + "type": { "kind": "struct", "fields": [{ "name": "idx", "type": "u32" }] } + }, + { + "name": "QueueInitDelegationGroupParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "QueueInitEvent", + "type": { + "kind": "struct", + "fields": [{ "name": "queue", "type": "pubkey" }] + } + }, + { + "name": "QueueInitParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "allow_authority_override_after", "type": "u32" }, + { "name": "require_authority_heartbeat_permission", "type": "bool" }, + { "name": "require_usage_permissions", "type": "bool" }, + { "name": "max_quote_verification_age", "type": "u32" }, + { "name": "reward", "type": "u32" }, + { "name": "node_timeout", "type": "u32" }, + { "name": "recent_slot", "type": "u64" } + ] + } + }, + { + "name": "QueueRemoveMrEnclaveEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "queue", "type": "pubkey" }, + { "name": "mr_enclave", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "QueueRemoveMrEnclaveParams", + "type": { + "kind": "struct", + "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] + } + }, + { + "name": "QueueSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "authority", "type": { "option": "pubkey" } }, + { "name": "reward", "type": { "option": "u32" } }, + { "name": "node_timeout", "type": { "option": "i64" } } + ] + } + }, + { + "name": "Quote", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "enclave_signer", + "docs": ["The address of the signer generated within an enclave."], + "type": "pubkey" + }, + { + "name": "mr_enclave", + "docs": [ + "The quotes MRENCLAVE measurement dictating the contents of the secure enclave." + ], + "type": { "array": ["u8", 32] } + }, + { + "name": "verification_status", + "docs": ["The VerificationStatus of the quote."], + "type": "u8" + }, + { "name": "padding1", "type": { "array": ["u8", 7] } }, + { + "name": "verification_timestamp", + "docs": ["The unix timestamp when the quote was last verified."], + "type": "i64" + }, + { + "name": "valid_until", + "docs": [ + "The unix timestamp when the quotes verification status expires." + ], + "type": "i64" + }, + { + "name": "quote_registry", + "docs": [ + "The off-chain registry where the verifiers quote can be located." + ], + "type": { "array": ["u8", 32] } + }, + { + "name": "registry_key", + "docs": [ + "Key to lookup the buffer data on IPFS or an alternative decentralized storage solution." + ], + "type": { "array": ["u8", 64] } + }, + { + "name": "secp256k1_signer", + "docs": [ + "The secp256k1 public key of the enclave signer. Derived from the enclave_signer." + ], + "type": { "array": ["u8", 64] } + }, + { "name": "last_ed25519_signer", "type": "pubkey" }, + { "name": "last_secp256k1_signer", "type": { "array": ["u8", 64] } }, + { "name": "last_rotate_slot", "type": "u64" }, + { "name": "guardian_approvers", "type": { "array": ["pubkey", 64] } }, + { "name": "guardian_approvers_len", "type": "u8" }, + { "name": "padding2", "type": { "array": ["u8", 7] } }, + { "name": "staging_ed25519_signer", "type": "pubkey" }, + { + "name": "staging_secp256k1_signer", + "type": { "array": ["u8", 64] } + }, + { + "name": "_ebuf4", + "docs": ["Reserved."], + "type": { "array": ["u8", 32] } + }, + { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 512] } } + ] + } + }, + { + "name": "RandomnessAccountData", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "authority", "type": "pubkey" }, + { "name": "queue", "type": "pubkey" }, + { "name": "seed_slothash", "type": { "array": ["u8", 32] } }, + { "name": "seed_slot", "type": "u64" }, + { "name": "oracle", "type": "pubkey" }, + { "name": "reveal_slot", "type": "u64" }, + { "name": "value", "type": { "array": ["u8", 32] } }, + { "name": "lut_slot", "type": "u64" }, + { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf1", "type": { "array": ["u8", 128] } }, + { + "name": "active_secp256k1_signer", + "type": { "array": ["u8", 64] } + }, + { "name": "active_secp256k1_expiration", "type": "i64" } + ] + } + }, + { + "name": "RandomnessCommitEvent", + "type": { + "kind": "struct", + "fields": [ + { "name": "randomness_account", "type": "pubkey" }, + { "name": "oracle", "type": "pubkey" }, + { "name": "slot", "type": "u64" }, + { "name": "slothash", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "RandomnessCommitParams", + "type": { "kind": "struct", "fields": [] } + }, + { + "name": "RandomnessInitParams", + "type": { + "kind": "struct", + "fields": [{ "name": "recent_slot", "type": "u64" }] + } + }, + { + "name": "RandomnessRevealParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" }, + { "name": "value", "type": { "array": ["u8", 32] } } + ] + } + }, + { + "name": "State", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "bump", "type": "u8" }, + { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, + { "name": "enable_staking", "type": "u8" }, + { "name": "padding1", "type": { "array": ["u8", 5] } }, + { "name": "authority", "type": "pubkey" }, + { "name": "guardian_queue", "type": "pubkey" }, + { "name": "reserved1", "type": "u64" }, + { "name": "epoch_length", "type": "u64" }, + { + "name": "current_epoch", + "type": { "defined": { "name": "StateEpochInfo" } } + }, + { + "name": "next_epoch", + "type": { "defined": { "name": "StateEpochInfo" } } + }, + { + "name": "finalized_epoch", + "type": { "defined": { "name": "StateEpochInfo" } } + }, + { "name": "stake_pool", "type": "pubkey" }, + { "name": "stake_program", "type": "pubkey" }, + { "name": "switch_mint", "type": "pubkey" }, + { "name": "sgx_advisories", "type": { "array": ["u16", 32] } }, + { "name": "advisories_len", "type": "u8" }, + { "name": "padding2", "type": "u8" }, + { "name": "flat_reward_cut_percentage", "type": "u8" }, + { "name": "enable_slashing", "type": "u8" }, + { "name": "subsidy_amount", "type": "u32" }, + { "name": "lut_slot", "type": "u64" }, + { "name": "base_reward", "type": "u32" }, + { "name": "_ebuf6", "type": { "array": ["u8", 28] } }, + { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, + { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, + { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, + { "name": "_ebuf2", "type": { "array": ["u8", 512] } }, + { + "name": "cost_whitelist", + "docs": ["Cost whitelist by authority"], + "type": { "array": ["pubkey", 32] } + } + ] + } + }, + { + "name": "StateEpochInfo", + "serialization": "bytemuck", + "repr": { "kind": "c" }, + "type": { + "kind": "struct", + "fields": [ + { "name": "id", "type": "u64" }, + { "name": "_reserved1", "type": "u64" }, + { "name": "slot_end", "type": "u64" } + ] + } + }, + { "name": "StateInitParams", "type": { "kind": "struct", "fields": [] } }, + { + "name": "StateSetConfigsParams", + "type": { + "kind": "struct", + "fields": [ + { "name": "new_authority", "type": "pubkey" }, + { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, + { "name": "stake_pool", "type": "pubkey" }, + { "name": "stake_program", "type": "pubkey" }, + { "name": "add_advisory", "type": "u16" }, + { "name": "rm_advisory", "type": "u16" }, + { "name": "epoch_length", "type": "u32" }, + { "name": "reset_epochs", "type": "bool" }, + { "name": "switch_mint", "type": "pubkey" }, + { "name": "enable_staking", "type": "u8" }, + { "name": "subsidy_amount", "type": "u32" }, + { "name": "base_reward", "type": "u32" }, + { "name": "add_cost_wl", "type": "pubkey" }, + { "name": "rm_cost_wl", "type": "pubkey" } + ] + } + }, + { + "name": "Submission", + "type": { + "kind": "struct", + "fields": [ + { "name": "value", "type": "i128" }, + { "name": "signature", "type": { "array": ["u8", 64] } }, + { "name": "recovery_id", "type": "u8" }, + { "name": "offset", "type": "u8" } + ] + } + } + ] +} diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index a29ed0a5..7f635d6f 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -6,9 +6,10 @@ import { } from "@solana/web3.js"; import { Signer, transactionBuilder } from "@metaplex-foundation/umi"; import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; -import { AnchorProvider, Program } from "@coral-xyz/anchor"; +import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; +import switchboardIdl from "../idls/switchboard.json"; import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; import { TransactionItemInputs } from "../types"; import { @@ -17,7 +18,7 @@ import { } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; -export async function getPullFeed( +export function getPullFeed( conn: Connection, mint: PublicKey, wallet?: PublicKey @@ -36,12 +37,11 @@ export async function getPullFeed( dummyWallet, AnchorProvider.defaultOptions() ); - const { PullFeed, ON_DEMAND_MAINNET_PID } = OnDemand; - const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); + const program = new Program(switchboardIdl as Idl, provider); - console.log(new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId).toString()) + const { PullFeed } = OnDemand; return new PullFeed( - sbProgram, + program, new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) ); } @@ -51,18 +51,12 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = await getPullFeed( - conn, - mint, - toWeb3JsPublicKey(signer.publicKey) - ); - const gateway = await feed.fetchGatewayUrl(); - const [pullIxs, responses] = await retryWithExponentialBackoff( + const feed = getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); + const [pullIx, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ - gateway: gateway, chain: "solana", - network: "mainnet", + network: "mainnet-beta", }); if (!res[1] || !res[1][0].value) { throw new Error("Unable to fetch Switchboard pull IX"); @@ -73,7 +67,7 @@ export async function buildSwbSubmitResponseTx( 200 ); - if (!pullIxs || !pullIxs.length) { + if (!pullIx) { throw new Error("Unable to fetch SWB crank IX"); } @@ -87,9 +81,7 @@ export async function buildSwbSubmitResponseTx( }; return { - tx: transactionBuilder( - pullIxs.map((x) => getWrappedInstruction(signer, x)) - ), + tx: transactionBuilder([getWrappedInstruction(signer, pullIx!)]), lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), @@ -111,7 +103,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = await getPullFeed(conn, mint); + const feed = getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = From d9498636adaaed58eeed3af2832ebaaa27c82e3f Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 17 Jul 2025 14:41:08 -0400 Subject: [PATCH 61/83] fixes --- generateClients.cjs | 59 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/generateClients.cjs b/generateClients.cjs index c65890e3..28fad739 100644 --- a/generateClients.cjs +++ b/generateClients.cjs @@ -28,6 +28,45 @@ function fixAnchorIDL(idlFilename, programId) { origin: "anchor", address: programId, }; + + function flattenDefined(data) { + if (typeof data === "object" && data !== null) { + if (Array.isArray(data)) { + return data.map(flattenDefined); + } else if (data.defined && typeof data.defined === "object") { + return { ...data, defined: data.defined.name }; + } else { + return Object.keys(data).reduce((acc, key) => { + acc[key] = flattenDefined(data[key]); + return acc; + }, {}); + } + } + return data; + } + + data = flattenDefined(data); + + function replacePubkeyWithPublicKey(data) { + if (typeof data === "object" && data !== null) { + if (Array.isArray(data)) { + return data.map(replacePubkeyWithPublicKey); + } else { + return Object.keys(data).reduce((acc, key) => { + if (key === "pubkey") { + acc["publicKey"] = data[key]; + } else { + acc[key] = replacePubkeyWithPublicKey(data[key]); + } + return acc; + }, {}); + } + } + return data; + } + + data = replacePubkeyWithPublicKey(data); + fs.writeFileSync(idlFilePath, JSON.stringify(data, null, 2), "utf8"); } @@ -92,16 +131,16 @@ async function cleanJupiterTsSDK(exclusions = []) { generateSolautoSDK(); -// generateRustSDKForAnchorIDL( -// "marginfi-sdk", -// "marginfi.json", -// "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" -// ); -// generateTypescriptSDKForAnchorIDL( -// "marginfiSdk", -// "marginfi.json", -// "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" -// ); +generateRustSDKForAnchorIDL( + "marginfi-sdk", + "marginfi.json", + "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" +); +generateTypescriptSDKForAnchorIDL( + "marginfiSdk", + "marginfi.json", + "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" +); // generateRustSDKForAnchorIDL( // "jupiter-sdk", From fa13e29d6c4e4874b595c4f6ec39066a2722148c Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 17 Jul 2025 15:20:00 -0400 Subject: [PATCH 62/83] small fix --- generateClients.cjs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/generateClients.cjs b/generateClients.cjs index 28fad739..65eda860 100644 --- a/generateClients.cjs +++ b/generateClients.cjs @@ -89,7 +89,9 @@ function generateTypescriptSDKForAnchorIDL(sdkDirName, idlFilename, programId) { const kinobi = k.createFromIdls([idlFilePath]); kinobi.accept( - new k.renderJavaScriptVisitor(path.join(typescriptSdkDir, sdkDirName)) + new k.renderJavaScriptVisitor( + path.join(typescriptSdkDir, "externalSdks", sdkDirName) + ) ); } @@ -137,7 +139,7 @@ generateRustSDKForAnchorIDL( "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" ); generateTypescriptSDKForAnchorIDL( - "marginfiSdk", + "marginfi", "marginfi.json", "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" ); @@ -148,12 +150,12 @@ generateTypescriptSDKForAnchorIDL( // "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" // ); // generateTypescriptSDKForAnchorIDL( -// "jupiterSdk", +// "jupiter", // "jupiter.json", // "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" // ); // generateTypescriptSDKForAnchorIDL( -// "pythSdk", +// "pyth", // "pyth.json", // "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" // ); From 7c035afc791eb1266489b9876c1f606349868b8b Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 17 Jul 2025 15:45:39 -0400 Subject: [PATCH 63/83] fixes --- generateClients.cjs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/generateClients.cjs b/generateClients.cjs index 65eda860..73edb58c 100644 --- a/generateClients.cjs +++ b/generateClients.cjs @@ -55,12 +55,16 @@ function fixAnchorIDL(idlFilename, programId) { return Object.keys(data).reduce((acc, key) => { if (key === "pubkey") { acc["publicKey"] = data[key]; + } else if (typeof data[key] === "string" && data[key] === "pubkey") { + acc[key] = "publicKey"; } else { acc[key] = replacePubkeyWithPublicKey(data[key]); } return acc; }, {}); } + } else if (data === "pubkey") { + return "publicKey"; } return data; } From ea157c0ea726f6e9cf23cbbb03d7214ffc3dce18 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 19 Jul 2025 11:04:23 -0400 Subject: [PATCH 64/83] adding some more accounts --- solauto-sdk/local/createTokenAccounts.ts | 2 +- solauto-sdk/local/updateSolautoLUT.ts | 2 ++ solauto-sdk/src/constants/marginfiAccounts.ts | 5 +++++ solauto-sdk/src/constants/pythConstants.ts | 6 ++++++ solauto-sdk/src/constants/tokenConstants.ts | 7 +++++++ solauto-sdk/src/generated/types/solautoAction.ts | 2 +- solauto-sdk/src/generated/types/tokenBalanceAmount.ts | 2 +- 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/solauto-sdk/local/createTokenAccounts.ts b/solauto-sdk/local/createTokenAccounts.ts index 5f38efe3..2d317d20 100644 --- a/solauto-sdk/local/createTokenAccounts.ts +++ b/solauto-sdk/local/createTokenAccounts.ts @@ -50,4 +50,4 @@ async function createTokenAccounts(wallet: PublicKey) { } } -createTokenAccounts(SOLAUTO_FEES_WALLET); +createTokenAccounts(SOLAUTO_FEES_WALLET).catch((e) => console.log(e)); diff --git a/solauto-sdk/local/updateSolautoLUT.ts b/solauto-sdk/local/updateSolautoLUT.ts index 6a764d47..c5d3e3f1 100644 --- a/solauto-sdk/local/updateSolautoLUT.ts +++ b/solauto-sdk/local/updateSolautoLUT.ts @@ -7,6 +7,7 @@ import { SWITCHBOARD_PRICE_FEED_IDS, ALL_SUPPORTED_TOKENS, getTokenAccounts, + PYTH_ORACLE_ACCOUNTS, } from "../src"; import { updateLookupTable } from "./shared"; @@ -30,6 +31,7 @@ export async function updateSolautoLut(additionalAccounts?: string[]) { ...solautoManagerTokenAccounts.map((x) => x.toString()), ...solautoFeeWalletTokenAccounts.map((x) => x.toString()), ...Object.values(SWITCHBOARD_PRICE_FEED_IDS).map((x) => x.feedId), + ...Object.values(PYTH_ORACLE_ACCOUNTS), ...(additionalAccounts ?? []), ], LOOKUP_TABLE_ADDRESS diff --git a/solauto-sdk/src/constants/marginfiAccounts.ts b/solauto-sdk/src/constants/marginfiAccounts.ts index f9246a75..06717825 100644 --- a/solauto-sdk/src/constants/marginfiAccounts.ts +++ b/solauto-sdk/src/constants/marginfiAccounts.ts @@ -138,6 +138,11 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiBankAccountsMap = { liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy", vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L", }, + [tokens.PUMP]: { + bank: "61Qx9kgWo9RVtPHf8Rku6gbaUtcnzgkpAuifQBUcMRVK", + liquidityVault: "6FxnrCaJNHLyrFy6EPtqFjoUK5iRxDQbaVo1bA69nDhH", + vaultAuthority: "6VL2QW6sy8cjxL24xHL7eFbnUSi35DMJd8AzRwssSs9y" + } }, ["DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"]: { [tokens.POPCAT]: { diff --git a/solauto-sdk/src/constants/pythConstants.ts b/solauto-sdk/src/constants/pythConstants.ts index 6db1af73..21d0c4b0 100644 --- a/solauto-sdk/src/constants/pythConstants.ts +++ b/solauto-sdk/src/constants/pythConstants.ts @@ -45,4 +45,10 @@ export const PYTH_PRICE_FEED_IDS = { "0x72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419", [tokens.WIF]: "0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc", + [tokens.PUMP]: + "0x7a01fca212788bba7c5bf8c9efd576a8a722f070d2c17596ff7bb609b8d5c3b9", +}; + +export const PYTH_ORACLE_ACCOUNTS = { + [tokens.PUMP]: "HMm3GPbdnqGwbkTnUUqCFsH8AMHDdEC3Lg8gcPD3HJSH", }; diff --git a/solauto-sdk/src/constants/tokenConstants.ts b/solauto-sdk/src/constants/tokenConstants.ts index 7e98f955..855c10d6 100644 --- a/solauto-sdk/src/constants/tokenConstants.ts +++ b/solauto-sdk/src/constants/tokenConstants.ts @@ -24,6 +24,7 @@ export const POPCAT = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; export const RETARDIO = "6ogzHhzdrQr9Pgv6hZ2MNze7UrzBMAFyBBWUYp1Fhitx"; export const BILLY = "3B5wuUrMEi5yATD7on46hKfej3pfmd7t1RKgrsN3pump"; export const HMTR = "7JhmUcZrrfhyt5nTSu3AfsrUq2L9992a7AhwdSDxdoL2"; +export const PUMP = "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"; export const ALL_SUPPORTED_TOKENS = [ NATIVE_MINT.toString(), @@ -49,6 +50,7 @@ export const ALL_SUPPORTED_TOKENS = [ RETARDIO, BILLY, HMTR, + PUMP, ]; export interface TokenInfo { @@ -193,6 +195,11 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { decimals: 0, isMeme: true, }, + [PUMP]: { + ticker: "PUMP", + name: "Pump.fun", + decimals: 6, + } }; export const MAJORS_PRIO = { diff --git a/solauto-sdk/src/generated/types/solautoAction.ts b/solauto-sdk/src/generated/types/solautoAction.ts index 15473529..9e766e89 100644 --- a/solauto-sdk/src/generated/types/solautoAction.ts +++ b/solauto-sdk/src/generated/types/solautoAction.ts @@ -90,7 +90,7 @@ export function solautoAction( data?: any ): Extract { return Array.isArray(data) - ? { __kind: kind, fields: data } + ? { __kind: kind, fields: data } as Extract : { __kind: kind, ...(data ?? {}) }; } export function isSolautoAction( diff --git a/solauto-sdk/src/generated/types/tokenBalanceAmount.ts b/solauto-sdk/src/generated/types/tokenBalanceAmount.ts index d5c8d96b..8606e01a 100644 --- a/solauto-sdk/src/generated/types/tokenBalanceAmount.ts +++ b/solauto-sdk/src/generated/types/tokenBalanceAmount.ts @@ -56,7 +56,7 @@ export function tokenBalanceAmount( data?: any ): Extract { return Array.isArray(data) - ? { __kind: kind, fields: data } + ? { __kind: kind, fields: data } as Extract : { __kind: kind, ...(data ?? {}) }; } export function isTokenBalanceAmount( From 033f82c6a32727a798b13dc675359177eb87421e Mon Sep 17 00:00:00 2001 From: Chelioso Date: Tue, 22 Jul 2025 11:18:06 -0400 Subject: [PATCH 65/83] remove dependency on oracle key --- programs/solauto/src/clients/marginfi.rs | 311 +++++++++++------------ 1 file changed, 152 insertions(+), 159 deletions(-) diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index 935fc3e7..e676253a 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -1,20 +1,22 @@ use borsh::BorshDeserialize; use fixed::types::I80F48; use marginfi_sdk::generated::{ - accounts::{Bank, MarginfiAccount}, + accounts::{ Bank, MarginfiAccount }, instructions::*, - types::{Balance, OracleSetup}, + types::{ Balance, OracleSetup }, }; use pyth_sdk_solana::state::SolanaPriceAccount; use pyth_solana_receiver_sdk::price_update::PriceUpdateV2; use solana_program::{ - account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, - program_error::ProgramError, pubkey::Pubkey, sysvar::Sysvar, -}; -use std::{ - cmp::min, - ops::{Div, Mul, Sub}, + account_info::AccountInfo, + clock::Clock, + entrypoint::ProgramResult, + msg, + program_error::ProgramError, + pubkey::Pubkey, + sysvar::Sysvar, }; +use std::{ cmp::min, ops::{ Div, Mul, Sub } }; use switchboard_on_demand::PullFeedAccountData; use switchboard_v2::AggregatorAccountData; @@ -23,16 +25,21 @@ use crate::{ types::{ errors::SolautoError, instruction::{ - accounts::{Context, MarginfiOpenPositionAccounts}, + accounts::{ Context, MarginfiOpenPositionAccounts }, SolautoStandardAccounts, }, - lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, + lending_protocol::{ LendingProtocolClient, LendingProtocolTokenAccounts }, shared::{ - AccountMetaFlags, DeserializedAccount, PriceType, RefreshStateProps, - RefreshedTokenState, TokenBalanceAmount, TokenType, + AccountMetaFlags, + DeserializedAccount, + PriceType, + RefreshStateProps, + RefreshedTokenState, + TokenBalanceAmount, + TokenType, }, }, - utils::{math_utils::*, solana_utils::*, solauto_utils::*, validation_utils::*}, + utils::{ math_utils::*, solana_utils::*, solauto_utils::*, validation_utils::* }, }; const CONF_INTERVAL_MULTIPLE: f64 = 2.12; @@ -57,7 +64,7 @@ pub struct MarginfiClient<'a> { impl<'a> MarginfiClient<'a> { pub fn initialize<'c>( ctx: &'c Context<'a, MarginfiOpenPositionAccounts<'a>>, - solauto_position: &'c DeserializedAccount<'a, SolautoPosition>, + solauto_position: &'c DeserializedAccount<'a, SolautoPosition> ) -> ProgramResult { if account_has_data(ctx.accounts.marginfi_account) { return Ok(()); @@ -72,22 +79,26 @@ impl<'a> MarginfiClient<'a> { authority: marginfi_account_owner, fee_payer: ctx.accounts.signer, system_program: ctx.accounts.system_program, - }, + } ); if marginfi_account_owner.key == solauto_position.account_info.key { let mut marginfi_account_seeds = vec![ solauto_position.account_info.key.as_ref(), - ctx.accounts.marginfi_group.key.as_ref(), + ctx.accounts.marginfi_group.key.as_ref() ]; - let (_, bump) = - Pubkey::find_program_address(marginfi_account_seeds.as_slice(), &crate::ID); + let (_, bump) = Pubkey::find_program_address( + marginfi_account_seeds.as_slice(), + &crate::ID + ); let binding = [bump]; marginfi_account_seeds.push(&binding); - cpi.invoke_signed(&[ - solauto_position.data.seeds_with_bump().as_slice(), - marginfi_account_seeds.as_slice(), - ]) + cpi.invoke_signed( + &[ + solauto_position.data.seeds_with_bump().as_slice(), + marginfi_account_seeds.as_slice(), + ] + ) } else { cpi.invoke() } @@ -105,7 +116,7 @@ impl<'a> MarginfiClient<'a> { debt_bank: &'a AccountInfo<'a>, debt_price_oracle: Option<&'a AccountInfo<'a>>, debt_tas: LendingProtocolTokenAccounts<'a>, - debt_vault_authority: Option<&'a AccountInfo<'a>>, + debt_vault_authority: Option<&'a AccountInfo<'a>> ) -> Result { let supply = MarginfiBankAccounts { bank: DeserializedAccount::::zerocopy(Some(supply_bank))?.unwrap(), @@ -134,7 +145,7 @@ impl<'a> MarginfiClient<'a> { fn get_account_balance( account_balances: &[Balance], bank: &DeserializedAccount, - is_supply: bool, + is_supply: bool ) -> Option { account_balances.iter().find_map(|balance| { if &balance.bank_pk == bank.account_info.key { @@ -152,24 +163,22 @@ impl<'a> MarginfiClient<'a> { pub fn get_max_ltv_and_liq_threshold( supply_bank: &'a AccountInfo<'a>, - debt_bank: &'a AccountInfo<'a>, + debt_bank: &'a AccountInfo<'a> ) -> Result<(f64, f64), ProgramError> { let supply_bank = DeserializedAccount::::zerocopy(Some(supply_bank))?.unwrap(); let debt_bank = DeserializedAccount::::zerocopy(Some(debt_bank))?.unwrap(); - let max_ltv = i80f48_to_f64(I80F48::from_le_bytes( - supply_bank.data.config.asset_weight_init.value, - )) - .div(i80f48_to_f64(I80F48::from_le_bytes( - debt_bank.data.config.liability_weight_init.value, - ))); + let max_ltv = i80f48_to_f64( + I80F48::from_le_bytes(supply_bank.data.config.asset_weight_init.value) + ).div( + i80f48_to_f64(I80F48::from_le_bytes(debt_bank.data.config.liability_weight_init.value)) + ); - let liq_threshold = i80f48_to_f64(I80F48::from_le_bytes( - supply_bank.data.config.asset_weight_maint.value, - )) - .div(i80f48_to_f64(I80F48::from_le_bytes( - debt_bank.data.config.liability_weight_maint.value, - ))); + let liq_threshold = i80f48_to_f64( + I80F48::from_le_bytes(supply_bank.data.config.asset_weight_maint.value) + ).div( + i80f48_to_f64(I80F48::from_le_bytes(debt_bank.data.config.liability_weight_maint.value)) + ); Ok((max_ltv, liq_threshold)) } @@ -179,14 +188,18 @@ impl<'a> MarginfiClient<'a> { supply_bank: &'a AccountInfo<'a>, price_oracle: &'a AccountInfo<'a>, price_type: PriceType, - mut max_ltv: f64, + mut max_ltv: f64 ) -> Result<(RefreshedTokenState, f64), ProgramError> { let bank = DeserializedAccount::::zerocopy(Some(supply_bank))?.unwrap(); let asset_share_value = I80F48::from_le_bytes(bank.data.asset_share_value.value); - let market_price = - MarginfiClient::load_price(&bank, price_oracle, price_type, TokenType::Supply)?; + let market_price = MarginfiClient::load_price( + &bank, + price_oracle, + price_type, + TokenType::Supply + )?; let supply_shares = MarginfiClient::get_account_balance(account_balances, &bank, true); let base_unit_account_deposits = if supply_shares.is_some() { @@ -195,19 +208,24 @@ impl<'a> MarginfiClient<'a> { 0 }; - let total_deposited = - I80F48::from_le_bytes(bank.data.total_asset_shares.value).mul(asset_share_value); - let base_unit_deposit_room_available = - I80F48::from(bank.data.config.deposit_limit).sub(total_deposited); + let total_deposited = I80F48::from_le_bytes(bank.data.total_asset_shares.value).mul( + asset_share_value + ); + let base_unit_deposit_room_available = I80F48::from(bank.data.config.deposit_limit).sub( + total_deposited + ); - let bank_deposits_usd_value = - from_base_unit::(i80f48_to_f64(total_deposited), bank.data.mint_decimals) - .mul(market_price); - if bank.data.config.total_asset_value_init_limit != 0 - && bank_deposits_usd_value > (bank.data.config.total_asset_value_init_limit as f64) + let bank_deposits_usd_value = from_base_unit::( + i80f48_to_f64(total_deposited), + bank.data.mint_decimals + ).mul(market_price); + if + bank.data.config.total_asset_value_init_limit != 0 && + bank_deposits_usd_value > (bank.data.config.total_asset_value_init_limit as f64) { - let discount_factor = - (bank.data.config.total_asset_value_init_limit as f64).div(bank_deposits_usd_value); + let discount_factor = (bank.data.config.total_asset_value_init_limit as f64).div( + bank_deposits_usd_value + ); max_ltv = max_ltv * discount_factor; } @@ -228,14 +246,18 @@ impl<'a> MarginfiClient<'a> { account_balances: &[Balance], debt_bank: &'a AccountInfo<'a>, price_oracle: &'a AccountInfo<'a>, - price_type: PriceType, + price_type: PriceType ) -> Result { let bank = DeserializedAccount::::zerocopy(Some(debt_bank))?.unwrap(); let liability_share_value = I80F48::from_le_bytes(bank.data.liability_share_value.value); - let market_price = - MarginfiClient::load_price(&bank, price_oracle, price_type, TokenType::Debt)?; + let market_price = MarginfiClient::load_price( + &bank, + price_oracle, + price_type, + TokenType::Debt + )?; let debt_shares = MarginfiClient::get_account_balance(account_balances, &bank, false); let base_unit_account_debt = if debt_shares.is_some() { @@ -244,29 +266,26 @@ impl<'a> MarginfiClient<'a> { 0 }; - let total_deposited = I80F48::from_le_bytes(bank.data.total_asset_shares.value) - .mul(I80F48::from_le_bytes(bank.data.asset_share_value.value)); - let total_borrows = I80F48::from_le_bytes(bank.data.total_liability_shares.value) - .mul(liability_share_value); + let total_deposited = I80F48::from_le_bytes(bank.data.total_asset_shares.value).mul( + I80F48::from_le_bytes(bank.data.asset_share_value.value) + ); + let total_borrows = I80F48::from_le_bytes(bank.data.total_liability_shares.value).mul( + liability_share_value + ); let base_unit_supply_available = total_deposited.sub(total_borrows); let amount_can_be_used = min( - bank.data - .config - .borrow_limit - .saturating_sub(i80f48_to_u64(total_borrows)), - i80f48_to_u64(base_unit_supply_available), + bank.data.config.borrow_limit.saturating_sub(i80f48_to_u64(total_borrows)), + i80f48_to_u64(base_unit_supply_available) ); - let borrow_fee_bps = i80f48_to_f64(I80F48::from_le_bytes( - bank.data - .config - .interest_rate_config - .protocol_origination_fee - .value, - )) - .mul(10_000.0) - .round() as u16; + let borrow_fee_bps = i80f48_to_f64( + I80F48::from_le_bytes( + bank.data.config.interest_rate_config.protocol_origination_fee.value + ) + ) + .mul(10_000.0) + .round() as u16; Ok(RefreshedTokenState { mint: bank.data.mint, @@ -284,17 +303,19 @@ impl<'a> MarginfiClient<'a> { supply_price_oracle: &'a AccountInfo<'a>, debt_bank: &'a AccountInfo<'a>, debt_price_oracle: &'a AccountInfo<'a>, - price_type: PriceType, + price_type: PriceType ) -> Result { - let (max_ltv, liq_threshold) = - MarginfiClient::get_max_ltv_and_liq_threshold(supply_bank, debt_bank)?; + let (max_ltv, liq_threshold) = MarginfiClient::get_max_ltv_and_liq_threshold( + supply_bank, + debt_bank + )?; let account_balances = &marginfi_account.data.lending_account.balances[..2]; let debt = MarginfiClient::get_debt_token_usage( account_balances, debt_bank, debt_price_oracle, - price_type, + price_type )?; let (supply, max_ltv) = MarginfiClient::get_supply_token_usage( @@ -302,7 +323,7 @@ impl<'a> MarginfiClient<'a> { supply_bank, supply_price_oracle, price_type, - max_ltv, + max_ltv )?; Ok(RefreshStateProps { @@ -317,7 +338,7 @@ impl<'a> MarginfiClient<'a> { bank: &DeserializedAccount, price_oracle: &AccountInfo, price_type: PriceType, - token_type: TokenType, + token_type: TokenType ) -> Result { let clock = Clock::get()?; let max_price_age = 120; // Default used by Marginfi is 60 @@ -347,28 +368,27 @@ impl<'a> MarginfiClient<'a> { let price_feed_data = price_oracle.try_borrow_data()?; let price_feed = PriceUpdateV2::deserialize(&mut &price_feed_data.as_ref()[8..])?; - let (price, conf_interval) = if price_type == PriceType::Ema { - let ema_price = price_feed.price_message.ema_price; - let conf = price_feed.price_message.ema_conf; - let exponent = price_feed.price_message.exponent; + let (price, conf, exponent) = if price_type == PriceType::Ema { ( - derive_value(ema_price, exponent), - derive_value(conf as i64, exponent), + price_feed.price_message.ema_price, + price_feed.price_message.ema_conf, + price_feed.price_message.exponent, ) } else { - let feed_id = &bank.data.config.oracle_keys[0].to_bytes(); - let price_result = price_feed.get_price_unchecked(feed_id).unwrap(); ( - derive_value(price_result.price, price_result.exponent), - derive_value(price_result.conf as i64, price_result.exponent), + price_feed.price_message.price, + price_feed.price_message.conf, + price_feed.price_message.exponent, ) }; - Ok(with_conf_interval( - price, - conf_interval.mul(CONF_INTERVAL_MULTIPLE), - token_type, - )) + Ok( + with_conf_interval( + derive_value(price, exponent), + derive_value(conf as i64, exponent).mul(CONF_INTERVAL_MULTIPLE), + token_type + ) + ) } OracleSetup::SwitchboardLegacy => { let data = price_oracle.data.borrow(); @@ -386,8 +406,9 @@ impl<'a> MarginfiClient<'a> { } OracleSetup::SwitchboardPull => { let data = price_oracle.data.borrow(); - let feed = PullFeedAccountData::parse(data) - .map_err(|_| SolautoError::IncorrectAccounts)?; + let feed = PullFeedAccountData::parse(data).map_err( + |_| SolautoError::IncorrectAccounts + )?; let price = (feed.result.value as f64) // 10^18 @@ -405,14 +426,14 @@ impl<'a> MarginfiClient<'a> { pub fn refresh_bank( program: &'a AccountInfo<'a>, marginfi_group: &'a AccountInfo<'a>, - bank: &'a AccountInfo<'a>, + bank: &'a AccountInfo<'a> ) -> ProgramResult { let cpi = LendingPoolAccrueBankInterestCpi::new( program, LendingPoolAccrueBankInterestCpiAccounts { marginfi_group, bank, - }, + } ); cpi.invoke() } @@ -421,15 +442,11 @@ impl<'a> MarginfiClient<'a> { let mut banks_and_oracles: Vec<(AccountMetaFlags, AccountMetaFlags)> = accounts .chunks(2) .filter_map(|chunk| { - if chunk.len() == 2 { - Some((chunk[0], chunk[1])) - } else { - None - } + if chunk.len() == 2 { Some((chunk[0], chunk[1])) } else { None } }) .collect(); - banks_and_oracles.sort_by(|a, b| b.0 .0.key.to_string().cmp(&a.0 .0.key.to_string())); + banks_and_oracles.sort_by(|a, b| b.0.0.key.to_string().cmp(&a.0.0.key.to_string())); banks_and_oracles .into_iter() @@ -443,12 +460,12 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { validate_token_accounts( &std_accounts.solauto_position, self.supply.token_accounts.position_ta, - self.debt.token_accounts.position_ta, + self.debt.token_accounts.position_ta )?; validate_token_accounts( &std_accounts.solauto_position, self.supply.token_accounts.authority_ta, - self.debt.token_accounts.authority_ta, + self.debt.token_accounts.authority_ta )?; Ok(()) } @@ -456,7 +473,7 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { fn deposit<'c>( &self, base_unit_amount: u64, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); @@ -480,15 +497,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { LendingAccountDepositInstructionArgs { amount: base_unit_amount, deposit_up_to_limit: Some(true), - }, + } ); if !std_accounts.solauto_position.data.self_managed.val { - cpi.invoke_signed(&[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()]) + cpi.invoke_signed(&[std_accounts.solauto_position.data.seeds_with_bump().as_slice()]) } else { cpi.invoke() } @@ -498,15 +511,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { &self, amount: TokenBalanceAmount, destination: &'a AccountInfo<'a>, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); - let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { - num - } else { - 0 - }; + let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { num } else { 0 }; let cpi = LendingAccountWithdrawCpi::new( self.program, @@ -523,17 +532,14 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { LendingAccountWithdrawInstructionArgs { amount: base_unit_amount, withdraw_all: Some(amount == TokenBalanceAmount::All), - }, + } ); - let marginfi_account_data = - DeserializedAccount::::zerocopy(Some(self.marginfi_account))? - .unwrap() - .data; + let marginfi_account_data = DeserializedAccount:: + ::zerocopy(Some(self.marginfi_account))? + .unwrap().data; - let active_balances = marginfi_account_data - .lending_account - .balances + let active_balances = marginfi_account_data.lending_account.balances .iter() .filter(|balance| balance.active == 1) .collect::>(); @@ -543,9 +549,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { let mut withdrawing_all = amount == TokenBalanceAmount::All; if !withdrawing_all && active_balances.len() == 1 { let asset_shares = I80F48::from_le_bytes(active_balances[0].asset_shares.value); - let supply_balance = i80f48_to_u64(asset_shares.mul(I80F48::from_le_bytes( - self.supply.bank.data.asset_share_value.value, - ))); + let supply_balance = i80f48_to_u64( + asset_shares.mul( + I80F48::from_le_bytes(self.supply.bank.data.asset_share_value.value) + ) + ); let TokenBalanceAmount::Some(withdraw_amount) = amount else { panic!("Unexpected amount type"); }; @@ -564,16 +572,12 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { if !std_accounts.solauto_position.data.self_managed.val { cpi.invoke_signed_with_remaining_accounts( - &[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()], - MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), + &[std_accounts.solauto_position.data.seeds_with_bump().as_slice()], + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() ) } else { cpi.invoke_with_remaining_accounts( - MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() ) } } @@ -582,7 +586,7 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { &self, base_unit_amount: u64, destination: &'a AccountInfo<'a>, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); @@ -600,11 +604,12 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { }, LendingAccountBorrowInstructionArgs { amount: base_unit_amount, - }, + } ); - let mut remaining_accounts: Vec = - Vec::::with_capacity(4); + let mut remaining_accounts: Vec = Vec::::with_capacity( + 4 + ); remaining_accounts.push((self.supply.bank.account_info, false, false)); remaining_accounts.push((self.supply.price_oracle.unwrap(), false, false)); remaining_accounts.push((self.debt.bank.account_info, false, true)); @@ -612,16 +617,12 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { if !std_accounts.solauto_position.data.self_managed.val { cpi.invoke_signed_with_remaining_accounts( - &[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()], - MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), + &[std_accounts.solauto_position.data.seeds_with_bump().as_slice()], + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() ) } else { cpi.invoke_with_remaining_accounts( - MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice(), + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() ) } } @@ -629,15 +630,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { fn repay<'c>( &self, amount: TokenBalanceAmount, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); - let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { - num - } else { - 0 - }; + let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { num } else { 0 }; let signer_token_account = if !std_accounts.solauto_position.data.self_managed.val { self.debt.token_accounts.position_ta.as_ref().unwrap() @@ -659,15 +656,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { LendingAccountRepayInstructionArgs { amount: base_unit_amount, repay_all: Some(amount == TokenBalanceAmount::All), - }, + } ); if !std_accounts.solauto_position.data.self_managed.val { - cpi.invoke_signed(&[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()]) + cpi.invoke_signed(&[std_accounts.solauto_position.data.seeds_with_bump().as_slice()]) } else { cpi.invoke() } From 6755a360c4a3d234fd90b70d33153ee7aadf7a31 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 31 Jul 2025 01:09:22 -0400 Subject: [PATCH 66/83] fixes --- solauto-sdk/package.json | 2 +- solauto-sdk/src/utils/marginfi/general.ts | 28 +++++++++++------------ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 7093eb24..312f8f19 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.782", + "version": "1.0.789", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/utils/marginfi/general.ts b/solauto-sdk/src/utils/marginfi/general.ts index 5a9ad505..81c950eb 100644 --- a/solauto-sdk/src/utils/marginfi/general.ts +++ b/solauto-sdk/src/utils/marginfi/general.ts @@ -28,6 +28,7 @@ import { getPythPushOracleAddress, } from "../pythUtils"; import { getAccountMeta } from "../solanaUtils"; +import { validPubkey } from "../generalUtils"; export function createDynamicMarginfiProgram(env?: ProgramEnv): Program { return { @@ -69,15 +70,11 @@ export async function getAllBankRelatedAccounts( ); const oracles = banksData - .map((bank) => { - const oracleKey = toWeb3JsPublicKey(bank.config.oracleKeys[0]); - return bank.config.oracleSetup === OracleSetup.PythPushOracle - ? [ - getPythPushOracleAddress(oracleKey, PYTH_SPONSORED_SHARD_ID), - getPythPushOracleAddress(oracleKey, MARGINFI_SPONSORED_SHARD_ID), - ] - : [oracleKey]; - }) + .map((bank) => + bank.config.oracleKeys + .map((x) => toWeb3JsPublicKey(x)) + .filter((x) => validPubkey(x)) + ) .flat() .map((x) => x.toString()); @@ -118,14 +115,15 @@ export async function getMarginfiPriceOracle( bank.data = await fetchBank(umi, fromWeb3JsPublicKey(bank.pk!)); } - const oracleKey = toWeb3JsPublicKey(bank.data.config.oracleKeys[0]); const priceOracle = bank.data.config.oracleSetup === OracleSetup.PythPushOracle - ? await getMostUpToDatePythOracle(umi, [ - getPythPushOracleAddress(oracleKey, PYTH_SPONSORED_SHARD_ID), - getPythPushOracleAddress(oracleKey, MARGINFI_SPONSORED_SHARD_ID), - ]) - : oracleKey; + ? await getMostUpToDatePythOracle( + umi, + bank.data.config.oracleKeys + .map((x) => toWeb3JsPublicKey(x)) + .filter((x) => validPubkey(x)) + ) + : toWeb3JsPublicKey(bank.data.config.oracleKeys[0]); return priceOracle; } From e0596bb25408883d1ed815f3aed60c3d9f11c185 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 6 Aug 2025 18:03:59 -0400 Subject: [PATCH 67/83] remove unused variables --- solauto-sdk/src/constants/pythConstants.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/solauto-sdk/src/constants/pythConstants.ts b/solauto-sdk/src/constants/pythConstants.ts index 21d0c4b0..41fb1c4c 100644 --- a/solauto-sdk/src/constants/pythConstants.ts +++ b/solauto-sdk/src/constants/pythConstants.ts @@ -6,9 +6,6 @@ export const PYTH_PUSH_PROGRAM = new PublicKey( "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" ); -export const PYTH_SPONSORED_SHARD_ID = 0; -export const MARGINFI_SPONSORED_SHARD_ID = 3301; - // https://pyth.network/developers/price-feed-ids#solana-stable export const PYTH_PRICE_FEED_IDS = { [NATIVE_MINT.toString()]: From eb0462a4ea917c62d4d0349b0f9c1de54468f0f7 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 7 Aug 2025 23:17:24 -0400 Subject: [PATCH 68/83] test commit --- solauto-sdk/src/constants/pythConstants.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/solauto-sdk/src/constants/pythConstants.ts b/solauto-sdk/src/constants/pythConstants.ts index 41fb1c4c..7319dbf7 100644 --- a/solauto-sdk/src/constants/pythConstants.ts +++ b/solauto-sdk/src/constants/pythConstants.ts @@ -6,6 +6,7 @@ export const PYTH_PUSH_PROGRAM = new PublicKey( "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" ); + // https://pyth.network/developers/price-feed-ids#solana-stable export const PYTH_PRICE_FEED_IDS = { [NATIVE_MINT.toString()]: From 6e041af7b449e7ab73c60ea9d75833cc158bcbac Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 10 Aug 2025 19:53:34 -0400 Subject: [PATCH 69/83] remove unused imports --- solauto-sdk/src/constants/pythConstants.ts | 1 - solauto-sdk/src/utils/marginfi/general.ts | 3 --- solauto-sdk/src/utils/pythUtils.ts | 12 ------------ 3 files changed, 16 deletions(-) diff --git a/solauto-sdk/src/constants/pythConstants.ts b/solauto-sdk/src/constants/pythConstants.ts index 7319dbf7..41fb1c4c 100644 --- a/solauto-sdk/src/constants/pythConstants.ts +++ b/solauto-sdk/src/constants/pythConstants.ts @@ -6,7 +6,6 @@ export const PYTH_PUSH_PROGRAM = new PublicKey( "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" ); - // https://pyth.network/developers/price-feed-ids#solana-stable export const PYTH_PRICE_FEED_IDS = { [NATIVE_MINT.toString()]: diff --git a/solauto-sdk/src/utils/marginfi/general.ts b/solauto-sdk/src/utils/marginfi/general.ts index 81c950eb..1d6866b2 100644 --- a/solauto-sdk/src/utils/marginfi/general.ts +++ b/solauto-sdk/src/utils/marginfi/general.ts @@ -7,9 +7,7 @@ import { import { ProgramEnv, MarginfiAssetAccounts } from "../../types"; import { getMarginfiAccounts, - MARGINFI_SPONSORED_SHARD_ID, MarginfiBankAccountsMap, - PYTH_SPONSORED_SHARD_ID, } from "../../constants"; import { Balance, @@ -25,7 +23,6 @@ import { bytesToI80F48, fromBaseUnit, toBps } from "../numberUtils"; import { getTokenAccountData } from "../accountUtils"; import { getMostUpToDatePythOracle, - getPythPushOracleAddress, } from "../pythUtils"; import { getAccountMeta } from "../solanaUtils"; import { validPubkey } from "../generalUtils"; diff --git a/solauto-sdk/src/utils/pythUtils.ts b/solauto-sdk/src/utils/pythUtils.ts index 68595692..8ca99a49 100644 --- a/solauto-sdk/src/utils/pythUtils.ts +++ b/solauto-sdk/src/utils/pythUtils.ts @@ -23,15 +23,3 @@ export async function getMostUpToDatePythOracle( return oracles[0][0]; } - -export function getPythPushOracleAddress( - feedId: PublicKey, - shardId: number, - programId: PublicKey = PYTH_PUSH_PROGRAM -): PublicKey { - const shardBytes = u16ToArrayBufferLE(shardId); - return PublicKey.findProgramAddressSync( - [shardBytes, feedId.toBuffer()], - programId - )[0]; -} From 17818b79262ba527b6788ee3bc6657e067d31366 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sun, 10 Aug 2025 19:59:21 -0400 Subject: [PATCH 70/83] small fixes --- README.md | 2 +- pnpm-lock.yaml | 2870 +++++++++++++++++----------------- solauto-sdk/pnpm-lock.yaml | 2986 ++++++++++++++++++++---------------- 3 files changed, 3116 insertions(+), 2742 deletions(-) diff --git a/README.md b/README.md index 6852fb18..0346f7ce 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ See the [Program documentation](/programs/solauto/README.md) for more info on th - PNPM ``` -crate install shank-idl +cargo install shank-cli rustup component add rustfmt pnpm install -g ts-node ``` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a9acb1a..95d1b0a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,66 +1,994 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@metaplex-foundation/kinobi': - specifier: ^0.18.5 - version: 0.18.5(fastestsmallesttextencoderdecoder@1.0.22) - '@mrgnlabs/marginfi-client-v2': - specifier: ^6.0.1 - version: 6.0.1 - '@mrgnlabs/mrgn-common': - specifier: ^2.0.2 - version: 2.0.2 - borsh: - specifier: ^2.0.0 - version: 2.0.0 - -devDependencies: - solauto-sdk: - specifier: file:solauto-sdk - version: file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: - specifier: ^4.9.5 - version: 4.9.5 +importers: + + .: + dependencies: + '@metaplex-foundation/kinobi': + specifier: ^0.18.5 + version: 0.18.5(fastestsmallesttextencoderdecoder@1.0.22) + '@mrgnlabs/marginfi-client-v2': + specifier: ^6.0.1 + version: 6.1.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@mrgnlabs/mrgn-common': + specifier: ^2.0.2 + version: 2.0.3(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + borsh: + specifier: ^2.0.0 + version: 2.0.0 + devDependencies: + solauto-sdk: + specifier: file:solauto-sdk + version: '@haven-fi/solauto-sdk@file:solauto-sdk(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)' + typescript: + specifier: ^4.9.5 + version: 4.9.5 packages: - /@babel/runtime@7.25.7: - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + '@brokerloop/ttlcache@3.2.3': + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + + '@common.js/quick-lru@7.0.0': + resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} + engines: {node: '>=18'} + + '@coral-xyz/anchor-errors@0.30.1': + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + engines: {node: '>=10'} + + '@coral-xyz/anchor@0.29.0': + resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} + engines: {node: '>=11'} + + '@coral-xyz/anchor@0.30.1': + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.29.0': + resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@coral-xyz/borsh@0.30.1': + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@grpc/grpc-js@1.13.4': + resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true + + '@haven-fi/solauto-sdk@file:solauto-sdk': + resolution: {directory: solauto-sdk, type: directory} + + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@jup-ag/api@6.0.24': + resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} + + '@metaplex-foundation/kinobi@0.18.5': + resolution: {integrity: sha512-qh4h4xGB+PHR5o4rcZki+wsIeZYi6R9SRV5UMqGi/rfDJXk0ckAZ+fxdam+mCc4N8HWLLWmEJbF5gx8E5K0fOA==} + + '@metaplex-foundation/umi-bundle-defaults@0.9.2': + resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-downloader-http@0.9.2': + resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-eddsa-web3js@0.9.2': + resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-http-fetch@0.9.2': + resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-options@0.8.9': + resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} + + '@metaplex-foundation/umi-program-repository@0.9.2': + resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-public-keys@0.8.9': + resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2': + resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-rpc-web3js@0.9.2': + resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-serializer-data-view@0.9.2': + resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-serializers-core@0.8.9': + resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} + + '@metaplex-foundation/umi-serializers-encodings@0.8.9': + resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + + '@metaplex-foundation/umi-serializers-numbers@0.8.9': + resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + + '@metaplex-foundation/umi-serializers@0.9.0': + resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2': + resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2': + resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-web3js-adapters@0.9.2': + resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi@0.9.2': + resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + + '@mrgnlabs/marginfi-client-v2@6.1.0': + resolution: {integrity: sha512-8T93tWsp6BbFyKocQBTxaJ1RhslnseNtMO+TWPySpr8iNaUmFax15fuA6Ml/q/wgjZHu2sqNPy501UeDnCb/kw==} + + '@mrgnlabs/mrgn-common@2.0.3': + resolution: {integrity: sha512-OrCvFJv2mCHVqTDhVRRacLO8e1yHSXP1+PrQEAuxGHTnP8qQE51yFwRR+Ne8Gz6VMaD50BxWqsgBlT8/6hOStw==} + + '@noble/curves@1.9.4': + resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/ed25519@1.7.5': + resolution: {integrity: sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@prettier/sync@0.5.5': + resolution: {integrity: sha512-6BMtNr7aQhyNcGzmumkL0tgr1YQGfm9d7ZdmRpWqWuqpc9vZBind4xMe5NMiRECOhjuSiWHfBWLBnXkpeE90bw==} + peerDependencies: + prettier: '*' + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@pythnetwork/price-service-sdk@1.8.0': + resolution: {integrity: sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA==} + + '@pythnetwork/pyth-solana-receiver@0.8.2': + resolution: {integrity: sha512-WrrdwwhSYvvB5vJEL+SfPnfuxgkRKMeKdZvGFFwe6ENrMhrQCM05oDkvNNYfXATLcpQGRAyBu9l1xIxUxixpqw==} + + '@pythnetwork/solana-utils@0.4.2': + resolution: {integrity: sha512-hKo7Bcs/kDWA5Fnqhg9zJSB94NMoUDIDjHjSi/uvZOzwizISUQI6oY3LWd2CXzNh4f8djjY2BS5iNHaM4cm8Bw==} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.1': + resolution: {integrity: sha512-0y3kgFSJAOApNGefEOgLRMiXOHVmcF29Xw3zmR4LDUABvytG3ecKMXGz5oLt3vdaU2CyN3tuUVeGmQjrd0U1kw==} + + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-preview.1': + resolution: {integrity: sha512-NFA8itgcYUY3hkWMBpVRozd2poy1zfOvkIWZKx/D69oIMUtQTBpKrodRVBuhlBkAv12vDNkFljqVySpcMZMl7A==} + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-preview.1': + resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-preview.1': + resolution: {integrity: sha512-mnBWfLVwMH4hxwb4sWZ7G7djQCMsyymjysvUPDiF89LueTBm1hfdxUv8Cy1uUCGsJ3jO3scdPwB4noOgr0rG/g==} + hasBin: true + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.1.8': + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-token@0.4.13': + resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/wallet-adapter-base@0.9.27': + resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} + engines: {node: '>=20'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + + '@solana/wallet-standard-features@1.3.0': + resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} + engines: {node: '>=16'} + + '@solana/web3.js@1.77.4': + resolution: {integrity: sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q==} + + '@solana/web3.js@1.95.8': + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@solworks/soltoolkit-sdk@0.0.23': + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + + '@soncodi/signal@2.0.7': + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@switchboard-xyz/common@2.5.19': + resolution: {integrity: sha512-Bzj1bu2U69YRh2OoNjkrafdREeB1KH+wmeFkBsASDjlhy/xXjey2Ry2HUTAIzdg2DMtfP6DoCW2Nn9ZQD5IO+Q==} + engines: {node: '>=12'} + + '@switchboard-xyz/common@3.0.12': + resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} + engines: {node: '>=20'} + + '@switchboard-xyz/common@3.4.1': + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + engines: {node: '>=20'} + + '@switchboard-xyz/on-demand@1.2.51': + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + engines: {node: '>= 18'} + deprecated: deprecated in favor of 2.x.x + + '@switchboard-xyz/on-demand@1.2.67': + resolution: {integrity: sha512-rtGA+9tQHb/xQnUFgVzyaOs2uKgnwP7OqYQLEOjTDdNTEEgU8OTR72ujluOEYB9LMByb7h9SRuOR353vxYQhYA==} + engines: {node: '>= 18'} + deprecated: deprecated in favor of 2.x.x + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@18.19.119': + resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} + + '@types/node@24.0.14': + resolution: {integrity: sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@wallet-standard/base@1.1.0': + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + + '@wallet-standard/features@1.1.0': + resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} + engines: {node: '>=16'} + + '@zod/core@0.11.6': + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + + a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + borsh@2.0.0: + resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + cron-validator@1.4.0: + resolution: {integrity: sha512-wGcJ9FCy65iaU6egSH8b5dZYJF7GU/3Jh06wzaT9lsa5dbqExjljmu+0cJ8cpKn+vUyZa/EM4WAxeLR6SypJXw==} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + crypto-hash@3.1.0: + resolution: {integrity: sha512-HR8JlZ+Dn54Lc5gGWZJxJitWbOCUzWb9/AlyONGecBnYZ+n/ONvt0gQnEzDNpJMYeRrYO7KogQ4qwyTPKnWKEw==} + engines: {node: '>=18'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + jito-ts@3.0.1: + resolution: {integrity: sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg==} + + js-sha256@0.11.1: + resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} + engines: {node: '>= 0.4'} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-synchronized@0.4.2: + resolution: {integrity: sha512-EwEJSg8gSGLicKXp/VzNi1tvzhdmNBxOzslkkJSoNUCQFZKH/NIUIp7xlfN+noaHrz4BJDN73gne8IHnjl/F/A==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + numeral@2.0.6: + resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} + + nunjucks@3.2.4: + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + protobufjs@7.5.3: + resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + deprecated: deprecate 7.11.0 + + rpc-websockets@7.11.2: + resolution: {integrity: sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ==} + + rpc-websockets@9.1.1: + resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + +snapshots: + + '@babel/runtime@7.27.6': {} + + '@brokerloop/ttlcache@3.2.3': dependencies: '@soncodi/signal': 2.0.7 - dev: true - /@common.js/quick-lru@7.0.0: - resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} - engines: {node: '>=18'} - dev: false + '@common.js/quick-lru@7.0.0': {} - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} - engines: {node: '>=10'} + '@coral-xyz/anchor-errors@0.30.1': {} - /@coral-xyz/anchor@0.29.0: - resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.95.4) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 - cross-fetch: 3.1.8 + cross-fetch: 3.2.0 crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 @@ -70,22 +998,20 @@ packages: transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.4) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + bn.js: 5.2.2 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 - cross-fetch: 3.1.8 + cross-fetch: 3.2.0 crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 @@ -97,540 +1023,354 @@ packages: - encoding - utf-8-validate - /@coral-xyz/borsh@0.29.0(@solana/web3.js@1.95.4): - resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.29.0(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer-layout: 1.2.2 - dev: false - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.4): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer-layout: 1.2.2 - /@grpc/grpc-js@1.13.2: - resolution: {integrity: sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==} - engines: {node: '>=12.10.0'} + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + buffer-layout: 1.2.2 + + '@grpc/grpc-js@1.13.4': dependencies: - '@grpc/proto-loader': 0.7.13 + '@grpc/proto-loader': 0.7.15 '@js-sdsl/ordered-map': 4.4.2 - dev: false - /@grpc/proto-loader@0.7.13: - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true + '@grpc/proto-loader@0.7.15': dependencies: lodash.camelcase: 4.3.0 - long: 5.2.3 - protobufjs: 7.4.0 + long: 5.3.2 + protobufjs: 7.5.3 yargs: 17.7.2 - dev: false - - /@js-sdsl/ordered-map@4.4.2: - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - dev: false - - /@jup-ag/api@6.0.24: - resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} - dev: true - /@metaplex-foundation/beet-solana@0.4.0: - resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} + '@haven-fi/solauto-sdk@file:solauto-sdk(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@solana/web3.js': 1.95.3 + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@jup-ag/api': 6.0.24 + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-bundle-defaults': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-signer-wallet-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/spl-token': 0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 3.0.12(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@switchboard-xyz/on-demand': 1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + axios: 1.10.0 + big.js: 6.2.2 bs58: 5.0.0 - debug: 4.3.7 + cross-fetch: 4.1.0 + dotenv: 16.6.1 + rpc-websockets: 7.11.0 transitivePeerDependencies: - bufferutil + - debug - encoding - - supports-color + - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate - dev: true - /@metaplex-foundation/beet@0.7.1: - resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} - dependencies: - ansicolors: 0.3.2 - bn.js: 5.2.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - dev: true + '@js-sdsl/ordered-map@4.4.2': {} - /@metaplex-foundation/cusper@0.0.2: - resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} - dev: true + '@jup-ag/api@6.0.24': {} - /@metaplex-foundation/kinobi@0.18.5(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-qh4h4xGB+PHR5o4rcZki+wsIeZYi6R9SRV5UMqGi/rfDJXk0ckAZ+fxdam+mCc4N8HWLLWmEJbF5gx8E5K0fOA==} + '@metaplex-foundation/kinobi@0.18.5(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: - '@noble/hashes': 1.5.0 - '@prettier/sync': 0.5.2(prettier@3.3.3) + '@noble/hashes': 1.8.0 + '@prettier/sync': 0.5.5(prettier@3.6.2) '@solana/codecs-strings': 2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22) chalk: 4.1.2 - json-stable-stringify: 1.1.1 + json-stable-stringify: 1.3.0 nunjucks: 3.2.4 - prettier: 3.3.3 + prettier: 3.6.2 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder - dev: false - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - encoding - dev: true - /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@noble/curves': 1.9.4 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /@metaplex-foundation/umi-options@0.8.9: - resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} - dev: true + '@metaplex-foundation/umi-options@0.8.9': {} - /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-public-keys@0.8.9: - resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + '@metaplex-foundation/umi-public-keys@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - dev: true - /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-serializers-core@0.8.9: - resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} - dev: true + '@metaplex-foundation/umi-serializers-core@0.8.9': {} - /@metaplex-foundation/umi-serializers-encodings@0.8.9: - resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + '@metaplex-foundation/umi-serializers-encodings@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: true - /@metaplex-foundation/umi-serializers-numbers@0.8.9: - resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + '@metaplex-foundation/umi-serializers-numbers@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: true - /@metaplex-foundation/umi-serializers@0.9.0: - resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + '@metaplex-foundation/umi-serializers@0.9.0': dependencies: '@metaplex-foundation/umi-options': 0.8.9 '@metaplex-foundation/umi-public-keys': 0.8.9 '@metaplex-foundation/umi-serializers-core': 0.8.9 '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - dev: true - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 - dev: true - /@metaplex-foundation/umi@0.9.2: - resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + '@metaplex-foundation/umi@0.9.2': dependencies: '@metaplex-foundation/umi-options': 0.8.9 '@metaplex-foundation/umi-public-keys': 0.8.9 '@metaplex-foundation/umi-serializers': 0.9.0 - dev: true - - /@mrgnlabs/marginfi-client-v2@6.0.1: - resolution: {integrity: sha512-I4IdrS+fAIhkcgqXmRfwsuZDRgzSipy1Ok8L8Wm3NGgw6JFvTje6qYJ2rNKdZOpZaTDl2q+kZc/GD5EhJkQrLA==} - dependencies: - '@coral-xyz/anchor': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.4) - '@mrgnlabs/mrgn-common': 2.0.2 - '@pythnetwork/pyth-solana-receiver': 0.8.2 - '@solana/spl-token': 0.1.8 - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.95.4) - '@solana/web3.js': 1.95.4 - '@switchboard-xyz/on-demand': 1.2.67 - bignumber.js: 9.1.2 + + '@mrgnlabs/marginfi-client-v2@6.1.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@mrgnlabs/mrgn-common': 2.0.3(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@pythnetwork/pyth-solana-receiver': 0.8.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@switchboard-xyz/on-demand': 1.2.67(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bignumber.js: 9.3.1 borsh: 2.0.0 bs58: 6.0.0 crypto-hash: 3.1.0 - decimal.js: 10.4.3 + decimal.js: 10.6.0 superstruct: 1.0.4 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@mrgnlabs/mrgn-common@2.0.2: - resolution: {integrity: sha512-PypRjfnLPN4HPLz6VOyq7FpcbZPvG1CsZzBX7YMTBBiIZElt8NVk9cMZvTjZS7FzjgBdli0l8L60gt1ZdV2jvg==} + '@mrgnlabs/mrgn-common@2.0.3(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor': 0.30.1 + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.95.4) - '@solana/web3.js': 1.95.4 - bignumber.js: 9.1.2 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bignumber.js: 9.3.1 bs58: 6.0.0 - decimal.js: 10.4.3 + decimal.js: 10.6.0 numeral: 2.0.6 superstruct: 1.0.4 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} - engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.9.4': dependencies: - '@noble/hashes': 1.5.0 + '@noble/hashes': 1.8.0 - /@noble/ed25519@1.7.3: - resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} - dev: false + '@noble/ed25519@1.7.5': {} - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} - - /@prettier/sync@0.5.2(prettier@3.3.3): - resolution: {integrity: sha512-Yb569su456XNx5BsH/Vyem7xD6g/y9iLmLUzRKM1a/dhU/D7HqqvkAG72znulXlMXztbV0iiu9O5AL8K98TzZQ==} - peerDependencies: - prettier: '*' + '@noble/hashes@1.8.0': {} + + '@prettier/sync@0.5.5(prettier@3.6.2)': dependencies: - make-synchronized: 0.2.9 - prettier: 3.3.3 - dev: false + make-synchronized: 0.4.2 + prettier: 3.6.2 - /@protobufjs/aspromise@1.1.2: - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + '@protobufjs/aspromise@1.1.2': {} - /@protobufjs/base64@1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + '@protobufjs/base64@1.1.2': {} - /@protobufjs/codegen@2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + '@protobufjs/codegen@2.0.4': {} - /@protobufjs/eventemitter@1.1.0: - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + '@protobufjs/eventemitter@1.1.0': {} - /@protobufjs/fetch@1.1.0: - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.0': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 - /@protobufjs/float@1.0.2: - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + '@protobufjs/float@1.0.2': {} - /@protobufjs/inquire@1.1.0: - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + '@protobufjs/inquire@1.1.0': {} - /@protobufjs/path@1.1.2: - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + '@protobufjs/path@1.1.2': {} - /@protobufjs/pool@1.1.0: - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + '@protobufjs/pool@1.1.0': {} - /@protobufjs/utf8@1.1.0: - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@protobufjs/utf8@1.1.0': {} - /@pythnetwork/price-service-sdk@1.8.0: - resolution: {integrity: sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA==} + '@pythnetwork/price-service-sdk@1.8.0': dependencies: - bn.js: 5.2.1 - dev: false + bn.js: 5.2.2 - /@pythnetwork/pyth-solana-receiver@0.8.2: - resolution: {integrity: sha512-WrrdwwhSYvvB5vJEL+SfPnfuxgkRKMeKdZvGFFwe6ENrMhrQCM05oDkvNNYfXATLcpQGRAyBu9l1xIxUxixpqw==} + '@pythnetwork/pyth-solana-receiver@0.8.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor': 0.29.0 - '@noble/hashes': 1.5.0 + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@noble/hashes': 1.8.0 '@pythnetwork/price-service-sdk': 1.8.0 - '@pythnetwork/solana-utils': 0.4.2 - '@solana/web3.js': 1.95.4 + '@pythnetwork/solana-utils': 0.4.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@pythnetwork/solana-utils@0.4.2: - resolution: {integrity: sha512-hKo7Bcs/kDWA5Fnqhg9zJSB94NMoUDIDjHjSi/uvZOzwizISUQI6oY3LWd2CXzNh4f8djjY2BS5iNHaM4cm8Bw==} + '@pythnetwork/solana-utils@0.4.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor': 0.29.0 - '@solana/web3.js': 1.95.4 + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) bs58: 5.0.0 - jito-ts: 3.0.1 + jito-ts: 3.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) bigint-buffer: 1.1.5 - bignumber.js: 9.1.2 + bignumber.js: 9.3.1 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - /@solana/codecs-core@2.0.0-preview.1: - resolution: {integrity: sha512-0y3kgFSJAOApNGefEOgLRMiXOHVmcF29Xw3zmR4LDUABvytG3ecKMXGz5oLt3vdaU2CyN3tuUVeGmQjrd0U1kw==} + '@solana/codecs-core@2.0.0-preview.1': dependencies: '@solana/errors': 2.0.0-preview.1 - dev: false - - /@solana/codecs-core@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) - typescript: 4.9.5 - dev: true - /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.3.0(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) + '@solana/errors': 2.3.0(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-numbers@2.0.0-preview.1: - resolution: {integrity: sha512-NFA8itgcYUY3hkWMBpVRozd2poy1zfOvkIWZKx/D69oIMUtQTBpKrodRVBuhlBkAv12vDNkFljqVySpcMZMl7A==} + '@solana/codecs-numbers@2.0.0-preview.1': dependencies: '@solana/codecs-core': 2.0.0-preview.1 '@solana/errors': 2.0.0-preview.1 - dev: false - /@solana/codecs-numbers@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.3.0(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-core': 2.3.0(typescript@4.9.5) + '@solana/errors': 2.3.0(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 + '@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.1 '@solana/codecs-numbers': 2.0.0-preview.1 '@solana/errors': 2.0.0-preview.1 fastestsmallesttextencoderdecoder: 1.0.22 - dev: false - /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.9.5 - dev: true - - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) fastestsmallesttextencoderdecoder: 1.0.22 typescript: 4.9.5 - dev: true - - /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) @@ -640,57 +1380,25 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: true - - /@solana/errors@2.0.0-preview.1: - resolution: {integrity: sha512-mnBWfLVwMH4hxwb4sWZ7G7djQCMsyymjysvUPDiF89LueTBm1hfdxUv8Cy1uUCGsJ3jO3scdPwB4noOgr0rG/g==} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - dev: false - /@solana/errors@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/errors@2.0.0-preview.1': dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 - typescript: 4.9.5 - dev: true - /@solana/errors@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/errors@2.0.0-rc.1(typescript@4.9.5)': dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 typescript: 4.9.5 - dev: true - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} - peerDependencies: - typescript: '>=5' + '@solana/errors@2.3.0(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) + chalk: 5.4.1 + commander: 14.0.0 typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) @@ -700,95 +1408,43 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: true - - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 - dependencies: - '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: true - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: true - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: true - /@solana/spl-token@0.1.8: - resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} - engines: {node: '>= 10'} + '@solana/spl-token@0.1.8(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@babel/runtime': 7.27.6 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer: 6.0.3 buffer-layout: 1.2.2 dotenv: 10.0.0 transitivePeerDependencies: - bufferutil - encoding - - utf-8-validate - dev: false - - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: true - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 + '@solana/spl-token@0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -796,19 +1452,14 @@ packages: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: true - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 + '@solana/spl-token@0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -816,300 +1467,193 @@ packages: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: true - - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} - dependencies: - buffer: 6.0.3 - dev: true - /@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.95.4): - resolution: {integrity: sha512-f3kwHF/2Lx3YgcO37B45MM46YLFy4QkdLemZ+N/0SwLAnSfhq3+Vb9bC5vuoupMJ/onos09TIDeIxRdg/+51kw==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.77.3 + '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.95.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 - eventemitter3: 4.0.7 - dev: false + eventemitter3: 5.0.1 - /@solana/wallet-standard-features@1.3.0: - resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} - engines: {node: '>=16'} + '@solana/wallet-standard-features@1.3.0': dependencies: '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 - dev: false - /@solana/web3.js@1.77.4: - resolution: {integrity: sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q==} + '@solana/web3.js@1.77.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 + agentkeepalive: 4.6.0 bigint-buffer: 1.1.5 - bn.js: 5.2.1 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 7.11.0 + rpc-websockets: 7.11.2 superstruct: 0.14.2 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: false - - /@solana/web3.js@1.95.3: - resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} - dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@solana/web3.js@1.95.4: - resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==} - dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - /@solana/web3.js@1.95.8: - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 + agentkeepalive: 4.6.0 bigint-buffer: 1.1.5 - bn.js: 5.2.1 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: true - /@solana/web3.js@1.98.0: - resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 + '@solana/codecs-numbers': 2.3.0(typescript@4.9.5) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + '@solworks/soltoolkit-sdk@0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.67 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@types/bn.js': 5.2.0 + '@types/node': 18.19.119 '@types/node-fetch': 2.6.12 - bn.js: 5.2.1 - decimal.js: 10.4.3 + bn.js: 5.2.2 + decimal.js: 10.6.0 typescript: 4.9.5 transitivePeerDependencies: - bufferutil - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: true - - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: true - /@sqds/multisig@2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-WOiL7La+RSiJsz7jVO85yhSiiSvNMUthiWuLPeWVOoD6IYa34BEAzanF1RdXRWGglSbRFYCTkyr+Ay1WmXmSRQ==} - engines: {node: '>=14'} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/beet-solana': 0.4.0 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.3 - '@types/bn.js': 5.1.6 - assert: 2.1.0 - bn.js: 5.2.1 - buffer: 6.0.3 - invariant: 2.2.4 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate - dev: true + '@soncodi/signal@2.0.7': {} - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.17': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} + '@switchboard-xyz/common@2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.95.8 - axios: 1.7.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 + bn.js: 5.2.2 + bs58: 6.0.0 + cron-validator: 1.4.0 + decimal.js: 10.6.0 + js-sha256: 0.11.1 lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 + protobufjs: 7.5.3 + yaml: 2.8.0 transitivePeerDependencies: - bufferutil - debug - encoding - utf-8-validate - dev: true - /@switchboard-xyz/common@3.0.12: - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} - engines: {node: '>=20'} + '@switchboard-xyz/common@3.0.12(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 6.0.0 buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - protobufjs: 7.4.0 - yaml: 2.6.1 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: true - /@switchboard-xyz/common@3.0.13: - resolution: {integrity: sha512-I+18pvqh6Oajz9bYvAJ/swz+XUqRbz7i3dgz/BzasDyxpI4pzIsG4qsnVfIpAnTGsgzhq61Q6W721SnnyFdKuw==} - engines: {node: '>=20'} + '@switchboard-xyz/common@3.4.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 6.0.0 buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - protobufjs: 7.4.0 - yaml: 2.6.1 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} - engines: {node: '>= 18'} + '@switchboard-xyz/on-demand@1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': dependencies: '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.95.8 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.7.8 + '@coral-xyz/anchor-30': '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)' + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solworks/soltoolkit-sdk': 0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 bs58: 5.0.0 js-yaml: 4.1.0 - protobufjs: 7.4.0 + protobufjs: 7.5.3 transitivePeerDependencies: - bufferutil - debug - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: true - /@switchboard-xyz/on-demand@1.2.67: - resolution: {integrity: sha512-rtGA+9tQHb/xQnUFgVzyaOs2uKgnwP7OqYQLEOjTDdNTEEgU8OTR72ujluOEYB9LMByb7h9SRuOR353vxYQhYA==} - engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x + '@switchboard-xyz/on-demand@1.2.67(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@common.js/quick-lru': 7.0.0 - '@coral-xyz/anchor': 0.30.1 - '@switchboard-xyz/common': 3.0.13 - axios: 1.7.8 + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 3.4.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + axios: 1.10.0 bs58: 6.0.0 buffer: 6.0.3 js-yaml: 4.1.0 @@ -1117,754 +1661,428 @@ packages: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@types/bn.js@5.1.6: - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/bn.js@5.2.0': dependencies: - '@types/node': 20.16.11 - dev: true + '@types/node': 18.19.119 - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.11 + '@types/node': 12.20.55 - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: true + '@types/node': 18.19.119 + form-data: 4.0.4 - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@12.20.55': {} - /@types/node@18.19.67: - resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} + '@types/node@18.19.119': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.16.11: - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@24.0.14': dependencies: - undici-types: 6.19.8 + undici-types: 7.8.0 - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + '@types/uuid@8.3.4': {} - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: - '@types/node': 20.16.11 + '@types/node': 12.20.55 - /@types/ws@8.5.12: - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.18.1': dependencies: - '@types/node': 20.16.11 + '@types/node': 24.0.14 - /@wallet-standard/base@1.1.0: - resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} - engines: {node: '>=16'} - dev: false + '@wallet-standard/base@1.1.0': {} - /@wallet-standard/features@1.1.0: - resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} - engines: {node: '>=16'} + '@wallet-standard/features@1.1.0': dependencies: '@wallet-standard/base': 1.1.0 - dev: false - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 + '@zod/core@0.11.6': {} - /a-sync-waterfall@1.0.1: - resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} - dev: false + a-sync-waterfall@1.0.1: {} - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: false + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: false - - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - dependencies: - call-bind: 1.0.7 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.5 - util: 0.12.5 - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + argparse@2.0.1: {} - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true + asap@2.0.6: {} - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug + asynckit@0.4.0: {} - /axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.10.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - /base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + base-x@4.0.1: {} - /base-x@5.0.1: - resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + base-x@5.0.1: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + base64-js@1.5.1: {} - /big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + big.js@6.2.2: {} - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + bignumber.js@9.3.1: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + bn.js@5.2.2: {} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - /borsh@2.0.0: - resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==} - dev: false + borsh@2.0.0: {} - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: - base-x: 3.0.10 + base-x: 3.0.11 - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + bs58@5.0.0: dependencies: - base-x: 4.0.0 + base-x: 4.0.1 - /bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + bs58@6.0.0: dependencies: base-x: 5.0.1 - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} + buffer-layout@1.2.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true + bufferutil@4.0.9: dependencies: - node-gyp-build: 4.8.2 + node-gyp-build: 4.8.4 + optional: true - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.2: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + camelcase@6.3.0: {} + + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: false - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: false - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false + color-name@1.1.4: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} + commander@12.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@14.0.0: {} - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: false + commander@2.20.3: {} + + commander@5.1.0: {} - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: true + cron-validator@1.4.0: {} - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - - /crypto-hash@3.1.0: - resolution: {integrity: sha512-HR8JlZ+Dn54Lc5gGWZJxJitWbOCUzWb9/AlyONGecBnYZ+n/ONvt0gQnEzDNpJMYeRrYO7KogQ4qwyTPKnWKEw==} - engines: {node: '>=18'} - dev: false + crypto-hash@1.3.0: {} - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true + crypto-hash@3.1.0: {} - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decimal.js@10.6.0: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + dot-case@3.0.4: dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true + no-case: 3.0.4 + tslib: 2.8.1 - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} + dotenv@10.0.0: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + dotenv@16.6.1: {} - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dunder-proto@1.0.1: dependencies: - no-case: 3.0.4 - tslib: 2.7.0 + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: false + emoji-regex@8.0.0: {} - /dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} + es-define-property@1.0.1: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false + es-errors@1.3.0: {} - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + es6-promise@4.2.8: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: false - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + escalade@3.2.0: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + eventemitter3@4.0.7: {} - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} + eventemitter3@5.0.1: {} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + eyes@0.1.8: {} - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fast-stable-stringify@1.0.0: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fastestsmallesttextencoderdecoder@1.0.22: {} - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true + file-uri-to-path@1.0.0: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true + follow-redirects@1.15.9: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + get-proto@1.0.1: dependencies: - get-intrinsic: 1.2.4 + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false + gopd@1.2.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - dependencies: - es-define-property: 1.0.0 + has-flag@4.0.0: {} - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + has-symbols@1.1.0: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 - dev: true + has-symbols: 1.1.0 - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true + ieee754@1.2.1: {} - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.15 - dev: true + is-fullwidth-code-point@3.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false + isarray@2.0.5: {} - /isomorphic-ws@4.0.1(ws@7.5.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /jayson@4.1.2: - resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} - engines: {node: '>=8'} - hasBin: true + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 '@types/ws': 7.4.7 - JSONStream: 1.3.5 commander: 2.20.3 delay: 5.0.0 es6-promisify: 5.0.0 eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) json-stringify-safe: 5.0.1 + stream-json: 1.9.1 uuid: 8.3.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - /jito-ts@3.0.1: - resolution: {integrity: sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg==} + jito-ts@3.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: - '@grpc/grpc-js': 1.13.2 - '@noble/ed25519': 1.7.3 - '@solana/web3.js': 1.77.4 - agentkeepalive: 4.5.0 - dotenv: 16.4.7 - jayson: 4.1.2 + '@grpc/grpc-js': 1.13.4 + '@noble/ed25519': 1.7.5 + '@solana/web3.js': 1.77.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + agentkeepalive: 4.6.0 + dotenv: 16.6.1 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 superstruct: 1.0.4 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: false - - /js-sha256@0.11.0: - resolution: {integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-sha256@0.11.1: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /json-stable-stringify@1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} - engines: {node: '>= 0.4'} + json-stable-stringify@1.3.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 - dev: false - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: false + json-stringify-safe@5.0.1: {} - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} + jsonify@0.0.1: {} - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: false + lodash.camelcase@4.3.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + long@5.3.2: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + lower-case@2.0.2: dependencies: - js-tokens: 4.0.0 - dev: true + tslib: 2.8.1 - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 + make-synchronized@0.4.2: {} - /make-synchronized@0.2.9: - resolution: {integrity: sha512-4wczOs8SLuEdpEvp3vGo83wh8rjJ78UsIk7DIX5fxdfmfMJGog4bQzxfvOwq7Q3yCHLC4jp1urPHIxRS/A93gA==} - dev: false + math-intrinsics@1.1.0: {} - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.7.0 + tslib: 2.8.1 - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - requiresBuild: true + node-gyp-build@4.8.4: + optional: true - /numeral@2.0.6: - resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} - dev: false + numeral@2.0.6: {} - /nunjucks@3.2.4: - resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} - engines: {node: '>= 6.9.0'} - hasBin: true - peerDependencies: - chokidar: ^3.3.0 - peerDependenciesMeta: - chokidar: - optional: true + nunjucks@3.2.4: dependencies: a-sync-waterfall: 1.0.1 asap: 2.0.6 commander: 5.1.0 - dev: false - - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + object-keys@1.1.1: {} - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + pako@2.1.0: {} - /prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - dev: false + prettier@3.6.2: {} - /protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - requiresBuild: true + protobufjs@7.5.3: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -1876,227 +2094,139 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.16.11 - long: 5.2.3 + '@types/node': 24.0.14 + long: 5.3.2 - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@1.1.0: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + require-directory@2.1.1: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: false + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - /rpc-websockets@7.11.0: - resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} - deprecated: deprecate 7.11.0 + rpc-websockets@7.11.2: dependencies: eventemitter3: 4.0.7 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - /rpc-websockets@9.0.4: - resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==} + rpc-websockets@9.1.1: dependencies: - '@swc/helpers': 0.5.13 + '@swc/helpers': 0.5.17 '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 + '@types/ws': 8.18.1 buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: false - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: false - /superstruct@0.14.2: - resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} - dev: false + superstruct@0.14.2: {} - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + superstruct@0.15.5: {} - /superstruct@1.0.4: - resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} - engines: {node: '>=14.0.0'} - dev: false + superstruct@1.0.4: {} - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} + superstruct@2.0.2: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: false - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + text-encoding-utf-8@1.0.2: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + toml@3.0.0: {} - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tr46@0.0.3: {} - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + tslib@2.8.1: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + typescript@4.9.5: {} - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@5.26.5: {} - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 + undici-types@7.8.0: {} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utf-8-validate@5.0.10: dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - dev: true + node-gyp-build: 4.8.4 + optional: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true + uuid@8.3.2: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false + y18n@5.0.8: {} - /yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true + yaml@2.8.0: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: false + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -2105,35 +2235,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: false - file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {directory: solauto-sdk, type: directory} - id: file:solauto-sdk - name: '@haven-fi/solauto-sdk' + zod@4.0.0-beta.20250505T195954: dependencies: - '@coral-xyz/anchor': 0.30.1 - '@jup-ag/api': 6.0.24 - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-bundle-defaults': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-signer-wallet-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/spl-token': 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - '@sqds/multisig': 2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@switchboard-xyz/common': 3.0.12 - '@switchboard-xyz/on-demand': 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) - '@types/node': 20.16.11 - axios: 1.7.8 - bs58: 5.0.0 - cross-fetch: 4.0.0 - dotenv: 16.4.7 - rpc-websockets: 7.11.0 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true + '@zod/core': 0.11.6 diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 5003c773..ee47e07a 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -1,118 +1,1166 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1 - '@jup-ag/api': - specifier: '=6.0.24' - version: 6.0.24 - '@metaplex-foundation/umi': - specifier: ^0.9.1 - version: 0.9.2 - '@metaplex-foundation/umi-bundle-defaults': - specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-signer-wallet-adapters': - specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-web3js-adapters': - specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/spl-token': - specifier: ^0.4.0 - version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': - specifier: '=1.95.8' - version: 1.95.8 - '@switchboard-xyz/common': - specifier: '=3.0.12' - version: 3.0.12 - '@switchboard-xyz/on-demand': - specifier: '=1.2.51' - version: 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) - axios: - specifier: ^1.7.8 - version: 1.7.8 - big.js: - specifier: ^6.2.2 - version: 6.2.2 - bs58: - specifier: ^5.0.0 - version: 5.0.0 - cross-fetch: - specifier: ^4.0.0 - version: 4.0.0 - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - rpc-websockets: - specifier: 7.11.0 - version: 7.11.0 - -devDependencies: - '@types/big.js': - specifier: ^6.2.2 - version: 6.2.2 - '@types/chai': - specifier: ^4.3.0 - version: 4.3.20 - '@types/mocha': - specifier: ^9.1.1 - version: 9.1.1 - '@types/node': - specifier: ^20.16.11 - version: 20.16.11 - chai: - specifier: ^4.3.4 - version: 4.5.0 - mocha: - specifier: ^9.2.2 - version: 9.2.2 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.2.2) - typescript: - specifier: ^5.5.4 - version: 5.6.3 +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.1 + version: 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@jup-ag/api': + specifier: '=6.0.24' + version: 6.0.24 + '@metaplex-foundation/umi': + specifier: ^0.9.1 + version: 0.9.2 + '@metaplex-foundation/umi-bundle-defaults': + specifier: ^0.9.1 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-signer-wallet-adapters': + specifier: ^0.9.1 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-web3js-adapters': + specifier: ^0.9.1 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/spl-token': + specifier: ^0.4.0 + version: 0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: '=1.95.8' + version: 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': + specifier: '=3.0.12' + version: 3.0.12(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@switchboard-xyz/on-demand': + specifier: '=1.2.51' + version: 1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + axios: + specifier: ^1.7.8 + version: 1.10.0 + big.js: + specifier: ^6.2.2 + version: 6.2.2 + bs58: + specifier: ^5.0.0 + version: 5.0.0 + cross-fetch: + specifier: ^4.0.0 + version: 4.1.0 + dotenv: + specifier: ^16.4.7 + version: 16.6.1 + rpc-websockets: + specifier: 7.11.0 + version: 7.11.0 + devDependencies: + '@types/big.js': + specifier: ^6.2.2 + version: 6.2.2 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.20 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + '@types/node': + specifier: ^20.16.11 + version: 20.19.8 + chai: + specifier: ^4.3.4 + version: 4.5.0 + mocha: + specifier: ^9.2.2 + version: 9.2.2 + ts-mocha: + specifier: ^10.0.0 + version: 10.1.0(mocha@9.2.2) + typescript: + specifier: ^5.5.4 + version: 5.8.3 packages: - /@babel/runtime@7.25.7: - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + '@brokerloop/ttlcache@3.2.3': + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + + '@coral-xyz/anchor-errors@0.30.1': + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + engines: {node: '>=10'} + + '@coral-xyz/anchor@0.30.1': + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.1': + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@jup-ag/api@6.0.24': + resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} + + '@metaplex-foundation/umi-bundle-defaults@0.9.2': + resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-downloader-http@0.9.2': + resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-eddsa-web3js@0.9.2': + resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-http-fetch@0.9.2': + resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-options@0.8.9': + resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} + + '@metaplex-foundation/umi-program-repository@0.9.2': + resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-public-keys@0.8.9': + resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2': + resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-rpc-web3js@0.9.2': + resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-serializer-data-view@0.9.2': + resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-serializers-core@0.8.9': + resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} + + '@metaplex-foundation/umi-serializers-encodings@0.8.9': + resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + + '@metaplex-foundation/umi-serializers-numbers@0.8.9': + resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + + '@metaplex-foundation/umi-serializers@0.9.0': + resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2': + resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2': + resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-web3js-adapters@0.9.2': + resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi@0.9.2': + resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + + '@noble/curves@1.9.4': + resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-token@0.4.13': + resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/web3.js@1.95.8': + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@solworks/soltoolkit-sdk@0.0.23': + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + + '@soncodi/signal@2.0.7': + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@switchboard-xyz/common@2.5.19': + resolution: {integrity: sha512-Bzj1bu2U69YRh2OoNjkrafdREeB1KH+wmeFkBsASDjlhy/xXjey2Ry2HUTAIzdg2DMtfP6DoCW2Nn9ZQD5IO+Q==} + engines: {node: '>=12'} + + '@switchboard-xyz/common@3.0.12': + resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} + engines: {node: '>=20'} + + '@switchboard-xyz/on-demand@1.2.51': + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + engines: {node: '>= 18'} + deprecated: deprecated in favor of 2.x.x + + '@types/big.js@6.2.2': + resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@18.19.119': + resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} + + '@types/node@20.19.8': + resolution: {integrity: sha512-HzbgCY53T6bfu4tT7Aq3TvViJyHjLjPNaAS3HOuMc9pw97KHsUtXNX4L+wu59g1WnjsZSko35MbEqnO58rihhw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cron-validator@1.4.0: + resolution: {integrity: sha512-wGcJ9FCy65iaU6egSH8b5dZYJF7GU/3Jh06wzaT9lsa5dbqExjljmu+0cJ8cpKn+vUyZa/EM4WAxeLR6SypJXw==} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + js-sha256@0.11.1: + resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + protobufjs@7.5.3: + resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + deprecated: deprecate 7.11.0 + + rpc-websockets@9.1.1: + resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.1.0: + resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.27.6': {} + + '@brokerloop/ttlcache@3.2.3': dependencies: '@soncodi/signal': 2.0.7 - dev: false - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} - engines: {node: '>=10'} - dev: false + '@coral-xyz/anchor-errors@0.30.1': {} - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.8 - bn.js: 5.2.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + bn.js: 5.2.2 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 - cross-fetch: 3.1.8 + cross-fetch: 3.2.0 crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 @@ -123,410 +1171,222 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.8 - bn.js: 5.2.1 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer-layout: 1.2.2 - dev: false - /@jup-ag/api@6.0.24: - resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} - dev: false + '@jup-ag/api@6.0.24': {} - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - encoding - dev: false - /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.8 - dev: false - - /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@noble/curves': 1.9.4 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - /@metaplex-foundation/umi-options@0.8.9: - resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} - dev: false + '@metaplex-foundation/umi-options@0.8.9': {} - /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-public-keys@0.8.9: - resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + '@metaplex-foundation/umi-public-keys@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - dev: false - /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: false + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-serializers-core@0.8.9: - resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} - dev: false + '@metaplex-foundation/umi-serializers-core@0.8.9': {} - /@metaplex-foundation/umi-serializers-encodings@0.8.9: - resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + '@metaplex-foundation/umi-serializers-encodings@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: false - /@metaplex-foundation/umi-serializers-numbers@0.8.9: - resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + '@metaplex-foundation/umi-serializers-numbers@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: false - /@metaplex-foundation/umi-serializers@0.9.0: - resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + '@metaplex-foundation/umi-serializers@0.9.0': dependencies: '@metaplex-foundation/umi-options': 0.8.9 '@metaplex-foundation/umi-public-keys': 0.8.9 '@metaplex-foundation/umi-serializers-core': 0.8.9 '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - dev: false - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: false + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: false + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 - dev: false - /@metaplex-foundation/umi@0.9.2: - resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + '@metaplex-foundation/umi@0.9.2': dependencies: '@metaplex-foundation/umi-options': 0.8.9 '@metaplex-foundation/umi-public-keys': 0.8.9 '@metaplex-foundation/umi-serializers': 0.9.0 - dev: false - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} - engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.9.4': dependencies: - '@noble/hashes': 1.5.0 - dev: false + '@noble/hashes': 1.8.0 - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} - dev: false + '@noble/hashes@1.8.0': {} - /@protobufjs/aspromise@1.1.2: - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - dev: false + '@protobufjs/aspromise@1.1.2': {} - /@protobufjs/base64@1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: false + '@protobufjs/base64@1.1.2': {} - /@protobufjs/codegen@2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: false + '@protobufjs/codegen@2.0.4': {} - /@protobufjs/eventemitter@1.1.0: - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - dev: false + '@protobufjs/eventemitter@1.1.0': {} - /@protobufjs/fetch@1.1.0: - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.0': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 - dev: false - /@protobufjs/float@1.0.2: - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - dev: false + '@protobufjs/float@1.0.2': {} - /@protobufjs/inquire@1.1.0: - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - dev: false + '@protobufjs/inquire@1.1.0': {} - /@protobufjs/path@1.1.2: - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - dev: false + '@protobufjs/path@1.1.2': {} - /@protobufjs/pool@1.1.0: - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - dev: false + '@protobufjs/pool@1.1.0': {} - /@protobufjs/utf8@1.1.0: - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - dev: false + '@protobufjs/utf8@1.1.0': {} - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) bigint-buffer: 1.1.5 - bignumber.js: 9.1.2 + bignumber.js: 9.3.1 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: false - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - dev: false - - /@solana/codecs-core@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.0.0-rc.1(typescript@5.8.3)': dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 - dev: false + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.3.0(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - dev: false + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 - dev: false - - /@solana/codecs-numbers@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - dev: false + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: false - /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 - dev: false + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 - /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@solana/codecs-numbers@2.3.0(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.6.3 - dev: false + '@solana/codecs-core': 2.3.0(typescript@5.8.3) + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) fastestsmallesttextencoderdecoder: 1.0.22 typescript: 4.9.5 - dev: false - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.6.3 - dev: false - - /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + typescript: 5.8.3 - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) @@ -536,75 +1396,37 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - typescript: 5.6.3 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - - /@solana/errors@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} - hasBin: true - peerDependencies: - typescript: '>=5' - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 5.6.3 - dev: false - /@solana/errors@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/errors@2.0.0-rc.1(typescript@4.9.5)': dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 typescript: 4.9.5 - dev: false - /@solana/errors@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/errors@2.0.0-rc.1(typescript@5.8.3)': dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 - typescript: 5.6.3 - dev: false + typescript: 5.8.3 - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} - peerDependencies: - typescript: '>=5' + '@solana/errors@2.3.0(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + chalk: 5.4.1 + commander: 14.0.0 + typescript: 5.8.3 - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) @@ -614,75 +1436,48 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: false - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.0 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: false - /@solana/spl-token@0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 + '@solana/spl-token@0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -690,19 +1485,14 @@ packages: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: false - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 + '@solana/spl-token@0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -710,434 +1500,288 @@ packages: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: false - - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} - dependencies: - buffer: 6.0.3 - dev: false - /@solana/web3.js@1.95.8: - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 + agentkeepalive: 4.6.0 bigint-buffer: 1.1.5 - bn.js: 5.2.1 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: false - /@solana/web3.js@1.98.0: - resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.8.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + '@solworks/soltoolkit-sdk@0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.65 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@types/bn.js': 5.2.0 + '@types/node': 18.19.119 '@types/node-fetch': 2.6.12 - bn.js: 5.2.1 - decimal.js: 10.4.3 + bn.js: 5.2.2 + decimal.js: 10.6.0 typescript: 4.9.5 transitivePeerDependencies: - bufferutil - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: false - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: false + '@soncodi/signal@2.0.7': {} - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.17': dependencies: - tslib: 2.7.0 - dev: false + tslib: 2.8.1 - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} + '@switchboard-xyz/common@2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 + bn.js: 5.2.2 + bs58: 6.0.0 + cron-validator: 1.4.0 + decimal.js: 10.6.0 + js-sha256: 0.11.1 lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 + protobufjs: 7.5.3 + yaml: 2.8.0 transitivePeerDependencies: - bufferutil - debug - encoding - utf-8-validate - dev: false - /@switchboard-xyz/common@3.0.12: - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} - engines: {node: '>=20'} + '@switchboard-xyz/common@3.0.12(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 6.0.0 buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - protobufjs: 7.4.0 - yaml: 2.6.1 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} - engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x + '@switchboard-xyz/on-demand@1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': dependencies: '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.98.0 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.8.4 + '@coral-xyz/anchor-30': '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)' + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solworks/soltoolkit-sdk': 0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 bs58: 5.0.0 js-yaml: 4.1.0 - protobufjs: 7.4.0 + protobufjs: 7.5.3 transitivePeerDependencies: - bufferutil - debug - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: false - /@types/big.js@6.2.2: - resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} - dev: true + '@types/big.js@6.2.2': {} - /@types/bn.js@5.1.6: - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/bn.js@5.2.0': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@types/chai@4.3.20: - resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} - dev: true + '@types/chai@4.3.20': {} - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true + '@types/json5@0.0.29': optional: true - /@types/mocha@9.1.1: - resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} - dev: true + '@types/mocha@9.1.1': {} - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: false + '@types/node': 20.19.8 + form-data: 4.0.4 - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false + '@types/node@12.20.55': {} - /@types/node@18.19.65: - resolution: {integrity: sha512-Ay5BZuO1UkTmVHzZJNvZKw/E+iB3GQABb6kijEz89w2JrfhNA+M/ebp18pfz9Gqe9ywhMC8AA8yC01lZq48J+Q==} + '@types/node@18.19.119': dependencies: undici-types: 5.26.5 - dev: false - /@types/node@20.16.11: - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@20.19.8': dependencies: - undici-types: 6.19.8 + undici-types: 6.21.0 - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - dev: false + '@types/uuid@8.3.4': {} - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@types/ws@8.5.12: - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.18.1': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true - - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: false + '@ungap/promise-all-settled@1.1.2': {} - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - dev: false - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + argparse@2.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + arrify@1.0.1: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + assertion-error@1.1.0: {} - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false + asynckit@0.4.0: {} - /axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.10.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 - dev: false - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - dev: false + base-x@4.0.1: {} - /base-x@5.0.0: - resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} - dev: false + base-x@5.0.1: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false + base64-js@1.5.1: {} - /big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} - dev: false + big.js@6.2.2: {} - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 - dev: false - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + bignumber.js@9.3.1: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: false - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@5.2.2: {} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - dev: false - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true + browser-stdout@1.3.1: {} - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: - base-x: 3.0.10 - dev: false + base-x: 3.0.11 - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + bs58@5.0.0: dependencies: - base-x: 4.0.0 - dev: false + base-x: 4.0.1 - /bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + bs58@6.0.0: dependencies: - base-x: 5.0.0 - dev: false + base-x: 5.0.1 - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - dev: false + buffer-layout@1.2.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true + bufferutil@4.0.9: dependencies: - node-gyp-build: 4.8.2 - dev: false + node-gyp-build: 4.8.4 + optional: true - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - /chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + camelcase@6.3.0: {} + + chai@4.5.0: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -1146,30 +1790,19 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.1.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false + chalk@5.4.1: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 - dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -1180,252 +1813,176 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: false - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: false + commander@12.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false + commander@14.0.0: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + commander@2.20.3: {} + + concat-map@0.0.1: {} - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: false + cron-validator@1.4.0: {} - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false + crypto-hash@1.3.0: {} - /debug@4.3.3(supports-color@8.1.1): - resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.3(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 - dev: true - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true + decamelize@4.0.0: {} - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: false + decimal.js@10.6.0: {} - /deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} + deep-eql@4.1.4: dependencies: type-detect: 4.1.0 - dev: true - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - dev: false + delay@5.0.0: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false + delayed-stream@1.0.0: {} - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true + diff@3.5.0: {} - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.0.0: {} - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.7.0 - dev: false + tslib: 2.8.1 - /dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dev: false + dotenv@16.6.1: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false + emoji-regex@8.0.0: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - dev: false - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false + eventemitter3@4.0.7: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: false + eventemitter3@5.0.1: {} - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - dev: false + eyes@0.1.8: {} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - dev: false + fast-stable-stringify@1.0.0: {} - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: false + fastestsmallesttextencoderdecoder@1.0.22: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: false + file-uri-to-path@1.0.0: {} - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.9: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - dev: false - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + function-bind@1.1.2: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-caller-file@2.0.5: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + get-func-name@2.0.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1433,225 +1990,139 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true + gopd@1.2.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + growl@1.10.5: {} - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + has-flag@4.0.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: false - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + ieee754@1.2.1: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true + is-plain-obj@2.1.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@4.0.1(ws@7.5.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 7.5.10 - dev: false + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /jayson@4.1.2: - resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} - engines: {node: '>=8'} - hasBin: true + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 '@types/ws': 7.4.7 - JSONStream: 1.3.5 commander: 2.20.3 delay: 5.0.0 es6-promisify: 5.0.0 eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) json-stringify-safe: 5.0.1 + stream-json: 1.9.1 uuid: 8.3.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /js-sha256@0.11.0: - resolution: {integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==} - dev: false + js-sha256@0.11.1: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - requiresBuild: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true optional: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: false - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false + long@5.3.2: {} - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@2.3.7: dependencies: get-func-name: 2.0.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: - tslib: 2.7.0 - dev: false + tslib: 2.8.1 - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + math-intrinsics@1.1.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} + + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: false - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 - dev: true + brace-expansion: 1.1.12 - /minimatch@4.2.1: - resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} - engines: {node: '>=10'} + minimatch@4.2.1: dependencies: - brace-expansion: 1.1.11 - dev: true + brace-expansion: 1.1.12 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mocha@9.2.2: - resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} - engines: {node: '>= 12.0.0'} - hasBin: true + mocha@9.2.2: dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 @@ -1677,98 +2148,50 @@ packages: yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /nanoid@3.3.1: - resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.1: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.7.0 - dev: false + tslib: 2.8.1 - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: false - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - requiresBuild: true - dev: false + node-gyp-build@4.8.4: + optional: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: false + pako@2.1.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - requiresBuild: true + protobufjs@7.5.3: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -1780,182 +2203,112 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.16.11 - long: 5.2.3 - dev: false + '@types/node': 20.19.8 + long: 5.3.2 - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + proxy-from-env@1.1.0: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false + require-directory@2.1.1: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /rpc-websockets@7.11.0: - resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} - deprecated: deprecate 7.11.0 + rpc-websockets@7.11.0: dependencies: eventemitter3: 4.0.7 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - dev: false - /rpc-websockets@9.0.4: - resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==} + rpc-websockets@9.1.1: dependencies: - '@swc/helpers': 0.5.13 + '@swc/helpers': 0.5.17 '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 + '@types/ws': 8.18.1 buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - dev: false - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + serialize-javascript@6.0.0: dependencies: randombytes: 2.1.0 - dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 - dev: false + tslib: 2.8.1 - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - requiresBuild: true - dev: true + strip-bom@3.0.0: optional: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: false + superstruct@0.15.5: {} - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - dev: false + superstruct@2.0.2: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - dev: false - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false + text-encoding-utf-8@1.0.2: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false + toml@3.0.0: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false + tr46@0.0.3: {} - /ts-mocha@10.0.0(mocha@9.2.2): - resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} - engines: {node: '>= 6.X.X'} - hasBin: true - peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + ts-mocha@10.1.0(mocha@9.2.2): dependencies: mocha: 9.2.2 ts-node: 7.0.1 optionalDependencies: tsconfig-paths: 3.15.0 - dev: true - /ts-node@7.0.1: - resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} - engines: {node: '>=4.2.0'} - hasBin: true + ts-node@7.0.1: dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -1965,153 +2318,79 @@ packages: mkdirp: 0.5.6 source-map-support: 0.5.21 yn: 2.0.0 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true optional: true - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - dev: false + tslib@2.8.1: {} - /type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - dev: true + type-detect@4.1.0: {} - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false + typescript@4.9.5: {} - /typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true + typescript@5.8.3: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: false + undici-types@5.26.5: {} - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: {} - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true + utf-8-validate@5.0.10: dependencies: - node-gyp-build: 4.8.2 - dev: false + node-gyp-build: 4.8.4 + optional: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false + uuid@8.3.2: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /workerpool@6.2.0: - resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} - dev: true + workerpool@6.2.0: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - dev: false - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true - dev: false + yaml@2.8.0: {} - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.4: {} - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.2.0 @@ -2120,14 +2399,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: true - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true + yn@2.0.0: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} From a3dec7b9d3903dc41516725029b7fb895a20438c Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 4 Sep 2025 00:52:10 +0900 Subject: [PATCH 71/83] oracle changes from marginfi --- solauto-sdk/package.json | 2 +- .../src/constants/switchboardConstants.ts | 17 ++++++++ .../manager/clientTransactionsManager.ts | 41 ++++++++++++------- solauto-sdk/src/utils/priceUtils.ts | 10 +++-- 4 files changed, 52 insertions(+), 18 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 312f8f19..a891bfe0 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.789", + "version": "1.0.792", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/constants/switchboardConstants.ts b/solauto-sdk/src/constants/switchboardConstants.ts index bd2110eb..dafd62fd 100644 --- a/solauto-sdk/src/constants/switchboardConstants.ts +++ b/solauto-sdk/src/constants/switchboardConstants.ts @@ -1,3 +1,4 @@ +import { NATIVE_MINT } from "@solana/spl-token"; import * as tokens from "./tokenConstants"; interface SwitchboardFeed { @@ -7,11 +8,27 @@ interface SwitchboardFeed { // https://beta.ondemand.switchboard.xyz/solana/mainnet export const SWITCHBOARD_PRICE_FEED_IDS: { [key: string]: SwitchboardFeed } = { + [NATIVE_MINT.toString()]: { + feedId: "4Hmd6PdjVA9auCoScE12iaBogfwS4ZXQ6VZoBeqanwWW", + feedHash: "0x1f42dfb21efb24828b99fbe70e6d139cd665aafcbb1706bccd8f2a9b12562db6", + }, [tokens.JUP_SOL]: { feedId: "HX5WM3qzogAfRCjBUWwnniLByMfFrjm1b5yo4KoWGR27", feedHash: "0xc02f22d47b20b43bafde474328ac027283dbd7bb443660f5ec414c93faec56dc", }, + [tokens.JITO_SOL]: { + feedId: "5htZ4vPKPjAEg8EJv6JHcaCetMM4XehZo8znQvrp6Ur3", + feedHash: "0x44f5a7676baf4c6e5eb26fdde2695e7e3e0971071b76ddc622fa71528092ca25" + }, + [tokens.LST]: { + feedId: "BWK8Wnybb7rPteNMqJs9uWoqdfYApNym6WgE59BwLe1v", + feedHash: "0x74e140c452fe29cced80898a51961ed1410c1fe0efbdc970fe5aac986427419e" + }, + [tokens.JTO]: { + feedId: "A9RnpLxxtAS2TR3HtSMNJfsKpRPvkLbBkGZ6gKziSPLr", + feedHash: "0xa5bc3b659791facc5edfd8e74942c79d7e8d59f0f913dcdd9bcfb33a2fceb575" + }, [tokens.H_SOL]: { feedId: "1snBjCaHejZqQsAqkELAKNaqUrDNNCr7zmNX6qaQCzg", feedHash: diff --git a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts index bc8a9dfb..9a1b2a4c 100644 --- a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts @@ -6,6 +6,7 @@ import { SolautoClient } from "../../solauto"; import { TransactionsManager } from "./transactionsManager"; import { buildSwbSubmitResponseTx, + getSwitchboardFeedData, isSwitchboardMint, retryWithExponentialBackoff, } from "../../../utils"; @@ -44,20 +45,31 @@ export class ClientTransactionsManager extends TransactionsManager x.oracleInteractor) && switchboardMints.length) { - this.txHandler.log("Requires oracle update(s)..."); - const oracleTxs = switchboardMints.map( - (x) => - new TransactionItem( - async () => - await buildSwbSubmitResponseTx( - this.txHandler.connection, - this.txHandler.signer, - x - ), - this.updateOracleTxName + this.txHandler.log("Checking if oracle update(s) needed..."); + const staleOracles = + ( + await getSwitchboardFeedData( + this.txHandler.connection, + switchboardMints ) - ); - txs.unshift(...oracleTxs); + ).filter((x) => x.stale).length > 0; + + if (staleOracles) { + this.txHandler.log("Requires oracle update(s)..."); + const oracleTxs = switchboardMints.map( + (x) => + new TransactionItem( + async () => + await buildSwbSubmitResponseTx( + this.txHandler.connection, + this.txHandler.signer, + x + ), + this.updateOracleTxName + ) + ); + txs.unshift(...oracleTxs); + } } } @@ -111,7 +123,8 @@ export class ClientTransactionsManager extends TransactionsManager 4; + const updateLutInSepTx = + updateLut?.new || (updateLut?.accountsToAdd ?? []).length > 4; if (updateLut && updateLutInSepTx) { await this.updateLut(updateLut.tx, updateLut.new); } diff --git a/solauto-sdk/src/utils/priceUtils.ts b/solauto-sdk/src/utils/priceUtils.ts index 52058e8f..0d1ae90e 100644 --- a/solauto-sdk/src/utils/priceUtils.ts +++ b/solauto-sdk/src/utils/priceUtils.ts @@ -45,8 +45,10 @@ export async function fetchTokenPrices( const pythMints = newMints.filter((x) => Object.keys(PYTH_PRICE_FEED_IDS).includes(x.toString()) ); - const switchboardMints = newMints.filter((x) => - Object.keys(SWITCHBOARD_PRICE_FEED_IDS).includes(x.toString()) + const switchboardMints = newMints.filter( + (x) => + Object.keys(SWITCHBOARD_PRICE_FEED_IDS).includes(x.toString()) && + !pythMints.map((y) => y.toString()).includes(x.toString()) ); const otherMints = newMints.filter( (x) => !pythMints.includes(x) && !switchboardMints.includes(x) @@ -88,7 +90,9 @@ export async function getPythPrices( const getReq = async () => await fetch( - `https://hermes.pyth.network/v2/updates/price/latest?${priceFeedIds.map((x) => `ids%5B%5D=${x}`).join("&")}` + `https://hermes.pyth.network/v2/updates/price/latest?${priceFeedIds + .map((x) => `ids%5B%5D=${x}`) + .join("&")}` ); const deriveValue = (price: number, exponent: number) => { From 05ebbcb7879813cf0dc2194d790cdc4840275990 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 8 Sep 2025 16:28:01 +0900 Subject: [PATCH 72/83] script change --- package.json | 5 ++-- pnpm-lock.yaml | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c4fdafb6..d5c25753 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build:ts": "cd solauto-sdk && npm run build", "deploy:buffer": "solana program write-buffer target/deploy/solauto.so --use-rpc --max-sign-attempts 50 --with-compute-unit-price 0.00001", "deploy:rs:test": "solana program deploy target/deploy/solauto.so --program-id TesTjfQ6TbXv96Tv6fqr95XTZ1LYPxtkafmShN9PjBp --use-rpc --buffer ~/.config/solana/buffer.json --max-sign-attempts 50", - "deploy:ts": "cd solauto-sdk && npm publish", + "deploy:ts": "cd solauto-sdk && cross-env NPM_TOKEN=$CHELISO_NPM_TOKEN npm publish", "generate": "pnpm generate:idl && pnpm generate:clients", "generate:idl": "shank idl --crate-root programs/solauto --out-dir idls --out-filename solauto.json -p AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV", "generate:clients": "node ./generateClients.cjs && pnpm format:rust", @@ -36,7 +36,8 @@ "@metaplex-foundation/kinobi": "^0.18.5", "@mrgnlabs/marginfi-client-v2": "^6.0.1", "@mrgnlabs/mrgn-common": "^2.0.2", - "borsh": "^2.0.0" + "borsh": "^2.0.0", + "cross-env": "^10.0.0" }, "devDependencies": { "solauto-sdk": "file:solauto-sdk", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95d1b0a1..b2f2475b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: borsh: specifier: ^2.0.0 version: 2.0.0 + cross-env: + specifier: ^10.0.0 + version: 10.0.0 devDependencies: solauto-sdk: specifier: file:solauto-sdk @@ -65,6 +68,9 @@ packages: peerDependencies: '@solana/web3.js': ^1.68.0 + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + '@grpc/grpc-js@1.13.4': resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} engines: {node: '>=12.10.0'} @@ -562,12 +568,21 @@ packages: cron-validator@1.4.0: resolution: {integrity: sha512-wGcJ9FCy65iaU6egSH8b5dZYJF7GU/3Jh06wzaT9lsa5dbqExjljmu+0cJ8cpKn+vUyZa/EM4WAxeLR6SypJXw==} + cross-env@10.0.0: + resolution: {integrity: sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==} + engines: {node: '>=20'} + hasBin: true + cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crypto-hash@1.3.0: resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} engines: {node: '>=8'} @@ -718,6 +733,9 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@4.0.1: resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: @@ -814,6 +832,10 @@ packages: pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} @@ -847,6 +869,14 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -919,6 +949,11 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1041,6 +1076,8 @@ snapshots: bn.js: 5.2.2 buffer-layout: 1.2.2 + '@epic-web/invariant@1.0.0': {} + '@grpc/grpc-js@1.13.4': dependencies: '@grpc/proto-loader': 0.7.15 @@ -1839,6 +1876,11 @@ snapshots: cron-validator@1.4.0: {} + cross-env@10.0.0: + dependencies: + '@epic-web/invariant': 1.0.0 + cross-spawn: 7.0.6 + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 @@ -1851,6 +1893,12 @@ snapshots: transitivePeerDependencies: - encoding + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypto-hash@1.3.0: {} crypto-hash@3.1.0: {} @@ -1979,6 +2027,8 @@ snapshots: isarray@2.0.5: {} + isexe@2.0.0: {} + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -2080,6 +2130,8 @@ snapshots: pako@2.1.0: {} + path-key@3.1.1: {} + prettier@3.6.2: {} protobufjs@7.5.3: @@ -2143,6 +2195,12 @@ snapshots: gopd: 1.2.0 has-property-descriptors: 1.0.2 + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -2204,6 +2262,10 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which@2.0.2: + dependencies: + isexe: 2.0.0 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 From 728b9738390273770a8c6a7ff15c9ee9ba9be5c5 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Mon, 8 Sep 2025 16:33:49 +0900 Subject: [PATCH 73/83] revert --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d5c25753..4c03ec4e 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build:ts": "cd solauto-sdk && npm run build", "deploy:buffer": "solana program write-buffer target/deploy/solauto.so --use-rpc --max-sign-attempts 50 --with-compute-unit-price 0.00001", "deploy:rs:test": "solana program deploy target/deploy/solauto.so --program-id TesTjfQ6TbXv96Tv6fqr95XTZ1LYPxtkafmShN9PjBp --use-rpc --buffer ~/.config/solana/buffer.json --max-sign-attempts 50", - "deploy:ts": "cd solauto-sdk && cross-env NPM_TOKEN=$CHELISO_NPM_TOKEN npm publish", + "deploy:ts": "cd solauto-sdk && npm publish", "generate": "pnpm generate:idl && pnpm generate:clients", "generate:idl": "shank idl --crate-root programs/solauto --out-dir idls --out-filename solauto.json -p AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV", "generate:clients": "node ./generateClients.cjs && pnpm format:rust", From b5a32aef07dd123a517f10c7e737eecf0320fbaf Mon Sep 17 00:00:00 2001 From: Chelioso Date: Tue, 9 Sep 2025 00:18:51 +0900 Subject: [PATCH 74/83] marginfi crossbar instance --- solauto-sdk/src/utils/priceUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/src/utils/priceUtils.ts b/solauto-sdk/src/utils/priceUtils.ts index 0d1ae90e..cc3f4eb3 100644 --- a/solauto-sdk/src/utils/priceUtils.ts +++ b/solauto-sdk/src/utils/priceUtils.ts @@ -160,7 +160,7 @@ export async function getSwitchboardPrices( } const { CrossbarClient } = SwbCommon; - const crossbar = CrossbarClient.default(); + const crossbar = new CrossbarClient("https://integrator-crossbar.mrgn.app/"); let prices: Record = {}; try { From e765fff547d416c47af2de68e081ad2f8ce6bb3d Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 2 Oct 2025 00:07:01 +0800 Subject: [PATCH 75/83] fix jup api --- solauto-sdk/src/services/swap/jupSwapManager.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/solauto-sdk/src/services/swap/jupSwapManager.ts b/solauto-sdk/src/services/swap/jupSwapManager.ts index e2b4e659..1df49106 100644 --- a/solauto-sdk/src/services/swap/jupSwapManager.ts +++ b/solauto-sdk/src/services/swap/jupSwapManager.ts @@ -47,7 +47,9 @@ export interface JupSwapTransactionData { } export class JupSwapManager { - jupApi = createJupiterApiClient(); + jupApi = createJupiterApiClient({ + basePath: "https://lite-api.jup.ag" + }); public jupQuote: QuoteResponse | undefined = undefined; @@ -103,7 +105,6 @@ export class JupSwapManager { userPublicKey: this.signer.publicKey.toString(), quoteResponse: this.jupQuote!, wrapAndUnwrapSol: data.wrapAndUnwrapSol ?? false, - useTokenLedger: !data.exactOut && !data.exactIn, destinationTokenAccount: getTokenAccount( data.destinationWallet ?? toWeb3JsPublicKey(this.signer.publicKey), From cc047cd46b382003ec744df207b208eb2e7949f9 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Thu, 2 Oct 2025 14:45:59 +0800 Subject: [PATCH 76/83] wip fixing swb --- solauto-sdk/package.json | 12 +- solauto-sdk/pnpm-lock.yaml | 421 +++++------------- .../manager/clientTransactionsManager.ts | 1 + solauto-sdk/src/utils/jitoUtils.ts | 3 +- solauto-sdk/src/utils/solanaUtils.ts | 31 +- solauto-sdk/src/utils/switchboardUtils.ts | 33 +- 6 files changed, 175 insertions(+), 326 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index a891bfe0..484905a4 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.792", + "version": "1.0.804", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -12,16 +12,16 @@ "test:unit": "ts-mocha -p ./tsconfig.json -t 1000000 tests/unit/**/*.ts" }, "dependencies": { - "@coral-xyz/anchor": "^0.30.1", - "@jup-ag/api": "=6.0.24", + "@coral-xyz/anchor": "=0.31.1", + "@jup-ag/api": "=6.0.44", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", "@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.1", "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "=1.95.8", - "@switchboard-xyz/common": "=3.0.12", - "@switchboard-xyz/on-demand": "=1.2.51", + "@solana/web3.js": "=1.98.2", + "@switchboard-xyz/common": "=3.4.1", + "@switchboard-xyz/on-demand": "=2.16.3", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index ee47e07a..4525f1dc 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -9,35 +9,35 @@ importers: .: dependencies: '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + specifier: '=0.31.1' + version: 0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@jup-ag/api': - specifier: '=6.0.24' - version: 6.0.24 + specifier: '=6.0.44' + version: 6.0.44 '@metaplex-foundation/umi': specifier: ^0.9.1 version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-signer-wallet-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/spl-token': specifier: ^0.4.0 - version: 0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 0.4.13(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) '@solana/web3.js': - specifier: '=1.95.8' - version: 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + specifier: '=1.98.2' + version: 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@switchboard-xyz/common': - specifier: '=3.0.12' - version: 3.0.12(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + specifier: '=3.4.1' + version: 3.4.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@switchboard-xyz/on-demand': - specifier: '=1.2.51' - version: 1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + specifier: '=2.16.3' + version: 2.16.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) axios: specifier: ^1.7.8 version: 1.10.0 @@ -88,25 +88,26 @@ packages: resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - '@brokerloop/ttlcache@3.2.3': - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} - - '@coral-xyz/anchor-errors@0.30.1': - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + '@coral-xyz/anchor-errors@0.31.1': + resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} engines: {node: '>=10'} - '@coral-xyz/anchor@0.30.1': - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.31.1': + resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} + engines: {node: '>=17'} - '@coral-xyz/borsh@0.30.1': - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + '@coral-xyz/borsh@0.31.1': + resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} engines: {node: '>=10'} peerDependencies: - '@solana/web3.js': ^1.68.0 + '@solana/web3.js': ^1.69.0 + + '@isaacs/ttlcache@1.4.1': + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} - '@jup-ag/api@6.0.24': - resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} + '@jup-ag/api@6.0.44': + resolution: {integrity: sha512-C6oYi+wvNi07VlmWhT8+ZDMqTJuF+MiHuNBE65cYuBH6C4l0JfwpXaj6mKazAdVqVFWgngr3s2+0tdF5nDH4tA==} '@metaplex-foundation/umi-bundle-defaults@0.9.2': resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} @@ -304,52 +305,33 @@ packages: peerDependencies: '@solana/web3.js': ^1.95.3 - '@solana/spl-token@0.3.11': - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - '@solana/spl-token@0.4.13': resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.95.5 - '@solana/web3.js@1.95.8': - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} - '@solana/web3.js@1.98.2': resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} - '@solworks/soltoolkit-sdk@0.0.23': - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} - - '@soncodi/signal@2.0.7': - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@switchboard-xyz/common@2.5.19': - resolution: {integrity: sha512-Bzj1bu2U69YRh2OoNjkrafdREeB1KH+wmeFkBsASDjlhy/xXjey2Ry2HUTAIzdg2DMtfP6DoCW2Nn9ZQD5IO+Q==} - engines: {node: '>=12'} + '@switchboard-xyz/common@3.4.1': + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + engines: {node: '>=20'} - '@switchboard-xyz/common@3.0.12': - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} + '@switchboard-xyz/common@4.1.1': + resolution: {integrity: sha512-H5esycuUKAzS1SGqV6DZuBME7ZaGLHJc1jP7tgLGjZ2rZSoCRPthPLvHnQAAV3A18uomTyM8aSARyYYEAZnsFA==} engines: {node: '>=20'} - '@switchboard-xyz/on-demand@1.2.51': - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + '@switchboard-xyz/on-demand@2.16.3': + resolution: {integrity: sha512-y9NRl+cupDgqpCI/XB8BJRcMLlJJJdPqw6OuFUX43DCuZ225IHXpCM+lm1X1rCbNClTZMmHbb9hdjwkfTDsEUg==} engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x '@types/big.js@6.2.2': resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} - '@types/bn.js@5.2.0': - resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} - '@types/chai@4.3.20': resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} @@ -362,15 +344,9 @@ packages: '@types/mocha@9.1.1': resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.119': - resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} - '@types/node@20.19.8': resolution: {integrity: sha512-HzbgCY53T6bfu4tT7Aq3TvViJyHjLjPNaAS3HOuMc9pw97KHsUtXNX4L+wu59g1WnjsZSko35MbEqnO58rihhw==} @@ -386,6 +362,9 @@ packages: '@ungap/promise-all-settled@1.1.2': resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + '@zod/core@0.11.6': + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + agentkeepalive@4.6.0: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} @@ -548,19 +527,12 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - cron-validator@1.4.0: - resolution: {integrity: sha512-wGcJ9FCy65iaU6egSH8b5dZYJF7GU/3Jh06wzaT9lsa5dbqExjljmu+0cJ8cpKn+vUyZa/EM4WAxeLR6SypJXw==} - cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} - crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - debug@4.3.3: resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -597,9 +569,6 @@ packages: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dotenv@16.6.1: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} @@ -796,6 +765,11 @@ packages: peerDependencies: ws: '*' + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + jayson@4.2.0: resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} engines: {node: '>=8'} @@ -819,9 +793,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -832,9 +803,6 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -880,9 +848,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -960,9 +925,6 @@ packages: serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -1042,19 +1004,11 @@ packages: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -1140,58 +1094,58 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + snapshots: '@babel/runtime@7.27.6': {} - '@brokerloop/ttlcache@3.2.3': - dependencies: - '@soncodi/signal': 2.0.7 - - '@coral-xyz/anchor-errors@0.30.1': {} + '@coral-xyz/anchor-errors@0.31.1': {} - '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@coral-xyz/anchor@0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@coral-xyz/anchor-errors': 0.31.1 + '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@noble/hashes': 1.8.0 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) bn.js: 5.2.2 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 cross-fetch: 3.2.0 - crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 - snake-case: 3.0.4 superstruct: 0.15.5 toml: 3.0.0 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) bn.js: 5.2.2 buffer-layout: 1.2.2 - '@jup-ag/api@6.0.24': {} + '@isaacs/ttlcache@1.4.1': {} + + '@jup-ag/api@6.0.44': {} - '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - encoding @@ -1199,12 +1153,12 @@ snapshots: dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@noble/curves': 1.9.4 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: @@ -1227,11 +1181,11 @@ snapshots: dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: @@ -1255,22 +1209,22 @@ snapshots: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) buffer: 6.0.3 '@metaplex-foundation/umi@0.9.2': @@ -1308,26 +1262,22 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) bigint-buffer: 1.1.5 bignumber.js: 9.3.1 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)': - dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - '@solana/codecs-core@2.0.0-rc.1(typescript@5.8.3)': dependencies: '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) @@ -1338,13 +1288,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.3) typescript: 5.8.3 - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) @@ -1352,12 +1295,6 @@ snapshots: '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) typescript: 5.8.3 - '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) @@ -1370,14 +1307,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.3) typescript: 5.8.3 - '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.9.5 - '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) @@ -1386,17 +1315,6 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.8.3 - '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) @@ -1408,12 +1326,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/errors@2.0.0-rc.1(typescript@4.9.5)': - dependencies: - chalk: 5.4.1 - commander: 12.1.0 - typescript: 4.9.5 - '@solana/errors@2.0.0-rc.1(typescript@5.8.3)': dependencies: chalk: 5.4.1 @@ -1426,17 +1338,6 @@ snapshots: commander: 14.0.0 typescript: 5.8.3 - '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) @@ -1448,51 +1349,29 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - - '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': - dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - - '@solana/spl-token@0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - buffer: 6.0.3 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - - bufferutil - - encoding - fastestsmallesttextencoderdecoder - typescript - - utf-8-validate - '@solana/spl-token@0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@solana/spl-token@0.4.13(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -1501,28 +1380,6 @@ snapshots: - typescript - utf-8-validate - '@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': - dependencies: - '@babel/runtime': 7.27.6 - '@noble/curves': 1.9.4 - '@noble/hashes': 1.8.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.6.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.2 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - node-fetch: 2.7.0 - rpc-websockets: 9.1.1 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.27.6 @@ -1546,49 +1403,31 @@ snapshots: - typescript - utf-8-validate - '@solworks/soltoolkit-sdk@0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@types/bn.js': 5.2.0 - '@types/node': 18.19.119 - '@types/node-fetch': 2.6.12 - bn.js: 5.2.2 - decimal.js: 10.6.0 - typescript: 4.9.5 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - utf-8-validate - - '@soncodi/signal@2.0.7': {} - '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 - '@switchboard-xyz/common@2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@switchboard-xyz/common@3.4.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) axios: 1.10.0 big.js: 6.2.2 bn.js: 5.2.2 bs58: 6.0.0 - cron-validator: 1.4.0 + buffer: 6.0.3 decimal.js: 10.6.0 js-sha256: 0.11.1 - lodash: 4.17.21 protobufjs: 7.5.3 yaml: 2.8.0 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - '@switchboard-xyz/common@3.0.12(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@switchboard-xyz/common@4.1.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) axios: 1.10.0 @@ -1600,6 +1439,7 @@ snapshots: js-sha256: 0.11.1 protobufjs: 7.5.3 yaml: 2.8.0 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug @@ -1607,31 +1447,26 @@ snapshots: - typescript - utf-8-validate - '@switchboard-xyz/on-demand@1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + '@switchboard-xyz/on-demand@2.16.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)' - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@solworks/soltoolkit-sdk': 0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) - '@switchboard-xyz/common': 2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@coral-xyz/anchor-31': '@coral-xyz/anchor@0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)' + '@isaacs/ttlcache': 1.4.1 + '@switchboard-xyz/common': 4.1.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) axios: 1.10.0 - big.js: 6.2.2 - bs58: 5.0.0 + bs58: 6.0.0 + buffer: 6.0.3 + isomorphic-ws: 5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) js-yaml: 4.1.0 - protobufjs: 7.5.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate '@types/big.js@6.2.2': {} - '@types/bn.js@5.2.0': - dependencies: - '@types/node': 20.19.8 - '@types/chai@4.3.20': {} '@types/connect@3.4.38': @@ -1643,17 +1478,8 @@ snapshots: '@types/mocha@9.1.1': {} - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 20.19.8 - form-data: 4.0.4 - '@types/node@12.20.55': {} - '@types/node@18.19.119': - dependencies: - undici-types: 5.26.5 - '@types/node@20.19.8': dependencies: undici-types: 6.21.0 @@ -1670,6 +1496,8 @@ snapshots: '@ungap/promise-all-settled@1.1.2': {} + '@zod/core@0.11.6': {} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 @@ -1838,8 +1666,6 @@ snapshots: concat-map@0.0.1: {} - cron-validator@1.4.0: {} - cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 @@ -1852,8 +1678,6 @@ snapshots: transitivePeerDependencies: - encoding - crypto-hash@1.3.0: {} - debug@4.3.3(supports-color@8.1.1): dependencies: ms: 2.1.2 @@ -1876,11 +1700,6 @@ snapshots: diff@5.0.0: {} - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - dotenv@16.6.1: {} dunder-proto@1.0.1: @@ -2046,6 +1865,10 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 @@ -2081,8 +1904,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash@4.17.21: {} - log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -2094,10 +1915,6 @@ snapshots: dependencies: get-func-name: 2.0.2 - lower-case@2.0.2: - dependencies: - tslib: 2.8.1 - make-error@1.3.6: {} math-intrinsics@1.1.0: {} @@ -2155,11 +1972,6 @@ snapshots: nanoid@3.3.1: {} - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.8.1 - node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 @@ -2246,11 +2058,6 @@ snapshots: dependencies: randombytes: 2.1.0 - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -2331,12 +2138,8 @@ snapshots: type-detect@4.1.0: {} - typescript@4.9.5: {} - typescript@5.8.3: {} - undici-types@5.26.5: {} - undici-types@6.21.0: {} utf-8-validate@5.0.10: @@ -2403,3 +2206,7 @@ snapshots: yn@2.0.0: {} yocto-queue@0.1.0: {} + + zod@4.0.0-beta.20250505T195954: + dependencies: + '@zod/core': 0.11.6 diff --git a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts index 9a1b2a4c..fecebf5b 100644 --- a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts @@ -68,6 +68,7 @@ export class ClientTransactionsManager extends TransactionsManager x.getTransactionSize(umi)) ); - txs[0] = txs[0].prepend(getTipInstruction(userSigner, 250_000)); + txs[0] = prependTx(txs[0], [getTipInstruction(userSigner, 250_000)]); const latestBlockhash = ( await retryWithExponentialBackoff( diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index 8694642c..f6899578 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -209,6 +209,31 @@ export async function getAddressLookupInputs( }, new Array()); } +export function prependTx( + tx: TransactionBuilder, + txsToAdd: (TransactionBuilder | WrappedInstruction)[] +) { + const instructions = tx.getInstructions(); + const keccakIdx = instructions.findIndex( + (x) => + x.programId.toString() === "KeccakSecp256k11111111111111111111111111111" + ); + if (keccakIdx !== -1) { + const [beforeKeccak, afterKeccak] = tx.splitByIndex(keccakIdx + 1); + let finalTx = transactionBuilder().add(beforeKeccak); + for (const txToAdd of txsToAdd) { + finalTx = finalTx.append(txToAdd); + } + return finalTx.add(afterKeccak); + } else { + let finalTx = tx; + for (const txToAdd of txsToAdd) { + finalTx = finalTx.prepend(txToAdd); + } + return finalTx; + } +} + export function addTxOptimizations( umi: Umi, tx: TransactionBuilder, @@ -227,11 +252,11 @@ export function addTxOptimizations( const withCuPrice = tx.prepend(computePriceIx); const withCuLimit = tx.prepend(computeLimitIx); if (allOptimizations.fitsInOneTransaction(umi)) { - return allOptimizations; + return prependTx(tx, [computePriceIx, computeLimitIx]); } else if (withCuPrice.fitsInOneTransaction(umi)) { - return withCuPrice; + return prependTx(tx, [computePriceIx]); } else if (withCuLimit.fitsInOneTransaction(umi)) { - return withCuLimit; + return prependTx(tx, [computeLimitIx]); } else { return tx; } diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index 7f635d6f..7f76dd79 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -13,12 +13,13 @@ import switchboardIdl from "../idls/switchboard.json"; import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; import { TransactionItemInputs } from "../types"; import { + consoleLog, currentUnixSeconds, retryWithExponentialBackoff, } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; -export function getPullFeed( +export async function getPullFeed( conn: Connection, mint: PublicKey, wallet?: PublicKey @@ -37,11 +38,15 @@ export function getPullFeed( dummyWallet, AnchorProvider.defaultOptions() ); - const program = new Program(switchboardIdl as Idl, provider); - const { PullFeed } = OnDemand; + consoleLog("Pulling SWB program..."); + const { PullFeed, ON_DEMAND_MAINNET_PID } = OnDemand; + const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); + + consoleLog("Pulled SWB program!"); + consoleLog("Feed id:", SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId); return new PullFeed( - program, + sbProgram, new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) ); } @@ -51,10 +56,14 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); - const [pullIx, responses] = await retryWithExponentialBackoff( + const feed = await getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); + + const gateway = await feed.fetchGatewayUrl(); + consoleLog("Fetching crank IX..."); + const [pullIxs, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ + gateway, chain: "solana", network: "mainnet-beta", }); @@ -67,11 +76,13 @@ export async function buildSwbSubmitResponseTx( 200 ); - if (!pullIx) { + if (!pullIxs || !pullIxs.length) { throw new Error("Unable to fetch SWB crank IX"); } + consoleLog("Setting price locally..."); const price = (responses[0].value as Big).toNumber(); + consoleLog(price); PRICES[mint.toString()] = { realtimePrice: price, confInterval: 0, @@ -80,11 +91,15 @@ export async function buildSwbSubmitResponseTx( time: currentUnixSeconds(), }; + consoleLog("Returning SWB transaction data..."); return { - tx: transactionBuilder([getWrappedInstruction(signer, pullIx!)]), + tx: transactionBuilder( + pullIxs.map((x) => getWrappedInstruction(signer, x)) + ), lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), + orderPrio: -1, }; } @@ -103,7 +118,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = getPullFeed(conn, mint); + const feed = await getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = From f294abb15695859f8641db7f7394d5f94fa4de58 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Sat, 4 Oct 2025 16:44:21 +0700 Subject: [PATCH 77/83] small fixes --- solauto-sdk/package.json | 4 +- solauto-sdk/pnpm-lock.yaml | 17 +- solauto-sdk/src/idls/switchboard.json | 1949 --------------------- solauto-sdk/src/utils/switchboardUtils.ts | 34 +- 4 files changed, 37 insertions(+), 1967 deletions(-) delete mode 100644 solauto-sdk/src/idls/switchboard.json diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 484905a4..0cbd7549 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.804", + "version": "1.0.806", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -21,7 +21,7 @@ "@solana/spl-token": "^0.4.0", "@solana/web3.js": "=1.98.2", "@switchboard-xyz/common": "=3.4.1", - "@switchboard-xyz/on-demand": "=2.16.3", + "@switchboard-xyz/on-demand": "=2.17.4", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 4525f1dc..55b8462e 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -36,8 +36,8 @@ importers: specifier: '=3.4.1' version: 3.4.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@switchboard-xyz/on-demand': - specifier: '=2.16.3' - version: 2.16.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + specifier: '=2.17.4' + version: 2.17.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) axios: specifier: ^1.7.8 version: 1.10.0 @@ -325,8 +325,8 @@ packages: resolution: {integrity: sha512-H5esycuUKAzS1SGqV6DZuBME7ZaGLHJc1jP7tgLGjZ2rZSoCRPthPLvHnQAAV3A18uomTyM8aSARyYYEAZnsFA==} engines: {node: '>=20'} - '@switchboard-xyz/on-demand@2.16.3': - resolution: {integrity: sha512-y9NRl+cupDgqpCI/XB8BJRcMLlJJJdPqw6OuFUX43DCuZ225IHXpCM+lm1X1rCbNClTZMmHbb9hdjwkfTDsEUg==} + '@switchboard-xyz/on-demand@2.17.4': + resolution: {integrity: sha512-jZtnjcI58Leet2GCABoK0+snfi3Sg4Kn997MnsE0aMQFWCQ/zsy2oI81x7Nk+kvM+3Q5OEAG7JpAsN00BMlgQw==} engines: {node: '>= 18'} '@types/big.js@6.2.2': @@ -616,6 +616,10 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -1447,7 +1451,7 @@ snapshots: - typescript - utf-8-validate - '@switchboard-xyz/on-demand@2.16.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@switchboard-xyz/on-demand@2.17.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor-31': '@coral-xyz/anchor@0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)' '@isaacs/ttlcache': 1.4.1 @@ -1455,6 +1459,7 @@ snapshots: axios: 1.10.0 bs58: 6.0.0 buffer: 6.0.3 + events: 3.3.0 isomorphic-ws: 5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) js-yaml: 4.1.0 ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -1739,6 +1744,8 @@ snapshots: eventemitter3@5.0.1: {} + events@3.3.0: {} + eyes@0.1.8: {} fast-stable-stringify@1.0.0: {} diff --git a/solauto-sdk/src/idls/switchboard.json b/solauto-sdk/src/idls/switchboard.json deleted file mode 100644 index 6996121a..00000000 --- a/solauto-sdk/src/idls/switchboard.json +++ /dev/null @@ -1,1949 +0,0 @@ -{ - "address": "SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv", - "metadata": { - "name": "sb_on_demand", - "version": "0.1.0", - "spec": "0.1.0", - "description": "Created with Anchor" - }, - "instructions": [ - { - "name": "guardian_quote_verify", - "discriminator": [168, 36, 93, 156, 157, 150, 148, 45], - "accounts": [ - { "name": "guardian", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true, "relations": ["oracle"] }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianQuoteVerifyParams" } } - } - ] - }, - { - "name": "guardian_register", - "discriminator": [159, 76, 53, 117, 219, 29, 116, 135], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianRegisterParams" } } - } - ] - }, - { - "name": "guardian_unregister", - "discriminator": [215, 19, 61, 120, 155, 224, 120, 60], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianUnregisterParams" } } - } - ] - }, - { - "name": "oracle_heartbeat", - "discriminator": [10, 175, 217, 130, 111, 35, 117, 54], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "oracle_signer", "signer": true }, - { - "name": "queue", - "writable": true, - "relations": ["oracle", "gc_node"] - }, - { "name": "gc_node", "writable": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "queue_escrow", "writable": true }, - { - "name": "stake_program", - "address": "SBSTk6t52R89MmCdD739Rdd97HdbTQUFHe41vCX7pTt", - "relations": ["program_state"] - }, - { "name": "delegation_pool", "writable": true }, - { "name": "delegation_group", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleHeartbeatParams" } } - } - ] - }, - { - "name": "oracle_init", - "discriminator": [21, 158, 66, 65, 60, 221, 148, 61], - "accounts": [ - { "name": "oracle", "writable": true, "signer": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool", "relations": ["program_state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleInitParams" } } - } - ] - }, - { - "name": "oracle_set_configs", - "discriminator": [129, 111, 223, 4, 191, 188, 70, 180], - "accounts": [ - { "name": "oracle" }, - { "name": "authority", "signer": true, "relations": ["oracle"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleSetConfigsParams" } } - } - ] - }, - { - "name": "oracle_update_delegation", - "discriminator": [46, 198, 113, 223, 160, 189, 118, 90], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "queue", "relations": ["oracle"] }, - { "name": "authority", "signer": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "delegation_pool", "writable": true }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "switch_mint" }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "wsol_vault", "writable": true }, - { "name": "switch_vault", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" }, - { "name": "delegation_group" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleUpdateDelegationParams" } } - } - ] - }, - { - "name": "permission_set", - "discriminator": [211, 122, 185, 120, 129, 182, 55, 103], - "accounts": [ - { "name": "authority", "signer": true }, - { "name": "granter" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PermissionSetParams" } } - } - ] - }, - { - "name": "pull_feed_close", - "discriminator": [19, 134, 50, 142, 177, 215, 196, 83], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "reward_escrow", "writable": true }, - { "name": "lut", "writable": true }, - { "name": "lut_signer" }, - { "name": "payer", "writable": true, "signer": true }, - { "name": "state" }, - { - "name": "authority", - "writable": true, - "signer": true, - "relations": ["pull_feed"] - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedCloseParams" } } - } - ] - }, - { - "name": "pull_feed_init", - "discriminator": [198, 130, 53, 198, 235, 61, 143, 40], - "accounts": [ - { "name": "pull_feed", "writable": true, "signer": true }, - { "name": "queue" }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "pull_feed" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedInitParams" } } - } - ] - }, - { - "name": "pull_feed_set_configs", - "discriminator": [217, 45, 11, 246, 64, 26, 82, 168], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "authority", "signer": true, "relations": ["pull_feed"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSetConfigsParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response", - "discriminator": [150, 22, 215, 166, 143, 93, 48, 137], - "accounts": [ - { "name": "feed", "writable": true }, - { "name": "queue", "relations": ["feed"] }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response_many", - "discriminator": [47, 156, 45, 25, 200, 71, 37, 215], - "accounts": [ - { "name": "queue" }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseManyParams" } } - } - ] - }, - { - "name": "queue_add_mr_enclave", - "discriminator": [199, 255, 81, 50, 60, 133, 171, 138], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAddMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_allow_subsidies", - "discriminator": [94, 203, 82, 157, 188, 138, 202, 108], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "state", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAllowSubsidiesParams" } } - } - ] - }, - { - "name": "queue_garbage_collect", - "discriminator": [187, 208, 104, 247, 16, 91, 96, 98], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueGarbageCollectParams" } } - } - ] - }, - { - "name": "queue_init", - "discriminator": [144, 18, 99, 145, 133, 27, 207, 13], - "accounts": [ - { "name": "queue", "writable": true, "signer": true }, - { - "name": "queue_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "queue" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "native_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer", "writable": true }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitParams" } } - } - ] - }, - { - "name": "queue_init_delegation_group", - "discriminator": [239, 146, 75, 158, 20, 166, 159, 14], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "delegation_group", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitDelegationGroupParams" } } - } - ] - }, - { - "name": "queue_remove_mr_enclave", - "discriminator": [3, 64, 135, 33, 190, 133, 68, 252], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueRemoveMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_set_configs", - "discriminator": [54, 183, 243, 199, 49, 103, 142, 48], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueSetConfigsParams" } } - } - ] - }, - { - "name": "randomness_commit", - "discriminator": [52, 170, 152, 201, 179, 133, 242, 141], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "queue", "relations": ["randomness", "oracle"] }, - { "name": "oracle", "writable": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "authority", "signer": true, "relations": ["randomness"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessCommitParams" } } - } - ] - }, - { - "name": "randomness_init", - "discriminator": [9, 9, 204, 33, 50, 116, 113, 15], - "accounts": [ - { "name": "randomness", "writable": true, "signer": true }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "randomness" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority", "signer": true }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessInitParams" } } - } - ] - }, - { - "name": "randomness_reveal", - "discriminator": [197, 181, 187, 10, 30, 58, 20, 73], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "oracle", "relations": ["randomness"] }, - { "name": "queue", "relations": ["oracle"] }, - { - "name": "stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110, - 101, 115, 115, 83, 116, 97, 116, 115 - ] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "authority", "signer": true, "relations": ["randomness"] }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_escrow", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessRevealParams" } } - } - ] - }, - { - "name": "state_init", - "discriminator": [103, 241, 106, 190, 217, 153, 87, 105], - "accounts": [ - { - "name": "state", - "writable": true, - "pda": { - "seeds": [{ "kind": "const", "value": [83, 84, 65, 84, 69] }] - } - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateInitParams" } } - } - ] - }, - { - "name": "state_set_configs", - "discriminator": [40, 98, 76, 37, 206, 9, 47, 144], - "accounts": [ - { "name": "state", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateSetConfigsParams" } } - } - ] - } - ], - "accounts": [ - { - "name": "OracleAccountData", - "discriminator": [128, 30, 16, 241, 170, 73, 55, 54] - }, - { - "name": "OracleStatsAccountData", - "discriminator": [180, 157, 178, 234, 240, 27, 152, 179] - }, - { - "name": "PullFeedAccountData", - "discriminator": [196, 27, 108, 196, 10, 215, 219, 40] - }, - { - "name": "QueueAccountData", - "discriminator": [217, 194, 55, 127, 184, 83, 138, 1] - }, - { - "name": "RandomnessAccountData", - "discriminator": [10, 66, 229, 135, 220, 239, 217, 114] - }, - { "name": "State", "discriminator": [216, 146, 107, 94, 104, 75, 182, 177] } - ], - "events": [ - { - "name": "CostWhitelistEvent", - "discriminator": [56, 107, 191, 127, 116, 6, 138, 149] - }, - { - "name": "GarbageCollectionEvent", - "discriminator": [232, 235, 2, 188, 8, 143, 145, 237] - }, - { - "name": "GuardianQuoteVerifyEvent", - "discriminator": [31, 37, 39, 6, 214, 186, 33, 115] - }, - { - "name": "OracleHeartbeatEvent", - "discriminator": [52, 29, 166, 2, 94, 7, 188, 13] - }, - { - "name": "OracleInitEvent", - "discriminator": [89, 193, 219, 200, 1, 83, 167, 24] - }, - { - "name": "OracleQuoteOverrideEvent", - "discriminator": [78, 204, 191, 210, 164, 196, 244, 65] - }, - { - "name": "OracleQuoteRotateEvent", - "discriminator": [26, 189, 196, 192, 225, 127, 26, 228] - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "discriminator": [203, 209, 79, 0, 20, 71, 226, 202] - }, - { - "name": "PermissionSetEvent", - "discriminator": [148, 86, 123, 0, 102, 20, 119, 206] - }, - { - "name": "PullFeedErrorValueEvent", - "discriminator": [225, 80, 192, 95, 14, 12, 83, 192] - }, - { - "name": "PullFeedValueEvents", - "discriminator": [86, 7, 231, 28, 122, 161, 117, 69] - }, - { - "name": "QueueAddMrEnclaveEvent", - "discriminator": [170, 186, 175, 38, 216, 51, 69, 175] - }, - { - "name": "QueueInitEvent", - "discriminator": [44, 137, 99, 227, 107, 8, 30, 105] - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "discriminator": [4, 105, 196, 60, 84, 122, 203, 196] - }, - { - "name": "RandomnessCommitEvent", - "discriminator": [88, 60, 172, 90, 112, 10, 206, 147] - } - ], - "errors": [ - { "code": 6000, "name": "GenericError" }, - { "code": 6001, "name": "InvalidQuote" }, - { "code": 6002, "name": "InsufficientQueue" }, - { "code": 6003, "name": "QueueFull" }, - { "code": 6004, "name": "InvalidEnclaveSigner" }, - { "code": 6005, "name": "InvalidSigner" }, - { "code": 6006, "name": "MrEnclaveAlreadyExists" }, - { "code": 6007, "name": "MrEnclaveAtCapacity" }, - { "code": 6008, "name": "MrEnclaveDoesntExist" }, - { "code": 6009, "name": "PermissionDenied" }, - { "code": 6010, "name": "InvalidQueue" }, - { "code": 6011, "name": "IncorrectMrEnclave" }, - { "code": 6012, "name": "InvalidAuthority" }, - { "code": 6013, "name": "InvalidMrEnclave" }, - { "code": 6014, "name": "InvalidTimestamp" }, - { "code": 6015, "name": "InvalidOracleIdx" }, - { "code": 6016, "name": "InvalidSecpSignature" }, - { "code": 6017, "name": "InvalidGuardianQueue" }, - { "code": 6018, "name": "InvalidIndex" }, - { "code": 6019, "name": "InvalidOracleQueue" }, - { "code": 6020, "name": "InvalidPermission" }, - { "code": 6021, "name": "InvalidePermissionedAccount" }, - { "code": 6022, "name": "InvalidEpochRotate" }, - { "code": 6023, "name": "InvalidEpochFinalize" }, - { "code": 6024, "name": "InvalidEscrow" }, - { "code": 6025, "name": "IllegalOracle" }, - { "code": 6026, "name": "IllegalExecuteAttempt" }, - { "code": 6027, "name": "IllegalFeedValue" }, - { "code": 6028, "name": "InvalidOracleFeedStats" }, - { "code": 6029, "name": "InvalidStateAuthority" }, - { "code": 6030, "name": "NotEnoughSamples" }, - { "code": 6031, "name": "OracleIsVerified" }, - { "code": 6032, "name": "QueueIsEmpty" }, - { "code": 6033, "name": "SecpRecoverFailure" }, - { "code": 6034, "name": "StaleSample" }, - { "code": 6035, "name": "SwitchboardRandomnessTooOld" }, - { "code": 6036, "name": "EpochIdMismatch" }, - { "code": 6037, "name": "GuardianAlreadyVoted" }, - { "code": 6038, "name": "RandomnessNotRequested" }, - { "code": 6039, "name": "InvalidSlotNumber" }, - { "code": 6040, "name": "RandomnessOracleKeyExpired" }, - { "code": 6041, "name": "InvalidAdvisory" }, - { "code": 6042, "name": "InvalidOracleStats" }, - { "code": 6043, "name": "InvalidStakeProgram" }, - { "code": 6044, "name": "InvalidStakePool" }, - { "code": 6045, "name": "InvalidDelegationPool" }, - { "code": 6046, "name": "UnparsableAccount" }, - { "code": 6047, "name": "InvalidInstruction" }, - { "code": 6048, "name": "OracleAlreadyVerified" }, - { "code": 6049, "name": "GuardianNotVerified" }, - { "code": 6050, "name": "InvalidConstraint" }, - { "code": 6051, "name": "InvalidDelegationGroup" }, - { "code": 6052, "name": "OracleKeyNotFound" }, - { "code": 6053, "name": "GuardianReregisterAttempt" } - ], - "types": [ - { - "name": "CompactResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "f32" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "f32" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - } - ] - } - }, - { - "name": "CostWhitelistEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "CurrentResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "docs": [ - "The median value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "range", - "docs": ["The range of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "min_value", - "docs": [ - "The minimum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "max_value", - "docs": [ - "The maximum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "num_samples", - "docs": ["The number of samples used to calculate this result"], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { - "name": "min_slot", - "docs": [ - "The slot at which the first considered submission was made" - ], - "type": "u64" - }, - { - "name": "max_slot", - "docs": [ - "The slot at which the last considered submission was made" - ], - "type": "u64" - } - ] - } - }, - { - "name": "GarbageCollectionEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "timestamp", "type": "i64" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } }, - { "name": "_reserved1", "type": "u32" }, - { "name": "ed25519_key", "type": "pubkey" }, - { "name": "secp256k1_key", "type": { "array": ["u8", 64] } }, - { "name": "slot", "type": "u64" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "advisories", "type": { "vec": "u32" } } - ] - } - }, - { - "name": "GuardianRegisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "GuardianUnregisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "MegaSlotInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "perf_goal", "type": "i64" }, - { "name": "current_signature_count", "type": "i64" } - ] - } - }, - { - "name": "MultiSubmission", - "type": { - "kind": "struct", - "fields": [ - { "name": "values", "type": { "vec": "i128" } }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" } - ] - } - }, - { - "name": "OracleAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave", - "docs": ["Represents the state of the quote verifiers enclave."], - "type": { "defined": { "name": "Quote" } } - }, - { - "name": "authority", - "docs": [ - "The authority of the EnclaveAccount which is permitted to make account changes." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "Queue used for attestation to verify a MRENCLAVE measurement." - ], - "type": "pubkey" - }, - { - "name": "created_at", - "docs": ["The unix timestamp when the quote was created."], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": ["The last time the quote heartbeated on-chain."], - "type": "i64" - }, - { "name": "secp_authority", "type": { "array": ["u8", 64] } }, - { - "name": "gateway_uri", - "docs": ["URI location of the verifier's gateway."], - "type": { "array": ["u8", 64] } - }, - { "name": "permissions", "type": "u64" }, - { - "name": "is_on_queue", - "docs": [ - "Whether the quote is located on the AttestationQueues buffer." - ], - "type": "u8" - }, - { "name": "_padding1", "type": { "array": ["u8", 7] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "last_reward_epoch", "type": "u64" }, - { "name": "_ebuf4", "type": { "array": ["u8", 16] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 1024] } } - ] - } - }, - { - "name": "OracleEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "slash_score", "type": "u64" }, - { "name": "reward_score", "type": "u64" }, - { "name": "stake_score", "type": "u64" } - ] - } - }, - { - "name": "OracleHeartbeatEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleHeartbeatParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "gateway_uri", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "recent_slot", "type": "u64" }, - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { - "name": "secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleQuoteOverrideEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleQuoteRotateEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "OracleSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": { "option": "pubkey" } }, - { - "name": "new_secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleStatsAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "owner", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { - "name": "finalized_epoch", - "docs": [ - "The last epoch that has completed. cleared after registered with the", - "staking program." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "current_epoch", - "docs": [ - "The current epoch info being used by the oracle. for stake. Will moved", - "to finalized_epoch as soon as the epoch is over." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "mega_slot_info", - "type": { "defined": { "name": "MegaSlotInfo" } } - }, - { "name": "last_transfer_slot", "type": "u64" }, - { "name": "bump", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "_ebuf", - "docs": ["Reserved."], - "type": { "array": ["u8", 1024] } - } - ] - } - }, - { - "name": "OracleSubmission", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "oracle", - "docs": ["The public key of the oracle that submitted this value."], - "type": "pubkey" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { "name": "padding1", "type": { "array": ["u8", 8] } }, - { - "name": "value", - "docs": ["The value that was submitted."], - "type": "i128" - } - ] - } - }, - { - "name": "OracleUpdateDelegationParams", - "type": { - "kind": "struct", - "fields": [{ "name": "_reserved1", "type": "u64" }] - } - }, - { - "name": "PermissionSetEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "permission", "type": "pubkey" }] - } - }, - { - "name": "PermissionSetParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "permission", "type": "u8" }, - { "name": "enable", "type": "bool" } - ] - } - }, - { - "name": "PullFeedAccountData", - "docs": ["A representation of the data in a pull feed account."], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "submissions", - "docs": ["The oracle submissions for this feed."], - "type": { - "array": [{ "defined": { "name": "OracleSubmission" } }, 32] - } - }, - { - "name": "authority", - "docs": [ - "The public key of the authority that can update the feed hash that", - "this account will use for registering updates." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "The public key of the queue which oracles must be bound to in order to", - "submit data to this feed." - ], - "type": "pubkey" - }, - { - "name": "feed_hash", - "docs": [ - "SHA-256 hash of the job schema oracles will execute to produce data", - "for this feed." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "initialized_at", - "docs": ["The slot at which this account was initialized."], - "type": "i64" - }, - { "name": "permissions", "type": "u64" }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "padding1", "type": { "array": ["u8", 2] } }, - { "name": "historical_result_idx", "type": "u8" }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "last_update_timestamp", "type": "i64" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_reserved1", "type": { "array": ["u8", 32] } }, - { - "name": "result", - "type": { "defined": { "name": "CurrentResult" } } - }, - { "name": "max_staleness", "type": "u32" }, - { "name": "padding2", "type": { "array": ["u8", 12] } }, - { - "name": "historical_results", - "type": { - "array": [{ "defined": { "name": "CompactResult" } }, 32] - } - }, - { "name": "_ebuf4", "type": { "array": ["u8", 8] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } } - ] - } - }, - { - "name": "PullFeedCloseParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "PullFeedErrorValueEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "PullFeedInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed_hash", "type": { "array": ["u8", 32] } }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "recent_slot", "type": "u64" }, - { "name": "ipfs_hash", "type": { "array": ["u8", 32] } }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "max_staleness", "type": "u32" } - ] - } - }, - { - "name": "PullFeedSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "feed_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "max_variance", "type": { "option": "u64" } }, - { "name": "min_responses", "type": { "option": "u32" } }, - { "name": "name", "type": { "option": { "array": ["u8", 32] } } }, - { - "name": "ipfs_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "min_sample_size", "type": { "option": "u8" } }, - { "name": "max_staleness", "type": { "option": "u32" } } - ] - } - }, - { - "name": "PullFeedSubmitResponseManyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "MultiSubmission" } } } - } - ] - } - }, - { - "name": "PullFeedSubmitResponseParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "Submission" } } } - } - ] - } - }, - { - "name": "PullFeedValueEvents", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "oracles", "type": { "vec": "pubkey" } }, - { "name": "values", "type": { "vec": { "vec": "i128" } } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "QueueAccountData", - "docs": [ - "An Queue represents a round-robin queue of oracle oracles who attest on-chain", - "whether a Switchboard Function was executed within an enclave against an expected set of", - "enclave measurements.", - "", - "For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and", - "wait for an existing oracle to attest their quote. If the oracle's quote matches an expected", - "measurement within the queues mr_enclaves config, it is granted permissions and will start", - "being assigned update requests." - ], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "docs": [ - "The address of the authority which is permitted to add/remove allowed enclave measurements." - ], - "type": "pubkey" - }, - { - "name": "mr_enclaves", - "docs": ["Allowed enclave measurements."], - "type": { "array": [{ "array": ["u8", 32] }, 32] } - }, - { - "name": "oracle_keys", - "docs": [ - "The addresses of the quote oracles who have a valid", - "verification status and have heartbeated on-chain recently." - ], - "type": { "array": ["pubkey", 128] } - }, - { - "name": "max_quote_verification_age", - "docs": [ - "The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain." - ], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": [ - "The unix timestamp when the last quote oracle heartbeated on-chain." - ], - "type": "i64" - }, - { "name": "node_timeout", "type": "i64" }, - { - "name": "oracle_min_stake", - "docs": [ - "The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes." - ], - "type": "u64" - }, - { "name": "allow_authority_override_after", "type": "i64" }, - { - "name": "mr_enclaves_len", - "docs": ["The number of allowed enclave measurements."], - "type": "u32" - }, - { - "name": "oracle_keys_len", - "docs": [ - "The length of valid quote oracles for the given attestation queue." - ], - "type": "u32" - }, - { - "name": "reward", - "docs": [ - "The reward paid to quote oracles for attesting on-chain." - ], - "type": "u32" - }, - { - "name": "curr_idx", - "docs": [ - "Incrementer used to track the current quote oracle permitted to run any available functions." - ], - "type": "u32" - }, - { - "name": "gc_idx", - "docs": [ - "Incrementer used to garbage collect and remove stale quote oracles." - ], - "type": "u32" - }, - { "name": "require_authority_heartbeat_permission", "type": "u8" }, - { "name": "require_authority_verify_permission", "type": "u8" }, - { "name": "require_usage_permissions", "type": "u8" }, - { "name": "signer_bump", "type": "u8" }, - { "name": "mint", "type": "pubkey" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "allow_subsidies", "type": "u8" }, - { - "name": "_ebuf6", - "docs": ["Reserved."], - "type": { "array": ["u8", 23] } - }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueAllowSubsidiesParams", - "type": { - "kind": "struct", - "fields": [{ "name": "allow_subsidies", "type": "u8" }] - } - }, - { - "name": "QueueGarbageCollectParams", - "type": { "kind": "struct", "fields": [{ "name": "idx", "type": "u32" }] } - }, - { - "name": "QueueInitDelegationGroupParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "QueueInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "queue", "type": "pubkey" }] - } - }, - { - "name": "QueueInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "allow_authority_override_after", "type": "u32" }, - { "name": "require_authority_heartbeat_permission", "type": "bool" }, - { "name": "require_usage_permissions", "type": "bool" }, - { "name": "max_quote_verification_age", "type": "u32" }, - { "name": "reward", "type": "u32" }, - { "name": "node_timeout", "type": "u32" }, - { "name": "recent_slot", "type": "u64" } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "reward", "type": { "option": "u32" } }, - { "name": "node_timeout", "type": { "option": "i64" } } - ] - } - }, - { - "name": "Quote", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave_signer", - "docs": ["The address of the signer generated within an enclave."], - "type": "pubkey" - }, - { - "name": "mr_enclave", - "docs": [ - "The quotes MRENCLAVE measurement dictating the contents of the secure enclave." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "verification_status", - "docs": ["The VerificationStatus of the quote."], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "verification_timestamp", - "docs": ["The unix timestamp when the quote was last verified."], - "type": "i64" - }, - { - "name": "valid_until", - "docs": [ - "The unix timestamp when the quotes verification status expires." - ], - "type": "i64" - }, - { - "name": "quote_registry", - "docs": [ - "The off-chain registry where the verifiers quote can be located." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "registry_key", - "docs": [ - "Key to lookup the buffer data on IPFS or an alternative decentralized storage solution." - ], - "type": { "array": ["u8", 64] } - }, - { - "name": "secp256k1_signer", - "docs": [ - "The secp256k1 public key of the enclave signer. Derived from the enclave_signer." - ], - "type": { "array": ["u8", 64] } - }, - { "name": "last_ed25519_signer", "type": "pubkey" }, - { "name": "last_secp256k1_signer", "type": { "array": ["u8", 64] } }, - { "name": "last_rotate_slot", "type": "u64" }, - { "name": "guardian_approvers", "type": { "array": ["pubkey", 64] } }, - { "name": "guardian_approvers_len", "type": "u8" }, - { "name": "padding2", "type": { "array": ["u8", 7] } }, - { "name": "staging_ed25519_signer", "type": "pubkey" }, - { - "name": "staging_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { - "name": "_ebuf4", - "docs": ["Reserved."], - "type": { "array": ["u8", 32] } - }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "RandomnessAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "seed_slothash", "type": { "array": ["u8", 32] } }, - { "name": "seed_slot", "type": "u64" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "reveal_slot", "type": "u64" }, - { "name": "value", "type": { "array": ["u8", 32] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 128] } }, - { - "name": "active_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { "name": "active_secp256k1_expiration", "type": "i64" } - ] - } - }, - { - "name": "RandomnessCommitEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "randomness_account", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "slot", "type": "u64" }, - { "name": "slothash", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "RandomnessCommitParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "RandomnessInitParams", - "type": { - "kind": "struct", - "fields": [{ "name": "recent_slot", "type": "u64" }] - } - }, - { - "name": "RandomnessRevealParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "value", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "State", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "bump", "type": "u8" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 5] } }, - { "name": "authority", "type": "pubkey" }, - { "name": "guardian_queue", "type": "pubkey" }, - { "name": "reserved1", "type": "u64" }, - { "name": "epoch_length", "type": "u64" }, - { - "name": "current_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "next_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "finalized_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "sgx_advisories", "type": { "array": ["u16", 32] } }, - { "name": "advisories_len", "type": "u8" }, - { "name": "padding2", "type": "u8" }, - { "name": "flat_reward_cut_percentage", "type": "u8" }, - { "name": "enable_slashing", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "base_reward", "type": "u32" }, - { "name": "_ebuf6", "type": { "array": ["u8", 28] } }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 512] } }, - { - "name": "cost_whitelist", - "docs": ["Cost whitelist by authority"], - "type": { "array": ["pubkey", 32] } - } - ] - } - }, - { - "name": "StateEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "_reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" } - ] - } - }, - { "name": "StateInitParams", "type": { "kind": "struct", "fields": [] } }, - { - "name": "StateSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": "pubkey" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "add_advisory", "type": "u16" }, - { "name": "rm_advisory", "type": "u16" }, - { "name": "epoch_length", "type": "u32" }, - { "name": "reset_epochs", "type": "bool" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "base_reward", "type": "u32" }, - { "name": "add_cost_wl", "type": "pubkey" }, - { "name": "rm_cost_wl", "type": "pubkey" } - ] - } - }, - { - "name": "Submission", - "type": { - "kind": "struct", - "fields": [ - { "name": "value", "type": "i128" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "offset", "type": "u8" } - ] - } - } - ] -} diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index 7f76dd79..1c5b04e9 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -9,7 +9,6 @@ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; -import switchboardIdl from "../idls/switchboard.json"; import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; import { TransactionItemInputs } from "../types"; import { @@ -18,6 +17,7 @@ import { retryWithExponentialBackoff, } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; +import { CrossbarClient } from "@switchboard-xyz/common"; export async function getPullFeed( conn: Connection, @@ -40,15 +40,22 @@ export async function getPullFeed( ); consoleLog("Pulling SWB program..."); - const { PullFeed, ON_DEMAND_MAINNET_PID } = OnDemand; + const { PullFeed, Queue, ON_DEMAND_MAINNET_PID } = OnDemand; const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); + const crossbar = new CrossbarClient("https://integrator-crossbar.mrgn.app/"); + const queue = await Queue.loadDefault(sbProgram); + const gateway = await queue.fetchGatewayFromCrossbar(crossbar as any); + consoleLog("Pulled SWB program!"); consoleLog("Feed id:", SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId); - return new PullFeed( - sbProgram, - new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) - ); + return { + gateway, + feed: new PullFeed( + sbProgram, + new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) + ), + }; } export async function buildSwbSubmitResponseTx( @@ -56,14 +63,19 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = await getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); + const { feed, gateway } = await getPullFeed( + conn, + mint, + toWeb3JsPublicKey(signer.publicKey) + ); + + // Try to replicate locally in the lambda docker container - const gateway = await feed.fetchGatewayUrl(); consoleLog("Fetching crank IX..."); const [pullIxs, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ - gateway, + gateway: gateway.endpoint(), chain: "solana", network: "mainnet-beta", }); @@ -99,7 +111,7 @@ export async function buildSwbSubmitResponseTx( lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), - orderPrio: -1, + orderPrio: -2, }; } @@ -118,7 +130,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = await getPullFeed(conn, mint); + const { feed } = await getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = From c59aae619b50bb87b0ee531653363f6b8779d7c9 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Tue, 28 Oct 2025 22:52:03 -0400 Subject: [PATCH 78/83] add cbbtc and reorganize swb code --- programs/solauto/src/constants.rs | 2 +- solauto-sdk/local/txSandbox.ts | 41 +++++++++------- solauto-sdk/package.json | 2 +- solauto-sdk/src/constants/marginfiAccounts.ts | 5 ++ solauto-sdk/src/constants/pythConstants.ts | 2 + solauto-sdk/src/constants/solautoConstants.ts | 2 + solauto-sdk/src/constants/tokenConstants.ts | 13 ++++- .../manager/clientTransactionsManager.ts | 43 +---------------- .../manager/transactionsManager.ts | 23 ++++++--- solauto-sdk/src/utils/stringUtils.ts | 2 +- solauto-sdk/src/utils/switchboardUtils.ts | 47 +++++++++++++++++-- 11 files changed, 110 insertions(+), 72 deletions(-) diff --git a/programs/solauto/src/constants.rs b/programs/solauto/src/constants.rs index 2e36b314..d8681b25 100644 --- a/programs/solauto/src/constants.rs +++ b/programs/solauto/src/constants.rs @@ -17,4 +17,4 @@ pub const MAX_BASIS_POINTS: u16 = 10000; pub const REFERRER_PERCENTAGE: f64 = 0.15; -pub const OFFSET_FROM_MAX_LTV: f64 = 0.005; +pub const OFFSET_FROM_MAX_LTV: f64 = 0.005; \ No newline at end of file diff --git a/solauto-sdk/local/txSandbox.ts b/solauto-sdk/local/txSandbox.ts index a4f7f4a0..dc50db7b 100644 --- a/solauto-sdk/local/txSandbox.ts +++ b/solauto-sdk/local/txSandbox.ts @@ -4,6 +4,7 @@ import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters"; import { ClientTransactionsManager, consoleLog, + fetchBank, getBatches, getClient, getPositionExBulk, @@ -15,6 +16,8 @@ import { PriorityFeeSetting, ProgramEnv, rebalance, + safeFetchBank, + safeFetchMarginfiAccount, SOLAUTO_PROD_PROGRAM, SOLAUTO_TEST_PROGRAM, SolautoClient, @@ -46,24 +49,30 @@ export async function main() { lpEnv, }); - await client.initializeExistingSolautoPosition({ - positionId: 1, - authority: new PublicKey("61rtn5tzVkesapo6Cz83SPoShUfAePSxJsqniuF2wRKC"), - // lpUserAccount: new PublicKey( - // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" - // ), - }); + // await client.initializeExistingSolautoPosition({ + // positionId: 1, + // authority: new PublicKey("61rtn5tzVkesapo6Cz83SPoShUfAePSxJsqniuF2wRKC"), + // // lpUserAccount: new PublicKey( + // // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" + // // ), + // }); - const transactionItems = [rebalance(client)]; + // const transactionItems = [rebalance(client)]; - const txManager = new ClientTransactionsManager({ - txHandler: client, - txRunType: payForTransaction ? "normal" : "only-simulate", - priorityFeeSetting: PriorityFeeSetting.Default, - retryConfig: { totalRetries: 2 }, - }); - const statuses = await txManager.send(transactionItems); - consoleLog(statuses); + const account = await fetchBank(umi, publicKey("Ac4KV5K5isDqtABtg6h5DiwzZMe3Sp9bc3pBiCUvUpaQ")); + console.log(account.config.oracleKeys[0]); + console.log(account.config.oracleKeys[1]); + console.log(account.config.oracleKeys[2]); + console.log(account.config.oracleKeys[3]); + + // const txManager = new ClientTransactionsManager({ + // txHandler: client, + // txRunType: payForTransaction ? "normal" : "only-simulate", + // priorityFeeSetting: PriorityFeeSetting.Default, + // retryConfig: { totalRetries: 2 }, + // }); + // const statuses = await txManager.send(transactionItems); + // consoleLog(statuses); } async function refreshAll() { diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 0cbd7549..adf56441 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.806", + "version": "1.0.814", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/constants/marginfiAccounts.ts b/solauto-sdk/src/constants/marginfiAccounts.ts index 06717825..62e68d65 100644 --- a/solauto-sdk/src/constants/marginfiAccounts.ts +++ b/solauto-sdk/src/constants/marginfiAccounts.ts @@ -142,6 +142,11 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiBankAccountsMap = { bank: "61Qx9kgWo9RVtPHf8Rku6gbaUtcnzgkpAuifQBUcMRVK", liquidityVault: "6FxnrCaJNHLyrFy6EPtqFjoUK5iRxDQbaVo1bA69nDhH", vaultAuthority: "6VL2QW6sy8cjxL24xHL7eFbnUSi35DMJd8AzRwssSs9y" + }, + [tokens.CBBTC]: { + bank: "Ac4KV5K5isDqtABtg6h5DiwzZMe3Sp9bc3pBiCUvUpaQ", + liquidityVault: "FvrJsHu7X9jkT9rTuR6Kfs6wSjPvjV6zhH4gVSiJ8LFT", + vaultAuthority: "jfBsYE2sAkNj1pwE6U1gQ515JU5vn9huZMDYVvZagb4", } }, ["DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"]: { diff --git a/solauto-sdk/src/constants/pythConstants.ts b/solauto-sdk/src/constants/pythConstants.ts index 41fb1c4c..a015b261 100644 --- a/solauto-sdk/src/constants/pythConstants.ts +++ b/solauto-sdk/src/constants/pythConstants.ts @@ -44,6 +44,8 @@ export const PYTH_PRICE_FEED_IDS = { "0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc", [tokens.PUMP]: "0x7a01fca212788bba7c5bf8c9efd576a8a722f070d2c17596ff7bb609b8d5c3b9", + [tokens.CBBTC]: + "0x2817d7bfe5c64b8ea956e9a26f573ef64e72e4d7891f2d6af9bcc93f7aff9a97", }; export const PYTH_ORACLE_ACCOUNTS = { diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index 9f6af971..e6995179 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -65,3 +65,5 @@ export const STANDARD_LUT_ACCOUNTS = [ SYSVAR_INSTRUCTIONS_PUBKEY, JUPITER_PROGRAM_ID, ].map((x) => x.toString()); + +export const UPDATE_ORACLE_TX_NAME = "update oracle"; diff --git a/solauto-sdk/src/constants/tokenConstants.ts b/solauto-sdk/src/constants/tokenConstants.ts index 855c10d6..4258da82 100644 --- a/solauto-sdk/src/constants/tokenConstants.ts +++ b/solauto-sdk/src/constants/tokenConstants.ts @@ -25,6 +25,7 @@ export const RETARDIO = "6ogzHhzdrQr9Pgv6hZ2MNze7UrzBMAFyBBWUYp1Fhitx"; export const BILLY = "3B5wuUrMEi5yATD7on46hKfej3pfmd7t1RKgrsN3pump"; export const HMTR = "7JhmUcZrrfhyt5nTSu3AfsrUq2L9992a7AhwdSDxdoL2"; export const PUMP = "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"; +export const CBBTC = "cbbtcf3aa214zXHbiAZQwf4122FBYbraNdFqgw4iMij"; export const ALL_SUPPORTED_TOKENS = [ NATIVE_MINT.toString(), @@ -51,6 +52,7 @@ export const ALL_SUPPORTED_TOKENS = [ BILLY, HMTR, PUMP, + CBBTC, ]; export interface TokenInfo { @@ -199,11 +201,18 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { ticker: "PUMP", name: "Pump.fun", decimals: 6, - } + }, + [CBBTC]: { + ticker: "CBBTC", + name: "Coinbase BTC", + decimals: 8, + isMajor: true, + }, }; export const MAJORS_PRIO = { [WBTC]: 0, + [CBBTC]: 0, [WETH]: 1, [NATIVE_MINT.toString()]: 2, -}; \ No newline at end of file +}; diff --git a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts index fecebf5b..11877860 100644 --- a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts @@ -5,6 +5,7 @@ import { import { SolautoClient } from "../../solauto"; import { TransactionsManager } from "./transactionsManager"; import { + addSwbOraclePullTxs, buildSwbSubmitResponseTx, getSwitchboardFeedData, isSwitchboardMint, @@ -34,46 +35,6 @@ export class ClientTransactionsManager extends TransactionsManager x.oracleInteractor) && switchboardMints.length) { - this.txHandler.log("Checking if oracle update(s) needed..."); - const staleOracles = - ( - await getSwitchboardFeedData( - this.txHandler.connection, - switchboardMints - ) - ).filter((x) => x.stale).length > 0; - - if (staleOracles) { - this.txHandler.log("Requires oracle update(s)..."); - const oracleTxs = switchboardMints.map( - (x) => - new TransactionItem( - async () => - await buildSwbSubmitResponseTx( - this.txHandler.connection, - this.txHandler.signer, - x - ), - this.updateOracleTxName - ) - ); - this.txHandler.log("Set crank IXs in TX"); - txs.unshift(...oracleTxs); - } - } - } - private async addChoreTxs( txs: TransactionItem[], updateLutTx?: TransactionBuilder @@ -131,7 +92,7 @@ export class ClientTransactionsManager extends TransactionsManager { protected retryDelay: number; protected abortController?: AbortController; - updateOracleTxName = "update oracle"; - constructor(args: TransactionsManagerArgs) { this.txHandler = args.txHandler; this.statusCallback = args.statusCallback; @@ -118,7 +117,9 @@ export class TransactionsManager { ); if (!transaction.fitsInOneTransaction(this.txHandler.umi)) { throw new TransactionTooLargeError( - `Exceeds max transaction size (${transaction.getTransactionSize(this.txHandler.umi)})` + `Exceeds max transaction size (${transaction.getTransactionSize( + this.txHandler.umi + )})` ); } else { let newSet = new TransactionSet(this.txHandler, this.lookupTables, [ @@ -166,7 +167,9 @@ export class TransactionsManager { } } consoleLog( - `${args.name} ${args.attemptNum} is ${args.status.toString().toLowerCase()}` + `${args.name} ${args.attemptNum} is ${args.status + .toString() + .toLowerCase()}` ); this.statusCallback?.([...this.statuses]); } @@ -180,7 +183,11 @@ export class TransactionsManager { (x) => !lutAccounts.includes(x) ); consoleLog( - `Program ${ix.programId}, data len: ${ix.data.length}, LUT accounts data: ${ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3}` + `Program ${ix.programId}, data len: ${ + ix.data.length + }, LUT accounts data: ${ + ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3 + }` ); if (accountsNotInLut.length > 0) { consoleLog(`${accountsNotInLut.length} accounts not in LUT:`); @@ -273,7 +280,7 @@ export class TransactionsManager { ); if ( newItemSetNames.length === 1 && - newItemSetNames[0] === this.updateOracleTxName + newItemSetNames[0] === UPDATE_ORACLE_TX_NAME ) { consoleLog("Skipping unnecessary oracle update"); this.updateStatusForSets( @@ -570,7 +577,9 @@ export class TransactionsManager { this.priorityFeeSetting ); - const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`; + const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${ + errorDetails.errorInfo?.split("\n")[0] ?? "unknown" + }`; const errorInfo = errorDetails.errorName || errorDetails.errorInfo ? errorString diff --git a/solauto-sdk/src/utils/stringUtils.ts b/solauto-sdk/src/utils/stringUtils.ts index 73e59753..baf85233 100644 --- a/solauto-sdk/src/utils/stringUtils.ts +++ b/solauto-sdk/src/utils/stringUtils.ts @@ -9,7 +9,7 @@ export type StrategyType = (typeof StrategyTypes)[number]; export function adjustedTicker(mint?: PublicKey) { const info = tokenInfo(mint); - if (info.ticker.toLowerCase() === "wbtc") { + if (info.ticker.toLowerCase().includes("btc")) { return "BTC"; } else if (info.ticker.toLowerCase() === "weth") { return "ETH"; diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index 1c5b04e9..d55be1b7 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -9,7 +9,11 @@ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; -import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; +import { + PRICES, + SWITCHBOARD_PRICE_FEED_IDS, + UPDATE_ORACLE_TX_NAME, +} from "../constants"; import { TransactionItemInputs } from "../types"; import { consoleLog, @@ -18,6 +22,7 @@ import { } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; import { CrossbarClient } from "@switchboard-xyz/common"; +import { SolautoClient, TransactionItem } from "../services"; export async function getPullFeed( conn: Connection, @@ -69,8 +74,6 @@ export async function buildSwbSubmitResponseTx( toWeb3JsPublicKey(signer.publicKey) ); - // Try to replicate locally in the lambda docker container - consoleLog("Fetching crank IX..."); const [pullIxs, responses] = await retryWithExponentialBackoff( async () => { @@ -146,3 +149,41 @@ export async function getSwitchboardFeedData( export function isSwitchboardMint(mint: PublicKey | string) { return Object.keys(SWITCHBOARD_PRICE_FEED_IDS).includes(mint.toString()); } + +export async function addSwbOraclePullTxs( + client: SolautoClient, + txs: TransactionItem[] +) { + const switchboardMints = [ + ...(isSwitchboardMint(client.pos.supplyMint) + ? [client.pos.supplyMint] + : []), + ...(isSwitchboardMint(client.pos.debtMint) ? [client.pos.debtMint] : []), + ]; + + if (txs.find((x) => x.oracleInteractor) && switchboardMints.length) { + consoleLog("Checking if oracle update(s) needed..."); + const staleOracles = + ( + await getSwitchboardFeedData(client.connection, switchboardMints) + ).filter((x) => x.stale).length > 0; + + if (staleOracles) { + consoleLog("Requires oracle update(s)..."); + const oracleTxs = switchboardMints.map( + (x) => + new TransactionItem( + async () => + await buildSwbSubmitResponseTx( + client.connection, + client.signer, + x + ), + UPDATE_ORACLE_TX_NAME + ) + ); + consoleLog("Set crank IXs in TX"); + txs.unshift(...oracleTxs); + } + } +} From 5591d0558730006064de9ccc5e86b6bc1b1d45fd Mon Sep 17 00:00:00 2001 From: Chelioso Date: Tue, 28 Oct 2025 23:21:25 -0400 Subject: [PATCH 79/83] sandbox script tweak --- solauto-sdk/local/txSandbox.ts | 38 ++++++++++++++-------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/solauto-sdk/local/txSandbox.ts b/solauto-sdk/local/txSandbox.ts index dc50db7b..97f43664 100644 --- a/solauto-sdk/local/txSandbox.ts +++ b/solauto-sdk/local/txSandbox.ts @@ -49,30 +49,24 @@ export async function main() { lpEnv, }); - // await client.initializeExistingSolautoPosition({ - // positionId: 1, - // authority: new PublicKey("61rtn5tzVkesapo6Cz83SPoShUfAePSxJsqniuF2wRKC"), - // // lpUserAccount: new PublicKey( - // // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" - // // ), - // }); - - // const transactionItems = [rebalance(client)]; + await client.initializeExistingSolautoPosition({ + positionId: 1, + authority: new PublicKey("61rtn5tzVkesapo6Cz83SPoShUfAePSxJsqniuF2wRKC"), + // lpUserAccount: new PublicKey( + // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" + // ), + }); - const account = await fetchBank(umi, publicKey("Ac4KV5K5isDqtABtg6h5DiwzZMe3Sp9bc3pBiCUvUpaQ")); - console.log(account.config.oracleKeys[0]); - console.log(account.config.oracleKeys[1]); - console.log(account.config.oracleKeys[2]); - console.log(account.config.oracleKeys[3]); + const transactionItems = [rebalance(client)]; - // const txManager = new ClientTransactionsManager({ - // txHandler: client, - // txRunType: payForTransaction ? "normal" : "only-simulate", - // priorityFeeSetting: PriorityFeeSetting.Default, - // retryConfig: { totalRetries: 2 }, - // }); - // const statuses = await txManager.send(transactionItems); - // consoleLog(statuses); + const txManager = new ClientTransactionsManager({ + txHandler: client, + txRunType: payForTransaction ? "normal" : "only-simulate", + priorityFeeSetting: PriorityFeeSetting.Default, + retryConfig: { totalRetries: 2 }, + }); + const statuses = await txManager.send(transactionItems); + consoleLog(statuses); } async function refreshAll() { From 2af3803070d50054c700ec2f53363a75dbe94f2e Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Thu, 18 Dec 2025 15:10:32 -0500 Subject: [PATCH 80/83] mut on top of the fixes branch --- idls/marginfi.json | 2 +- idls/solauto.json | 4 ++-- .../generated/instructions/lending_account_withdraw.rs | 8 ++++---- programs/solauto/src/types/instruction.rs | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/idls/marginfi.json b/idls/marginfi.json index ce043b18..b0775aa3 100644 --- a/idls/marginfi.json +++ b/idls/marginfi.json @@ -883,7 +883,7 @@ "accounts": [ { "name": "marginfiGroup", - "isMut": false, + "isMut": true, "isSigner": false }, { diff --git a/idls/solauto.json b/idls/solauto.json index eff84e1c..2a0c6270 100644 --- a/idls/solauto.json +++ b/idls/solauto.json @@ -559,7 +559,7 @@ }, { "name": "marginfiGroup", - "isMut": false, + "isMut": true, "isSigner": false }, { @@ -697,7 +697,7 @@ }, { "name": "marginfiGroup", - "isMut": false, + "isMut": true, "isSigner": false }, { diff --git a/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs b/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs index 5ee5c446..040c74ea 100644 --- a/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs +++ b/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs @@ -41,7 +41,7 @@ impl LendingAccountWithdraw { remaining_accounts: &[solana_program::instruction::AccountMeta], ) -> solana_program::instruction::Instruction { let mut accounts = Vec::with_capacity(8 + remaining_accounts.len()); - accounts.push(solana_program::instruction::AccountMeta::new_readonly( + accounts.push(solana_program::instruction::AccountMeta::new( self.marginfi_group, false, )); @@ -111,7 +111,7 @@ pub struct LendingAccountWithdrawInstructionArgs { /// /// ### Accounts: /// -/// 0. `[]` marginfi_group +/// 0. `[writable]` marginfi_group /// 1. `[writable]` marginfi_account /// 2. `[signer]` signer /// 3. `[writable]` bank @@ -345,7 +345,7 @@ impl<'a, 'b> LendingAccountWithdrawCpi<'a, 'b> { )], ) -> solana_program::entrypoint::ProgramResult { let mut accounts = Vec::with_capacity(8 + remaining_accounts.len()); - accounts.push(solana_program::instruction::AccountMeta::new_readonly( + accounts.push(solana_program::instruction::AccountMeta::new( *self.marginfi_group.key, false, )); @@ -421,7 +421,7 @@ impl<'a, 'b> LendingAccountWithdrawCpi<'a, 'b> { /// /// ### Accounts: /// -/// 0. `[]` marginfi_group +/// 0. `[writable]` marginfi_group /// 1. `[writable]` marginfi_account /// 2. `[signer]` signer /// 3. `[writable]` bank diff --git a/programs/solauto/src/types/instruction.rs b/programs/solauto/src/types/instruction.rs index f626208f..aee070b2 100644 --- a/programs/solauto/src/types/instruction.rs +++ b/programs/solauto/src/types/instruction.rs @@ -127,7 +127,7 @@ pub enum Instruction { #[account(name = "ata_program")] #[account(name = "rent")] #[account(mut, name = "solauto_position")] - #[account(name = "marginfi_group")] + #[account(mut, name = "marginfi_group")] #[account(mut, name = "marginfi_account")] #[account(mut, name = "supply_bank")] #[account(optional, name = "supply_price_oracle")] @@ -152,7 +152,7 @@ pub enum Instruction { #[account(mut, optional, name = "referred_by_ta")] #[account(mut, optional, name = "position_authority")] #[account(mut, name = "solauto_position")] - #[account(name = "marginfi_group")] + #[account(mut, name = "marginfi_group")] #[account(mut, name = "marginfi_account")] #[account(optional, mut, name = "intermediary_ta")] #[account(mut, name = "supply_bank")] From d916fc7753e246e1cb98c7d6ed7d2a842a2e3ef2 Mon Sep 17 00:00:00 2001 From: Matthew <19557547+mtleliever@users.noreply.github.com> Date: Thu, 18 Dec 2025 18:07:35 -0500 Subject: [PATCH 81/83] set marginfiGroup account to isWritable: true --- solauto-sdk/src/generated/instructions/marginfiRebalance.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/src/generated/instructions/marginfiRebalance.ts b/solauto-sdk/src/generated/instructions/marginfiRebalance.ts index d7330fd4..d7e87e58 100644 --- a/solauto-sdk/src/generated/instructions/marginfiRebalance.ts +++ b/solauto-sdk/src/generated/instructions/marginfiRebalance.ts @@ -188,7 +188,7 @@ export function marginfiRebalance( }, marginfiGroup: { index: 10, - isWritable: false as boolean, + isWritable: true as boolean, value: input.marginfiGroup ?? null, }, marginfiAccount: { From 8ece90a5b3d4b296b3f431aefe515cc9f0063265 Mon Sep 17 00:00:00 2001 From: Matthew <19557547+mtleliever@users.noreply.github.com> Date: Fri, 19 Dec 2025 03:22:25 -0500 Subject: [PATCH 82/83] fix marginfiProtocolInteraction isWritable --- .../src/generated/instructions/marginfiProtocolInteraction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts b/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts index 5bc2a629..459dbf6a 100644 --- a/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts +++ b/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts @@ -139,7 +139,7 @@ export function marginfiProtocolInteraction( }, marginfiGroup: { index: 7, - isWritable: false as boolean, + isWritable: true as boolean, value: input.marginfiGroup ?? null, }, marginfiAccount: { From 3874f8a1ed5248493f8358bb650afd57bcd7cb22 Mon Sep 17 00:00:00 2001 From: Chelioso Date: Wed, 4 Feb 2026 15:26:32 -0700 Subject: [PATCH 83/83] fix transaction sizes --- solauto-sdk/package.json | 2 +- .../manager/clientTransactionsManager.ts | 4 -- .../manager/transactionsManager.ts | 31 ++++++++-- .../transactions/types/transactionSet.ts | 14 ++++- .../src/solautoPosition/positionUtils.ts | 20 +++---- solauto-sdk/src/utils/jitoUtils.ts | 22 +++---- solauto-sdk/src/utils/marginfi/data.ts | 12 ++-- solauto-sdk/src/utils/solanaUtils.ts | 58 +++++++++++++++++-- solauto-sdk/src/utils/solautoUtils.ts | 6 +- 9 files changed, 122 insertions(+), 47 deletions(-) diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index adf56441..14f59d84 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.814", + "version": "1.0.819", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", diff --git a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts index 11877860..08d64af2 100644 --- a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts @@ -5,10 +5,6 @@ import { import { SolautoClient } from "../../solauto"; import { TransactionsManager } from "./transactionsManager"; import { - addSwbOraclePullTxs, - buildSwbSubmitResponseTx, - getSwitchboardFeedData, - isSwitchboardMint, retryWithExponentialBackoff, } from "../../../utils"; import { TransactionItem } from "../types"; diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index 745e7d5e..c7d9b809 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -7,15 +7,23 @@ import { TransactionRunType, } from "../../../types"; import { + addTxOptimizations, + canSerializeTransaction, consoleLog, ErrorsToThrow, + getActualTxSize, retryWithExponentialBackoff, sendSingleOptimizedTransaction, sendJitoBundledTransactions, } from "../../../utils"; import { TxHandler } from "../../solauto"; import { getErrorInfo } from "../transactionUtils"; -import { LookupTables, TransactionItem, TransactionSet } from "../types"; +import { + JITO_TIP_BUFFER_BYTES, + LookupTables, + TransactionItem, + TransactionSet, +} from "../types"; import { UPDATE_ORACLE_TX_NAME } from "../../../constants"; export class TransactionTooLargeError extends Error { @@ -112,14 +120,25 @@ export class TransactionsManager { continue; } - const transaction = item.tx.setAddressLookupTables( + const transaction = addTxOptimizations( + this.txHandler.umi, + item.tx, + 1, + 1 + ).setAddressLookupTables( await this.lookupTables.getLutInputs(item.lookupTableAddresses) ); - if (!transaction.fitsInOneTransaction(this.txHandler.umi)) { + // Check if transaction can be serialized with buffer for Jito tip instruction + if ( + !canSerializeTransaction( + this.txHandler.umi, + transaction, + JITO_TIP_BUFFER_BYTES + ) + ) { + const actualSize = getActualTxSize(this.txHandler.umi, transaction); throw new TransactionTooLargeError( - `Exceeds max transaction size (${transaction.getTransactionSize( - this.txHandler.umi - )})` + `Exceeds max transaction size (actual: ${actualSize ?? "failed to serialize"} + ~${JITO_TIP_BUFFER_BYTES} bytes for Jito tip)` ); } else { let newSet = new TransactionSet(this.txHandler, this.lookupTables, [ diff --git a/solauto-sdk/src/services/transactions/types/transactionSet.ts b/solauto-sdk/src/services/transactions/types/transactionSet.ts index ba1ec0ce..d11c83b0 100644 --- a/solauto-sdk/src/services/transactions/types/transactionSet.ts +++ b/solauto-sdk/src/services/transactions/types/transactionSet.ts @@ -2,15 +2,20 @@ import { AddressLookupTableInput, transactionBuilder, TransactionBuilder, + Umi, } from "@metaplex-foundation/umi"; import { TxHandler } from "../../solauto"; import { LookupTables } from "./lookupTables"; import { TransactionItem } from "./transactionItem"; -import { addTxOptimizations } from "../../../utils"; +import { addTxOptimizations, canSerializeTransaction } from "../../../utils"; import { CHORES_TX_NAME } from "../../../constants"; const MAX_SUPPORTED_ACCOUNT_LOCKS = 64; +// Buffer for Jito tip instruction (~44 bytes) + potential new accounts in message +// This accounts for: System Transfer instruction data, Jito tip account (if new), etc. +export const JITO_TIP_BUFFER_BYTES = 75; + export class TransactionSet { constructor( private txHandler: TxHandler, @@ -55,7 +60,12 @@ export class TransactionSet { ]) ); - return tx.fitsInOneTransaction(this.txHandler.umi); + // Use actual serialization check with buffer for Jito tip instruction + return canSerializeTransaction( + this.txHandler.umi, + tx, + JITO_TIP_BUFFER_BYTES + ); } add(...items: TransactionItem[]) { diff --git a/solauto-sdk/src/solautoPosition/positionUtils.ts b/solauto-sdk/src/solautoPosition/positionUtils.ts index 3ce661a6..9fcaeca5 100644 --- a/solauto-sdk/src/solautoPosition/positionUtils.ts +++ b/solauto-sdk/src/solautoPosition/positionUtils.ts @@ -38,7 +38,7 @@ export function createSolautoSettings( boostToBps: settings.boostToBps, repayGap: settings.repayGap, repayToBps: settings.repayToBps, - padding: [], + padding: new Array(24).fill(0), }; } @@ -167,9 +167,9 @@ export function createFakePositionState( borrowFeeBps: 0, decimals: supplyDecimals, mint: fromWeb3JsPublicKey(supply.mint), - padding1: [], - padding2: [], - padding: new Uint8Array([]), + padding1: new Array(5).fill(0), + padding2: new Array(8).fill(0), + padding: new Uint8Array(32), }, debt: { amountUsed: { @@ -186,9 +186,9 @@ export function createFakePositionState( borrowFeeBps: 0, decimals: debtDecimals, mint: fromWeb3JsPublicKey(debt.mint), - padding1: [], - padding2: [], - padding: new Uint8Array([]), + padding1: new Array(5).fill(0), + padding2: new Array(8).fill(0), + padding: new Uint8Array(32), }, netWorth: { baseUnit: supply.price @@ -199,8 +199,8 @@ export function createFakePositionState( maxLtvBps, liqThresholdBps, lastRefreshed: BigInt(currentUnixSeconds()), - padding1: [], - padding2: [], - padding: [], + padding1: new Array(6).fill(0), + padding2: new Array(4).fill(0), + padding: new Array(2).fill(0), }; } diff --git a/solauto-sdk/src/utils/jitoUtils.ts b/solauto-sdk/src/utils/jitoUtils.ts index 122a4459..d1031f7b 100644 --- a/solauto-sdk/src/utils/jitoUtils.ts +++ b/solauto-sdk/src/utils/jitoUtils.ts @@ -82,8 +82,8 @@ async function simulateJitoBundle(umi: Umi, txs: VersionedTransaction[]) { { encoding: "base64", commitment: "confirmed", - preExecutionAccountsConfigs: txs.map((_) => {}), - postExecutionAccountsConfigs: txs.map((_) => {}), + preExecutionAccountsConfigs: txs.map((_) => { }), + postExecutionAccountsConfigs: txs.map((_) => { }), skipSigVerify: true, }, ]); @@ -334,16 +334,16 @@ export async function sendJitoBundledTransactions( const feeEstimates = usePriorityFee(priorityFeeSetting) ? await Promise.all( - txs.map( - async (x) => - (await getComputeUnitPriceEstimate( - umi, - x, - priorityFeeSetting, - true - )) ?? 1000000 - ) + txs.map( + async (x) => + (await getComputeUnitPriceEstimate( + umi, + x, + priorityFeeSetting, + true + )) ?? 1000000 ) + ) : undefined; if (abortController?.signal.aborted) { diff --git a/solauto-sdk/src/utils/marginfi/data.ts b/solauto-sdk/src/utils/marginfi/data.ts index 019f6aa9..c4b41327 100644 --- a/solauto-sdk/src/utils/marginfi/data.ts +++ b/solauto-sdk/src/utils/marginfi/data.ts @@ -288,9 +288,9 @@ async function getTokenUsage( }, baseAmountMarketPriceUsd: toBaseUnit(marketPrice, USD_DECIMALS), borrowFeeBps: isAsset ? 0 : toBps(originationFee), - padding1: [], - padding2: [], - padding: new Uint8Array([]), + padding1: new Array(5).fill(0), + padding2: new Array(8).fill(0), + padding: new Uint8Array(32), }; } @@ -513,9 +513,9 @@ export async function getMarginfiAccountPositionState( maxLtvBps, liqThresholdBps, lastRefreshed: BigInt(currentUnixSeconds()), - padding1: [], - padding2: [], - padding: [], + padding1: new Array(6).fill(0), + padding2: new Array(4).fill(0), + padding: new Array(2).fill(0), }, }; } diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index f6899578..067f7c51 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -220,7 +220,11 @@ export function prependTx( ); if (keccakIdx !== -1) { const [beforeKeccak, afterKeccak] = tx.splitByIndex(keccakIdx + 1); - let finalTx = transactionBuilder().add(beforeKeccak); + // IMPORTANT: Preserve lookup tables from original transaction + const lookupTables = tx.options.addressLookupTables ?? []; + let finalTx = transactionBuilder() + .setAddressLookupTables(lookupTables) + .add(beforeKeccak); for (const txToAdd of txsToAdd) { finalTx = finalTx.append(txToAdd); } @@ -234,6 +238,50 @@ export function prependTx( } } +const MAX_TX_SIZE = 1232; + +// Dummy blockhash for size checking (all zeros, 32 bytes base58 encoded) +const DUMMY_BLOCKHASH = "11111111111111111111111111111111"; + +/** + * Safely checks if a transaction can be serialized and returns its actual size. + * Returns undefined if serialization fails. + */ +export function getActualTxSize( + umi: Umi, + tx: TransactionBuilder +): number | undefined { + try { + // Set a dummy blockhash if not already set, just for size checking + const txWithBlockhash = tx.setBlockhash(DUMMY_BLOCKHASH); + // Build the transaction and convert to web3.js format + const builtTx = txWithBlockhash.build(umi); + const web3Tx = toWeb3JsTransaction(builtTx); + // Actually serialize to get the real size + const serialized = web3Tx.serialize(); + return serialized.length; + } catch (e) { + // Serialization failed - transaction is too large or malformed + return undefined; + } +} + +/** + * Checks if a transaction can fit in a single transaction by actually serializing it. + * More accurate than getTransactionSize() estimation. + */ +export function canSerializeTransaction( + umi: Umi, + tx: TransactionBuilder, + buffer: number = 0 +): boolean { + const size = getActualTxSize(umi, tx); + if (size === undefined) { + return false; + } + return size + buffer <= MAX_TX_SIZE; +} + export function addTxOptimizations( umi: Umi, tx: TransactionBuilder, @@ -251,11 +299,13 @@ export function addTxOptimizations( const allOptimizations = tx.prepend(computePriceIx).prepend(computeLimitIx); const withCuPrice = tx.prepend(computePriceIx); const withCuLimit = tx.prepend(computeLimitIx); - if (allOptimizations.fitsInOneTransaction(umi)) { + + // Use actual serialization check instead of estimate + if (canSerializeTransaction(umi, allOptimizations)) { return prependTx(tx, [computePriceIx, computeLimitIx]); - } else if (withCuPrice.fitsInOneTransaction(umi)) { + } else if (canSerializeTransaction(umi, withCuPrice)) { return prependTx(tx, [computePriceIx]); - } else if (withCuLimit.fitsInOneTransaction(umi)) { + } else if (canSerializeTransaction(umi, withCuLimit)) { return prependTx(tx, [computeLimitIx]); } else { return tx; diff --git a/solauto-sdk/src/utils/solautoUtils.ts b/solauto-sdk/src/utils/solautoUtils.ts index 6703aeaf..651c5201 100644 --- a/solauto-sdk/src/utils/solautoUtils.ts +++ b/solauto-sdk/src/utils/solautoUtils.ts @@ -403,12 +403,12 @@ export class ContextUpdates { ...dca.automation, intervalSeconds: BigInt(dca.automation.intervalSeconds), unixStartDate: BigInt(dca.automation.unixStartDate), - padding: new Uint8Array([]), - padding1: [], + padding: new Uint8Array(32), + padding1: new Array(4).fill(0), }, dcaInBaseUnit: BigInt(dca.dcaInBaseUnit), tokenType: dca.tokenType, - padding: [], + padding: new Array(31).fill(0), }; } else if (update.type === "cancellingDca") { this.cancellingDca = update.value;