Skip to content
DevnetTest network: tokens have no real value.What this means

Help & policy

FAQ & troubleshooting

Quick answers first, then every error code the app can show, with what it means and what to do. Whenever OHKO shows an error it also offers the recovery action listed here and, for transactions, the signature with an explorer link.

Questions

Do I need a wallet to play?

No. Free battles, practice against the bot, replays and spectating need no wallet. You only need one for staked matches, tournaments, the faucet, quests rewards and the shop.

Are these tokens worth anything?

No. OHKO runs on Solana devnet, a test network. SOL, USDC and $OHKO on devnet have no value and cannot be exchanged for real money.

My wallet says I am on the wrong network

Wallets keep a network setting per app or globally. Switch your wallet to devnet (the steps for each wallet are in Getting started; the wrong network banner opens the same guide). OHKO sends every transaction to devnet itself, so nothing can reach mainnet by accident.

The SOL airdrop failed

The public devnet airdrop is rate limited per IP address and often refuses. The Faucet then sends a small drip from OHKO's faucet wallet, and links to faucet.solana.com for more. Each asset can be claimed once every 12 hours.

What happens to my stake if the server crashes?

Your stake is in the on-chain escrow, not with OHKO. A battle in progress is rebuilt from its saved inputs when the server comes back. If the match is never settled before its deadline, anyone can refund both players in full; the app shows a Claim refund button. See refund guarantees.

My opponent never deposited

You have nothing to do if you were second: nothing moved. If you deposited first, press Cancel and refund, or wait: once the join deadline passes, OHKO refunds you automatically.

My transaction expired or was dropped

OHKO rebuilds and re-signs it with a fresh blockhash and a priority fee, up to three times, before it gives up with a clear message. Nothing is charged for a transaction that never landed.

My deposit confirmed but the match did not continue

OHKO watches the chain for every open match, so it finds your deposit even if the app lost the connection. If it has not seen it after a few seconds, the notice offers Refresh status.

Can I lose more than my stake?

No. A staked match moves exactly your stake into escrow, plus a tiny network fee (and, the first time, the rent for your OHKO profile account). The rake comes out of the winner's payout, never from the loser's wallet.

Is the battle rigged in OHKO's favour?

OHKO does not play, and the battle seed is committed on-chain before your opponent joins. Anyone can re-run any staked match and compare it with the chain; see Provably fair.

Why is my chat limited?

Staked matches and tournaments only allow quick-chat emotes, to stop scams and harassment where money is involved. Free battles allow short text, with links blocked and profanity masked.

How do I report a player?

Open the battle menu and choose Report opponent. Reports go to OHKO's moderators, who can mute, freeze queue access or ban; every admin action is logged.

How do I limit my play?

Set daily stake limits or exclude yourself on Your limits. See Responsible play.

Something else went wrong

Every error notice has a Copy request ID button. Send that ID to support@ohko.fun so we can find exactly what happened.

Error codes

Every code OHKO can show, grouped by area. You can link to a code directly, for example /docs/faq#error-blockhash-expired.

Wallet and chain

