Skip to content

Errors ​

Every error the contract can return, what it means, and what to do. Grouped by who is likely to hit it.

scripts/check-errors.mjs verifies this page covers every variant in the contract's error type, so the two cannot silently drift apart.

Staking and redeeming ​

ErrorWhat it meansWhat to do
contract is pausedAn admin froze stake, redeem and claimOnly the admin can unpause. Positions are unaffected
deposit would take the pool to X, above the Y capThe deposit cap is fullStake less, or wait — redemptions free up room
stake amount is too small to mint any vATOM at the current exchange rateYour deposit rounds to zero sharesStake more
zero amountAmount was zero, or below a configured minimumSend a real amount
expected exactly one coin with denom XWrong denom, no funds, or several coins attachedAttach exactly one coin of the named denom
insufficient vATOM sentRedeem needs the receipt token attached as fundsAttach vATOM
insufficient pooled liquidityThe redemption exceeds what the pool can backRedeem less
rewards vault is not configured; call SetRewardsVault before stakingDeployment is incomplete — staking is gated on the vaultAn admin must bind the vault
no recognized backing for the outstanding supply; minting is refused in this statevATOM exists but no recognised backing — the rate is undefinedDo not deposit. Operators should investigate immediately
the pool holds X with no receipts outstanding, so it belongs to no oneThe pool is non-empty while no vATOM exists. Minting 1:1 would hand that ATOM to youShould be unreachable. Report it — it needs governance, not a deposit
a previous cohort is still winding down: X of redemptions are unsettledEveryone has exited and their batches have not all finalized. Deposits are closed until they do, so the departing cohort's rewards cannot be inheritedWait, and keep finalizing batches

Privileged actions ​

ErrorWhat it meansWhat to do
unauthorizedThe sender is neither the admin nor, for a guardian message, the guardianSend from the right key
invalid config: guardian and clear_guardian cannot both be setOne request asked to appoint a guardian and to remove oneSend one or the other
a deposit cap can only be lowered by a guardian: X is not below YA guardian tried to raise the cap, or set it to what it already is. The guardian's powers only ever shrinkUse the admin to raise a cap
a guardian may only remove validators, and X is not in the current setThe named validator is not configured — usually a mistyped addressCheck the address against config
validator set cannot be emptyRemoving those validators would leave none, and the contract could not stake at allLeave at least one, or pause instead
new delegation is halted until an admin reviews the validator set a guardian reducedA guardian removed validators, so stake and restake_rewards wait for an admin to declare a set. Redeeming and claiming are unaffectedWait for the admin's update_validators
redelegation destination X is not in the configured validator setRedelegation may only move stake to a validator the allocation already usesAdd it with update_validators first, or pick one that is configured
cannot redelegate to the same validatorSource and destination are identicalNothing to do — check the addresses

Claiming ​

ErrorWhat it meansWhat to do
unbond batch must be finalized before it can be claimedYour ATOM has arrived but the batch is not settledAnyone can finalize, including you
withdrawal is not claimable yetStill unbondingWait for the date shown
withdrawal already claimedAlready paid outNothing to do
withdrawal not foundNo such request idCheck the id

Keeper operations ​

ErrorWhat it meansWhat to do
a reward vesting window is still active; restake again once it has elapsedCompounding refused mid-windowWait. Rewards accumulate in the vault; nothing is lost
no vATOM is outstanding, so a reward fold has no one to vest toEveryone has exited; folding would put unowned ATOM in the pool for the next depositor to captureNothing needed — the next cohort's first stake disposes of it to the community pool automatically. SweepOrphanedRewards does the same when nobody is depositing
vATOM is outstanding, so the vault balance belongs to current holdersSweepOrphanedRewards called while holders existUse RestakeRewards; the vault is theirs
unbond batch is not ready to process yetThe batch window has not elapsedWait, or call again later. Harmless
unbond batch is emptyNo requests to processNothing to do
unbond batch has not been processed yetTried to finalize a batch still openProcess it first
unbond batch slashing has already been finalizedAlready settledNothing to do
unbond batch not foundNo such batch idCheck the id
validator X already has the maximum in-flight unbonding entriesThe Cosmos 7-entry-per-validator limitFinalize an earlier batch to release a slot, then retry
another in-flight batch's unbonding has already completed…Two batches have arrived; the balance cannot be attributedUse the governed path for all arrived batches together
batch N has a forecast (not chain-reported) maturity…The chain did not report a completion timeNeeds the governed settlement path

Governed settlement ​

ErrorWhat it meansWhat to do
this call must settle every batch whose ATOM has arrived, togetherA subset was suppliedInclude every batch the error names
the requested credits total X but only Y is unreservedCredits exceed the available balanceRecompute per-batch realized amounts; they must fit the unreserved balance
batch N has begun arriving but is not settleable until TA partially arrived batch blocks settlementWait until the time given, then retry
batch N has a forecast maturity and you are crediting…Crediting less than full backing on a forecast batchOnly set accept_shortfall once you have established the loss is real — claims settle permanently
no batches supplied; an empty settlement is not a settlementEmpty listSupply the arrived batches
slashing_effect must be in [0, 1]; a haircut never increases the payoutOut-of-range valueUse a fraction between 0 and 1

Configuration ​

ErrorWhat it meansWhat to do
unauthorizedNot the adminUse the admin key
validator weights must sum to 10000 basis pointsWeights are wrongMake them total exactly 10000
max_validators must be between 1 and NOut of rangeUse a value within the ceiling
N validators exceeds the configured max_validators of MSet too largeReduce the set or raise max_validators
this set plus the validators still holding a live delegation would be N, above the hard ceilingA rotation would leave more validators with live delegations than the gas budget allows. ProcessUnbondBatch iterates live delegations, not the configured listDrain the outgoing validators — process unbond batches until their delegations are gone — before rotating further
validator set is emptyNo validators suppliedSupply at least one
validator X is not in the chain's bonded validator setA validator is unbonded, jailed or unknownRemove it or use a bonded one
protocol fee must be zero for this free-to-use contractA non-zero fee was suppliedIt is fixed at zero by design
invalid configuration: …A parameter failed validationThe message names the parameter
the address is not an immutable rewards-vault (expected code id) owned by this contractThe candidate vault failed verificationIt must run the expected code id, have no migrate admin, and be owned by this contract
the currently configured rewards vault still holds a balanceRe-pointing would strand fundsSweep with RestakeRewards first

Migration ​

ErrorWhat it means
cannot migrate from contract XWrong contract — the stored cw2 name does not match
cannot downgrade from version X to YDowngrades are refused
cannot migrate from version X; minimum supported is YStorage from before the minimum does not deserialize. Deploy fresh
stored version X is not three numeric componentsThe stored version cannot be parsed, so the downgrade and compatibility checks cannot be evaluated. Refused rather than skipped — an unparseable version previously bypassed both

Internal ​

These indicate a bug or a chain-level surprise, not user error. Report them.

ErrorWhat it means
unexpected reply id NA submessage reply arrived that the contract does not recognise
math overflowAn arithmetic operation exceeded its bounds — the contract refuses rather than wrapping
the contract holds X but Y is already reserved for finalized claimsThe claim reserve exceeds the contract's balance, which should be impossible: the reserve is only ever incremented from that balance and decremented when paid out. Both settlement routes refuse rather than normalising it to zero and writing an irreversible result over a broken invariant

See also ​

Running on a testnet. See the risks page for what holding vATOM involves.