Error codes

Download Markdown

When a vault transaction fails, your wallet or a block explorer shows an error. It usually appears as a number, such as custom program error: 0x1785, or as a name, such as StaleValuation. This page lets you look up both.

How to read an error

What. The vault program is built with Anchor, a common Solana framework, and Anchor numbers a program's own errors from 6000 upward. The vault's errors are numbered in a fixed order. So the first one, CreatorNotAllowed, is 6000, and each next one is one higher. Explorers often show the number in hexadecimal (base 16, written with a 0x prefix); the table below gives both forms.

Why it matters. Most failures are not problems with your funds. A failed transaction changes nothing on chain except the network fee. The error tells you whether to retry, wait, or change what you asked for.

Example. An explorer shows custom program error: 0x1785. To convert, multiply each hexadecimal digit by its power of 16: 0x1785 = 1 × 4,096 + 7 × 256 + 8 × 16 + 5 = 6,021. Error 6021 is StaleValuation: a leg needs refreshing. Retrying after a few seconds, once the app has refreshed the legs, usually works.

Errors from other programs (the SPL Token program, an adapter or a protocol) have their own numbers and names. Adapter errors appear inside the vault's transaction when the vault calls the adapter.

The errors you are most likely to see

ErrorWhat it meansWhat to do
StaleValuationA leg was not valued recently enough (each vault sets the limit, at most about one minute).Retry after the legs are refreshed. If it persists, a protocol may be down; see A protocol stops working.
VaultNotActiveThe vault is not taking deposits, for example because it is in Recovery.Check the vault's state on its page.
VaultFrozenSenior has taken a loss, so withdrawals are paused.Wait for recovery or settlement; see When a protocol fails.
CoverageViolationThe action would leave too little or too much Junior.Choose a smaller amount, or the other tranche.
VaultCapExceededThe vault is full.Deposit less, or wait for room.
AmountTooSmallBelow the vault's minimum deposit, or zero.Increase the amount.
MinSharesNotMet, BelowMinUsdcOutThe price moved past the limit you set.Review the new quote and retry.
NotEligibleYetYour withdrawal's waiting period has not ended.Wait until the eligible time shown in the app.
InsufficientIdleNot enough cash in the vault right now.Your request stays queued; it is funded when cash returns.
OutflowLimitReachedThe vault's limit on how much Senior can take out in a 24-hour window is used up.Your request stays queued for the next 24-hour window.
PausedThe guardian or admin paused this action.Wait for an announcement.
PendingClaimA queued exit needs re-valuing first.Retry after a refresh.

Table: the errors a holder is most likely to meet, and the usual next step.

Full list