WALLET_NOT_INSTALLED
No Solana wallet was found in this browser.
What to do: Install Phantom, Solflare or Backpack, or open OHKO inside your wallet app on mobile.
The app offers: Get a wallet
WALLET_NOT_CONNECTED
Your wallet is not connected.
What to do: Connect your wallet to continue.
The app offers: Connect wallet
WALLET_DISCONNECTED
Your wallet disconnected in the middle of this step.
What to do: Reconnect your wallet. Nothing was sent, so you can safely try again.
The app offers: Reconnect wallet
WRONG_NETWORK
Your wallet is on a different Solana network.
What to do: OHKO runs on devnet. Switch your wallet to Devnet in its settings, then try again.
The app offers: How to switch
USER_REJECTED
You rejected the request in your wallet.
What to do: Nothing was signed or sent. Try again when you are ready.
The app offers: Try again
INSUFFICIENT_SOL_FOR_FEES
You do not have enough SOL to pay network fees.
What to do: Top up a little devnet SOL from the faucet, then try again.
The app offers: Open faucet
INSUFFICIENT_STAKE_BALANCE
Your balance is lower than the stake.
What to do: Get more from the faucet or pick a smaller stake.
The app offers: Open faucet
BLOCKHASH_EXPIRED
The transaction expired before it was confirmed.
What to do: We rebuilt and retried it automatically. If it keeps failing, try again in a moment.
The app offers: Try again
TX_DROPPED
The network dropped the transaction.
What to do: We retried it with a higher priority fee. If this keeps happening, try again shortly.
The app offers: Try again
TX_FAILED
The transaction failed on-chain.
What to do: Check the transaction in the explorer for details, then try again.
The app offers: View transaction
RPC_UNAVAILABLE
The Solana network is not responding.
What to do: We are switching to a backup RPC endpoint. Please try again in a few seconds.
The app offers: Try again
RPC_RATE_LIMITED
The Solana RPC is rate limiting requests.
What to do: Wait a few seconds and try again.
The app offers: Try again shortly
TX_NOT_SEEN_BY_SERVER
Your transaction confirmed, but our server has not seen it yet.
What to do: We are reconciling with the chain now. This usually takes a few seconds.
The app offers: Refresh status
PROGRAM_ERROR
The OHKO program rejected the transaction.
What to do: Check the transaction in the explorer. If you think this is a bug, contact support.
The app offers: View transaction

Matchmaking and battles

QUEUE_TIMEOUT
No opponent was found in time.
What to do: Try again, widen your stake, or create a challenge link to invite someone.
The app offers: Search again
OPPONENT_LEFT_BEFORE_JOIN
Your opponent left before joining the match.
What to do: Your stake is refundable. Search again to find a new opponent.
The app offers: Find another opponent
MATCH_ALREADY_JOINED
Someone else joined this match first.
What to do: Nothing was charged. Find another match.
The app offers: Find another match
ACTIVE_MATCH_EXISTS
You already have an active staked match.
What to do: Finish or rejoin your current match first.
The app offers: Go to my match
WS_DISCONNECTED
Connection to the game server was lost.
What to do: Reconnecting automatically. Your battle state will be restored.
The app offers: Reconnecting…
OPPONENT_DISCONNECTED
Your opponent disconnected.
What to do: They have a short grace period to come back. If they do not, you win by forfeit.
The app offers: Waiting for opponent
INVALID_CHOICE
That move is not valid right now.
What to do: Your battle was resynced with the server. Pick again.
The app offers: Resync
BATTLE_DESYNC
Your battle view went out of sync.
What to do: We reloaded the battle state from the server.
The app offers: Resync
BATTLE_RESUMING
The game server restarted during your battle.
What to do: Your battle is being restored from the saved log. It will continue in a moment.
The app offers: Restoring battle…
REFEREE_DELAYED
Settlement is taking longer than usual.
What to do: We keep retrying. If the deadline passes, you can claim a full refund on-chain.
The app offers: Waiting for settlement
REFUND_AVAILABLE
This match was not settled before its deadline.
What to do: Claim a full refund. The program returns both stakes with no fee.
The app offers: Claim refund
FORMAT_UNAVAILABLE
Battles in this format are not open yet.
What to do: Pick another format from the list.
The app offers: Pick a format
ALREADY_IN_BATTLE
You are already in a battle.
What to do: Finish or forfeit your current battle before starting another one.
The app offers: Rejoin battle
BATTLE_ENDED
This battle is already over.
What to do: Watch the replay, or start a new battle.
The app offers: Watch replay
REMATCH_UNAVAILABLE
A rematch is not possible right now.
What to do: Your opponent left or the offer expired. Find a new opponent instead.
The app offers: Find a new opponent
CHAT_TEXT_DISABLED
Text chat is off in this battle.
What to do: Use the quick-chat emotes instead.
The app offers: Use an emote
SESSION_EXPIRED
Your session expired.
What to do: Reload the page to start a fresh session. Running battles are kept for you.
The app offers: Reload

