{"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.
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 |