> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fade.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> Every program error, its code, and what to do about it.

Fade's errors are Anchor custom errors, numbered from 6000. A failed transaction carries the code in its error (`{"Custom": 6020}`) and the name and message in the program logs:

```
Program log: AnchorError ... Error Code: PerWagerCap. Error Number: 6020. Error Message: worst-case payout above the per-wager cap.
```

The generated client exports the codes as constants (for example `FADE_ERROR__PER_WAGER_CAP`) and a `getFadeErrorMessage(code)` helper. Simulate transactions before signing to get the error for free.

## Paytable and admission (`open_wager`)

| Code | Name | Message | What to do |
| - | - | - | - |
| 6012 | `BucketCount` | paytable: zero buckets or more than 32 | Use 1 to 32 buckets; merge outcomes that share a multiplier |
| 6013 | `ProbabilityRange` | paytable: a probability of zero or above 1 | Every `p` must be in 1 ..= 1 000 000 000 |
| 6014 | `ProbabilitySum` | paytable: probabilities do not sum to exactly 1 | Make them sum to exactly 1 000 000 000 |
| 6015 | `MultiplierCeiling` | paytable: a multiplier above 10 000x | Keep every `m` ≤ 100 000 000 bps |
| 6016 | `PaytableOverpays` | paytable: pays out more than it takes in on average | `Σ p·m` must stay below `10 000 × 1e9`, and in practice below the edge floor |
| 6017 | `EdgeFloor` | paytable edge does not cover the LP floor plus the fees | Declared edge ≥ 120 bps + app fee |
| 6018 | `IntegratorFeeTooHigh` | integrator fee above the maximum | App fee ≤ 500 bps |
| 6019 | `StakeBounds` | stake below the minimum or above the maximum | Read `min_stake` / `max_stake` from `Config` |
| 6020 | `PerWagerCap` | worst-case payout above the per-wager cap | Lower the top prize, the stake or the app fee; or wait for a larger or less committed pool |
| 6021 | `IntegratorCap` | integrator exposure above its ceiling | Your open liability would exceed 20 % of assets: wait for open wagers to settle |
| 6022 | `UtilisationBreaker` | utilisation breaker: the pool is too committed | The pool is over 70 % committed: retry after wagers settle |
| 6023 | `GlobalExposure` | reserved liability would exceed kappa of assets | As above: the 80 % hard ceiling |
| 6024 | `Insolvent` | the pool could not pay every open wager at once | The pool cannot back this wager at all: smaller wager or larger pool |
| 6025 | `DrawdownBreaker` | drawdown breaker: the share price fell too far in 24 hours | New wagers are stopped after a 15 % fall in 24 hours; retry later |
| 6026 | `WrongNonce` | wager nonce must equal the integrator's next nonce | Read `next_nonce` from your app record (0 if it does not exist yet) just before building |
| 6027 | `IntegratorPaused` | this integrator is paused | Your app record was paused by governance |
| 6028 | `FeeAccountMismatch` | fee account differs from the integrator record | Pass the `fee_account` stored in your record, or change it with `set_fee_account` |
| 6008 | `WrongMint` | wrong mint | Use the pool's USDC mint, legacy SPL token accounts only |
| 6002 | `Paused` | this operation is paused | New wagers, deposits or new apps are paused by governance; settlement and claims are never paused |

## Randomness and settlement

| Code | Name | Message | What to do |
| - | - | - | - |
| 6029 | `WrongWagerStatus` | the wager is not in the state this instruction needs | Someone else probably moved it first; re-read the wager |
| 6030 | `RequestWindow` | randomness may only be requested from two slots after the open until T\_SETTLE | Wait until `open_slot + 2`; after `T_SETTLE`, expire instead |
| 6031 | `EntropyUnavailable` | SlotHashes holds no slot after the open | Retry a slot later |
| 6032 | `NetworkStateUnreadable` | ORAO network state could not be read | Check the ORAO network state account passed |
| 6033 | `TreasuryMismatch` | treasury does not match ORAO network state | Read ORAO's treasury from its network state |
| 6034 | `WrongRandomnessAccount` | randomness account is not the one bound to this wager | Derive the request from the seed (request), or pass `wager.randomness` (settle, expire) |
| 6035 | `NotFulfilled` | randomness is not fulfilled | Wait for ORAO, then settle |
| 6036 | `AlreadyFulfilled` | randomness is fulfilled: settle, do not expire | Call `settle_wager` |
| 6037 | `NotExpired` | T\_SETTLE has not elapsed | Wait until `expiry_slot` |
| 6038 | `DrawFailed` | no outcome could be drawn | Not expected in practice: every rejection-sampling round failed |
| 6039 | `BeneficiaryMismatch` | beneficiary differs from the one stored at open | Pass `wager.beneficiary` |

## Liquidity

| Code | Name | Message | What to do |
| - | - | - | - |
| 6040 | `NoLiveEpoch` | no epoch is live | Nothing to strike |
| 6041 | `EpochNotClosed` | the epoch has not closed yet | Strike after its `close_ts` |
| 6042 | `StrikeNotClean` | a wager opened before the close is still open | Settle or expire those wagers first, then strike |
| 6043 | `BelowMinimum` | request below the minimum | At least 1 USDC deposited, or 1 share withdrawn, or the whole balance |
| 6044 | `FirstDepositTooSmall` | a first deposit must be at least min\_first\_deposit | While no share exists, deposit at least 100 USDC |
| 6045 | `ForbiddenComposition` | a top-level instruction of this transaction is not allowed with a request | Send the request in a transaction with only compute budget, system, token, associated token and Fade instructions |
| 6046 | `WrongRecord` | the record does not belong to this request's epoch or chain | Pass the epoch record the claim must read |
| 6047 | `EntryRecordRequired` | the epoch record of the request's entry is required | Pass the request's own epoch record too |
| 6048 | `RentReceiverRequired` | the account that advanced the record's rent is required | Pass `record.rent_payer` |
| 6049 | `NothingToClaim` | nothing to claim yet | Wait for the strike |
| 6050 | `WrongOwner` | wrong owner | Pass the request's owner |
| 6051 | `NotStruck` | the request's epoch has not been struck | Wait for the strike |
| 6052 | `PoolRequired` | this request opens an epoch: the pool account is required | Pass the `Pool` account |
| 6053 | `DestinationUnusable` | the owner's token account cannot receive yet | The claim parks what it owes; deliver later |

## Governance and general

| Code | Name | Message |
| - | - | - |
| 6000 | `NotUpgradeAuthority` | signer is not the program's upgrade authority |
| 6001 | `InvalidParams` | parameters are out of range |
| 6003 | `NotCouncil` | signer is not the council |
| 6004 | `NotGuardian` | signer is neither the council nor the guardian |
| 6005 | `GuardianCannotUnpause` | the guardian may only set pause flags, never clear them |
| 6006 | `NoPendingChange` | no parameter change is pending |
| 6007 | `ChangeNotDue` | the pending parameter change is not due yet |
| 6009 | `MathOverflow` | arithmetic overflow |
| 6010 | `ZeroAmount` | amount must be non-zero |
| 6011 | `RemainingAccounts` | unexpected remaining accounts |

Errors outside this list come from the runtime or another program, for example an SPL token transfer failing for insufficient funds, or a system transfer failing because the payer lacks SOL.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.