App and API

VALIDATION_FAILED
Some of the information you entered is not valid.
What to do: Fix the highlighted fields and try again.
The app offers: Review form
UNAUTHENTICATED
You need to sign in with your wallet.
What to do: Sign the message in your wallet to prove it is yours. It costs nothing.
The app offers: Sign in
FORBIDDEN
You do not have access to this.
What to do: Switch to a wallet with access, or go back home.
The app offers: Go home
NOT_FOUND
We could not find what you were looking for.
What to do: Check the link, or head back to the home page.
The app offers: Go home
RATE_LIMITED
You are going a little too fast.
What to do: Wait a moment, then try again.
The app offers: Try again shortly
OFFLINE
You are offline.
What to do: Check your internet connection. We will reconnect automatically.
The app offers: Waiting for connection
SERVICE_UNAVAILABLE
The game server is temporarily unavailable.
What to do: Please try again in a moment.
The app offers: Try again

Sign-in, staking and faucet

SIGN_IN_FAILED
We could not verify your wallet signature.
What to do: Sign the message again in your wallet. Make sure the page address matches the one shown in the wallet.
The app offers: Sign in again
SIGN_IN_EXPIRED
That sign-in request expired.
What to do: Sign-in requests are valid for five minutes. Start a new one.
The app offers: Sign in again
SIGN_IN_UNSUPPORTED
This wallet cannot sign messages.
What to do: Use Phantom, Solflare or Backpack, which support Sign-In With Solana.
The app offers: Get a wallet
WALLET_REQUIRED
Staked matches need a signed-in wallet.
What to do: Connect your wallet and sign in. Signing in is free and sends no transaction.
The app offers: Sign in
WALLET_MISMATCH
Your wallet changed accounts.
What to do: Sign in again with the account you want to play with, or switch back in your wallet.
The app offers: Sign in again
STAKING_UNAVAILABLE
Staked matches are not available right now.
What to do: The referee service is offline. Free battles still work; try staking again later.
The app offers: Try again later
STAKE_NOT_ALLOWED
That stake is not one of the table amounts.
What to do: Pick one of the listed stakes for this currency.
The app offers: Pick a stake
DEPOSIT_WINDOW_CLOSED
The time to deposit for this match has run out.
What to do: Nothing was charged unless you deposited. Any deposit can be refunded from this page. Find a new opponent to play.
The app offers: Find a new opponent
STAKE_MISMATCH
The on-chain match does not match what was agreed.
What to do: The battle will not start. The creator can cancel the match for a full refund.
The app offers: Cancel and refund
OPPONENT_DID_NOT_DEPOSIT
Your opponent did not deposit in time.
What to do: If you deposited, cancel the match for a full refund, then find a new opponent.
The app offers: Find a new opponent
SETTLEMENT_PENDING
The referee is still settling this match on-chain.
What to do: This usually takes a few seconds. Payouts are sent automatically.
The app offers: Please wait
FAUCET_COOLDOWN
You already claimed this recently.
What to do: Each wallet can claim once per cooldown period. Come back when the timer runs out.
The app offers: Come back later
FAUCET_UNAVAILABLE
The faucet cannot send that right now.
What to do: The faucet wallet may be empty or offline. Try the public Solana faucet, or try again later.
The app offers: Try again
AIRDROP_RATE_LIMITED
The public devnet airdrop is rate-limited.
What to do: Use the OHKO faucet drip below, or request devnet SOL at faucet.solana.com.
The app offers: Open faucet options
REFERRAL_TX_NOT_FOUND
We could not find your referrer registration on-chain yet.
What to do: If your wallet confirmed the transaction, wait a few seconds and refresh. Your referrer is stored on-chain either way.
The app offers: Refresh
KEEPER_UNAVAILABLE
The buyback keeper is not running on this server.
What to do: Fees keep collecting in the buyback vault and are bought back and burned once the keeper is back.
The app offers: Check back later
BUYBACK_QUOTE_FAILED
The buyback could not get a swap quote.
What to do: The keeper retries on its next run. Funds stay in the buyback vault until then.
The app offers: Wait for the next run
BUYBACK_PRICE_IMPACT
The buyback was skipped because the swap would move the price too much.
What to do: The keeper buys back in smaller steps on its next runs.
The app offers: Wait for the next run
VERIFY_FAILED
This match could not be verified.
What to do: One or more checks failed. The details below show which value did not match.
The app offers: Report it
ASSET_LOAD_FAILED
An image failed to load.
What to do: A placeholder is shown instead. Reload to try again.
The app offers: Reload