CodeHexNameMessage
60000x1770CreatorNotAllowedSigner is not allowed to create vaults
60010x1771AdapterNotApprovedAdapter program is not approved in the registry
60020x1772TooManyEntriesList is full
60030x1773InvalidParamsInvalid vault parameters
60040x1774InvalidLegParamsInvalid leg parameters
60050x1775VaultNotDraftVault must be in Draft state
60060x1776VaultNotActiveVault must be Active
60070x1777AccountsNotInitializedVault token accounts are not initialized yet
60080x1778AccountsAlreadyInitializedVault token accounts are already initialized
60090x1779TooManyLegsVault already has the maximum number of legs
60100x177aInvalidBoundAccountsLeg-bound accounts are missing or too many
60110x177bLegAccountsMismatchAccounts passed for the leg do not match its bound account list
60120x177cLegListMismatchLeg accounts passed to activation are missing or out of order
60130x177dTargetsDoNotSumToFullLeg targets plus idle target must equal 100%
60140x177eSeedAlreadyProvidedA Junior seed was already provided
60150x177fSeedTooSmallJunior seed is smaller than required
60160x1780AmountTooSmallAmount is below the minimum
60170x1781VaultCapExceededDeposit would exceed the vault cap
60180x1782CoverageViolationAction would break the coverage limits
60190x1783MinSharesNotMetFewer shares than the minimum requested
60200x1784ZeroSharesAmount is too small to mint any shares
60210x1785StaleValuationA leg valuation is too old; refresh the legs first
60220x1786InvalidValuationReportAdapter returned a malformed valuation report
60230x1787AdapterFlaggedAdapter flagged the leg as unsafe
60240x1788MissingReturnDataAdapter did not return a valuation report
60250x1789UnauthorizedExecutorSigner is not the vault executor
60260x178aInsufficientIdleNot enough idle USDC
60270x178bIdleBelowMinimumAction would leave idle USDC below the minimum
60280x178cLegCapExceededAction would exceed the leg cap
60290x178dLegWeightExceededAction would exceed the leg maximum weight
60300x178eTransitBalanceMismatchAdapter did not move the exact USDC amount
60310x178fValueIncreaseTooLowLeg value increased less than allowed by slippage
60320x1790WithdrawSlippageExceededUSDC received is below the allowed slippage
60330x1791NotEligibleYetWithdrawal request is not eligible yet
60340x1792AlreadyFundedWithdrawal request is already funded
60350x1793NotFundedWithdrawal request is not funded yet
60360x1794BelowMinUsdcOutPayout is below the requested minimum
60370x1795InvalidMintToken account has the wrong mint
60380x1796InvalidTokenOwnerToken account has the wrong owner
60390x1797MathOverflowMath overflow
60400x1798PendingClaimA leg has an in-flight claim whose value is not fresh enough for this action
60410x1799InvalidCapabilitiesThe selected action mode is not enabled for this leg
60420x179aInvalidActionReportThe asynchronous adapter returned an invalid action report
60430x179bInvalidReturnAssetThe action return account or mint does not match the configured custody
60440x179cPendingActionIncompleteThe asynchronous action is not ready for final settlement
60450x179dInsufficientLegValueRequested asynchronous withdrawal exceeds the leg's recognised value
60460x179eNoPendingActionThe leg has no pending action to re-value
60470x179fInvalidActionAccountThe action account is missing, a signer, or one of the vault's or leg's own accounts
60480x17a0NotGuardianOnly the guardian or the admin can do this
60490x17a1NotPendingAdminOnly the proposed admin can accept
60500x17a2PausedThis part of the vault is paused
60510x17a3InvalidPauseScopeInvalid pause scope
60520x17a4LimitNotLowerGuardian changes can only lower a limit
60530x17a5LegCloseOnlyThe leg is close-only and takes no new money
60540x17a6AdapterPinMismatchThe adapter was upgraded or the wrong ProgramData account was passed
60550x17a7VaultFrozenSenior has taken a loss: withdrawals are paused until recovery or settlement
60560x17a8NotInRecoveryThe vault is not in Recovery
60570x17a9RecoveryNotFinishedEvery impaired leg must be retired and Senior restored first
60580x17aaLegNotEmptyThe leg still holds value or has an action in flight
60590x17abNotInSettlementThe vault is not in Settlement
60600x17acNothingToClaimNothing to claim
60610x17adTimelockNotElapsedThe change's delay has not passed yet
60620x17aeChangeExpiredThe change was not executed in time
60630x17afChangeMismatchThe queued change does not match this action
60640x17b0MustQueueChangeOnce a vault is active this change must be queued
60650x17b1OutflowLimitReachedToday's Senior outflow limit is used up; the request stays queued
60660x17b2NotTopLevelInstruction must be called directly in the transaction, not through CPI
60670x17b3MissingEndTradebegin_trade must be followed by end_trade for the same leg, with no other vault instruction in between
60680x17b4TradeOpenA trade is open; no other vault instruction may run until end_trade
60690x17b5NoOpenTradeNo trade is open for this leg
60700x17b6TradeTooLargeTrade is larger than the leg's max_trade_usdc
60710x17b7TokenAccountNotBoundToken account is not bound to the leg's adapter
60720x17b8TradeExceedsPositionExit amount exceeds the leg's token balance
60730x17b9TokenLegNeedsTradeToken legs move only through begin_trade / end_trade, not allocate or deallocate
60740x17baCostBudgetExceededTrade cost would exceed the vault's rolling 7-day cost budget
60750x17bbInvalidCostBudgetInvalid cost budget
60760x17bcNotATokenLegThe leg is not a token leg
60770x17bdLegStressedThe leg's market trades outside its band: it is neither bought nor sold until it is back
60780x17beNotPendingAuthoritySigner is not the proposed protocol authority
60790x17bfLegSuspendedThe leg is suspended: it takes no new money until the guardian or admin lifts the suspension
60800x17c0InvalidLegModeOnly an active or close-only leg can be suspended, and only a suspended leg resumed
60810x17c1MarkNotHigherA raised mark must be above the leg's current mark

Table: all 82 vault program errors with their code and the message the program returns.

Advanced details

  • If a new error is ever inserted in the middle of the list, every later code shifts. Match on the name from the program's IDL rather than on the number when you write tooling.
  • RecoveryNotFinished's message says impaired legs must be retired. An impaired leg can also have its impairment lifted by a queued RaiseMark change instead of being retired.

On this page