Teams, challenges, tournaments, quests and shop

TEAM_REQUIRED
This format needs a team you built.
What to do: Pick one of your saved teams, or build one in the teambuilder.
The app offers: Open teambuilder
TEAM_NOT_FOUND
That team was not found.
What to do: It may have been deleted. Pick another saved team.
The app offers: Open teambuilder
TEAM_INVALID
That team is not legal in this format.
What to do: Fix the problems listed in the teambuilder, then save it again.
The app offers: Fix team
TEAM_LIMIT_REACHED
You have reached the maximum number of saved teams.
What to do: Delete a team you no longer use, then save again.
The app offers: Manage teams
CHALLENGE_NOT_FOUND
This challenge link does not exist.
What to do: Check the link, or open the lobby to find another opponent.
The app offers: Open lobby
CHALLENGE_EXPIRED
This challenge has expired.
What to do: Ask for a new link, or create your own challenge.
The app offers: Open lobby
CHALLENGE_CLOSED
This challenge is no longer open.
What to do: Someone else accepted it or the creator cancelled it. Find another one in the lobby.
The app offers: Open lobby
CHALLENGE_LOCKED
This challenge is reserved for another wallet.
What to do: Only the wallet chosen by the creator can accept it.
The app offers: Switch wallet
CHALLENGE_OWN
You cannot accept your own challenge.
What to do: Share the link with an opponent instead.
The app offers: Share link
CHALLENGE_CREATOR_AWAY
The challenger is not online right now.
What to do: Their challenge can be accepted as soon as they are back. Try again in a moment.
The app offers: Try again
CHALLENGE_LIMIT_REACHED
You already have the maximum number of open challenges.
What to do: Cancel one of your open challenges first.
The app offers: Manage challenges
STAKE_OUT_OF_RANGE
That stake is outside the allowed range.
What to do: Pick an amount between the minimum and maximum shown for this currency.
The app offers: Change amount
TOURNAMENT_NOT_FOUND
That tournament was not found.
What to do: Open the tournament list to pick another one.
The app offers: Tournaments
TOURNAMENT_NOT_REGISTERING
Registration for this tournament is closed.
What to do: Join the next open table on the tournament page.
The app offers: Tournaments
TOURNAMENT_ALREADY_REGISTERED
You are already registered for this tournament.
What to do: Wait for the bracket to start. It begins as soon as every seat is taken.
The app offers: Waiting for players
TOURNAMENT_IN_PROGRESS
You are still playing in a tournament.
What to do: Finish your tournament run before queueing for other battles.
The app offers: Open tournament
QUEST_NOT_COMPLETE
This quest is not complete yet.
What to do: Play the battles it asks for, then claim the reward.
The app offers: Keep playing
QUEST_ALREADY_CLAIMED
You already claimed this quest today.
What to do: New quests start at 00:00 UTC.
The app offers: Come back tomorrow
SHOP_ITEM_NOT_FOUND
That item is not in the shop.
What to do: Reload the shop and pick another item.
The app offers: Reload shop
SHOP_ITEM_OWNED
You already own this item.
What to do: Equip it from your collection instead.
The app offers: Equip item
SHOP_ITEM_NOT_FOR_SALE
This item cannot be bought.
What to do: It is earned through daily quests.
The app offers: See quests
SHOP_ITEM_NOT_OWNED
You do not own this item yet.
What to do: Buy it in the shop first, then equip it.
The app offers: Buy item
SHOP_ORDER_NOT_FOUND
That order was not found.
What to do: Start the purchase again from the shop.
The app offers: Reload shop
SHOP_ORDER_EXPIRED
This order expired before it was paid.
What to do: Start the purchase again. Nothing was burned for an expired order.
The app offers: Buy again
SHOP_PAYMENT_PENDING
Your burn transaction is not visible on-chain yet.
What to do: Wait a few seconds and check again. Your order stays reserved for 15 minutes.
The app offers: Check again
SHOP_PAYMENT_INVALID
That transaction does not pay for this order.
What to do: Pay with the button in the shop, which burns the exact amount with the order reference.
The app offers: Pay again
NAME_TAKEN
That name is already taken.
What to do: Pick a different display name.
The app offers: Change name
PREMIUM_EMOTE_LOCKED
You do not own that emote.
What to do: Premium emotes are unlocked in the shop.
The app offers: Open shop

Responsible play, moderation and admin

AGE_CONFIRMATION_REQUIRED
Staked matches are for adults only.
What to do: Confirm that you are 18 or older before your first staked match.
The app offers: Confirm age
HUMAN_CHECK_REQUIRED
Please confirm you are human before staking today.
What to do: A quick check runs once a day before your first staked match.
The app offers: Run the check
HUMAN_CHECK_FAILED
The human check did not pass.
What to do: Run the check again. If it keeps failing, reload the page or try another browser.
The app offers: Try again
STAKE_LIMIT_REACHED
This stake would go over your daily stake limit.
What to do: Pick a smaller stake, wait until 00:00 UTC, or review your limits.
The app offers: Review limits
SELF_EXCLUDED
You have excluded yourself from staked play.
What to do: Your self-exclusion is still running and cannot be shortened. Free battles stay available unless the exclusion is permanent.
The app offers: See my settings
LIMIT_INCREASE_PENDING
Your higher limit is not active yet.
What to do: Raising a limit takes effect after a 24-hour cooling-off period. Lower limits apply at once.
The app offers: See my limits
ACCOUNT_BANNED
This account has been suspended by a moderator.
What to do: You can still view replays and claim refunds. Contact support if you think this is a mistake.
The app offers: Contact support
QUEUE_FROZEN
Queue access for this account is paused by a moderator.
What to do: You cannot search for matches, accept challenges or enter tournaments until the pause ends.
The app offers: Contact support
CHAT_MUTED
You are muted in chat.
What to do: A moderator muted this account. Quick-chat and messages are blocked until the mute ends.
The app offers: OK
ADMIN_TX_INVALID
That transaction is not an admin action of this program.
What to do: Send the change from the admin panel and report the confirmed signature again.
The app offers: Try again
INTERNAL_ERROR
Something went wrong on our side.
What to do: Try again. If it keeps happening, report it with the request ID.
The app offers: Copy request ID

Escrow program errors

PROGRAM_UNAUTHORIZED
This wallet is not allowed to do that.
What to do: Switch to the wallet that owns this match or holds the required role.
The app offers: Go home
PROGRAM_PAUSED
OHKO has paused new staked matches and tournaments.
What to do: Running matches still settle and refunds always work. Try again later, or play a free battle meanwhile.
The app offers: Try again later
PROGRAM_RAKE_ABOVE_CAP
That fee is above the 10% hard cap.
What to do: Set every rake to 10% (1,000 bps) or less.
The app offers: Review config
PROGRAM_INVALID_SPLITS
The fee split does not add up to 100%.
What to do: Adjust the treasury, buyback and season shares so they sum to 10,000 bps.
The app offers: Review config
PROGRAM_INVALID_DISCOUNT_TIERS
The holder discount tiers are not valid.
What to do: Tiers need rising $OHKO thresholds and must never raise the rake.
The app offers: Review config
PROGRAM_INVALID_STAKE_LIMITS
The stake limits are not valid.
What to do: Each currency needs a minimum above zero (at least 0.001 SOL for SOL) and a maximum at or above it.
The app offers: Review config
PROGRAM_INVALID_WINDOW
A deadline is outside the allowed range.
What to do: Use a value between 1 minute and 30 days.
The app offers: Review config
PROGRAM_INVALID_REFERRAL_CONFIG
The referral settings are outside the allowed range.
What to do: The referral share can be at most 50% of the treasury cut and last at most one year.
The app offers: Review config
PROGRAM_INVALID_PRIZE_SPLIT
The tournament prize split is not valid.
What to do: Prize shares must add up to 100% and must not increase from 1st place down.
The app offers: Review config
PROGRAM_WRONG_MINT
That token is not accepted for this table.
What to do: Stake with the devnet USDC or $OHKO token from the faucet.
The app offers: Open faucet
PROGRAM_STAKE_BELOW_MINIMUM
The stake is below the table minimum.
What to do: Pick a higher stake.
The app offers: Change stake
PROGRAM_STAKE_ABOVE_MAXIMUM
The stake is above the table maximum.
What to do: Pick a lower stake.
The app offers: Change stake
PROGRAM_INVALID_FORMAT_ID
That battle format is not recognised.
What to do: Pick a format from the list and try again.
The app offers: Pick a format
PROGRAM_MATCH_NOT_OPEN
This match is no longer open.
What to do: Someone joined it first, or it was cancelled. Nothing was charged. Find another match.
The app offers: Find another match
PROGRAM_MATCH_NOT_ACTIVE
This match is not in progress.
What to do: It may already be settled or refunded. Refresh to see its final state.
The app offers: Refresh status
PROGRAM_JOIN_DEADLINE_PASSED
This match expired before you joined.
What to do: Nothing was charged. Find another opponent or create a new challenge.
The app offers: Find another match
PROGRAM_CANNOT_JOIN_OWN_MATCH
You cannot join your own match.
What to do: Share your challenge link with someone else, or queue for a public match.
The app offers: Find a match
PROGRAM_OPPONENT_NOT_ALLOWED
This challenge is reserved for a different wallet.
What to do: Ask the creator for an open challenge, or find another match.
The app offers: Find another match
PROGRAM_SETTLE_DEADLINE_PASSED
The settlement deadline for this match has passed.
What to do: The match can no longer be settled. Claim your full refund instead.
The app offers: Claim refund
PROGRAM_NOT_EXPIRED
The deadline has not passed yet.
What to do: Refunds unlock once the deadline passes. Check back then.
The app offers: Wait for the deadline
PROGRAM_INVALID_WINNER
The reported winner is not a player in this match.
What to do: Settlement is retried automatically. If the deadline passes, claim a full refund.
The app offers: Waiting for settlement
PROGRAM_SELF_REFERRAL
You cannot use your own wallet as your referrer.
What to do: Use a referral link from another player.
The app offers: Change referrer
PROGRAM_REFERRER_ALREADY_SET
You already have a referrer.
What to do: A referrer is permanent once registered, so nothing changed.
The app offers: Go home
PROGRAM_MISSING_TOKEN_ACCOUNT
A token account this transaction needs is missing.
What to do: Try again. OHKO creates missing token accounts for you automatically.
The app offers: Try again
PROGRAM_INVALID_TOKEN_ACCOUNT
A token account in this transaction belongs to someone else or holds a different token.
What to do: Reload and try again from your own wallet.
The app offers: Reload
PROGRAM_INVALID_REFERRER_ACCOUNT
The referrer account does not match the match record.
What to do: Settlement is retried automatically with the right accounts.
The app offers: Waiting for settlement
PROGRAM_ACCOUNT_MISMATCH
An account in this transaction does not match the on-chain record.
What to do: Reload the page and try again.
The app offers: Reload
PROGRAM_MATH_OVERFLOW
The amounts are too large to process.
What to do: Use a smaller amount.
The app offers: Change amount
PROGRAM_INVALID_TOURNAMENT_SIZE
Tournaments must have 8 or 16 players.
What to do: Pick 8 or 16 players.
The app offers: Change size
PROGRAM_TOURNAMENT_FULL
This tournament is already full.
What to do: Nothing was charged. Join the next one.
The app offers: Find another tournament
PROGRAM_ALREADY_REGISTERED
You are already registered in this tournament.
What to do: It starts automatically as soon as every seat is filled.
The app offers: Waiting for players
PROGRAM_TOURNAMENT_NOT_REGISTERING
This tournament is no longer taking registrations.
What to do: It has started or expired. Nothing was charged. Join another one.
The app offers: Find another tournament
PROGRAM_TOURNAMENT_NOT_ACTIVE
This tournament is not in progress.
What to do: Refresh to see its current state.
The app offers: Refresh status
PROGRAM_INVALID_BRACKET_MATCH
That bracket match cannot be reported yet.
What to do: Its players are not decided yet. The referee retries automatically.
The app offers: Waiting for results
PROGRAM_MATCH_ALREADY_REPORTED
That bracket match was already reported.
What to do: Refresh to see the latest bracket.
The app offers: Refresh bracket
PROGRAM_TOURNAMENT_NOT_COMPLETE
The tournament has not finished yet.
What to do: Prizes are paid as soon as the final is reported.
The app offers: Waiting for the final
PROGRAM_INVALID_RECIPIENT
The prize recipient does not match the tournament result.
What to do: Reload and try again.
The app offers: Reload
PROGRAM_INVALID_REFUND_RECIPIENT
That entry was already refunded or is not part of this tournament.
What to do: Refresh to see which entries are still refundable.
The app offers: Refresh status
PROGRAM_INSUFFICIENT_VAULT_BALANCE
The vault does not hold enough for this amount.
What to do: Enter a smaller amount.
The app offers: Change amount
PROGRAM_SEASON_UNDERFUNDED
The season vault does not hold the published prize totals.
What to do: Lower the totals to the current pool, or wait for the pool to grow.
The app offers: Review totals
PROGRAM_TOO_MANY_SEASON_ENTRIES
The season payout list has too many entries.
What to do: Publish between 1 and 64 entries.
The app offers: Review list
PROGRAM_INVALID_MERKLE_PROOF
This payout is not on the published season list.
What to do: Rebuild the payout batch from the published list.
The app offers: Rebuild batch
PROGRAM_ALREADY_PAID
This season entry was already paid.
What to do: Skip it and continue with the remaining entries.
The app offers: Refresh status
PROGRAM_SEASON_OVERDISTRIBUTED
These payouts exceed the published season totals.
What to do: Check the payout list against the published totals.
The app offers: Review list
PROGRAM_INVALID_SLOT_HASHES
The network's recent slot data could not be read.
What to do: Try again in a few seconds.
The app offers: Try again
PROGRAM_INVALID_AMOUNT
The amount must be greater than zero.
What to do: Enter a positive amount.
The app offers: Change amount
PROGRAM_UNSUPPORTED_CURRENCY
That currency is not supported for this action.
What to do: Pick SOL or USDC.
The app offers: Change currency
PROGRAM_NO_PENDING_ADMIN
No admin transfer is waiting for this wallet.
What to do: Ask the current admin to start the transfer to this wallet first.
The app offers: Go home
PROGRAM_RECIPIENT_NOT_RENT_EXEMPT
The recipient wallet is empty and cannot receive such a small SOL amount.
What to do: Send the recipient a little SOL first, then retry the payout.
The app offers: Retry payout
PROGRAM_INVALID_REMAINING_ACCOUNTS
The transaction lists the wrong number of accounts.
What to do: Rebuild the transaction and try again.
The app offers: Try again