Reference
Errors
What each revert means and what to do about it.
| Error | Meaning | What to do |
|---|---|---|
NotOwner() | The caller is not the owner (or a zero owner was given) | Send from the owner account |
NotGuardian() | The caller is not the wallet guardian, or the guardian is a passkey | For passkeys use vetoWithSig |
BadDelay() | The wait is under 5 minutes or over 30 days | Pick a value in range |
BadGuardian() | A wallet guardian with a passkey point, or a passkey with a zero coordinate or no domain hash | Use one kind, fully filled |
BadTarget() | The target is zero or the vault itself | Choose another destination |
NotPending() | The announcement does not exist, is already done, was refused or cancelled, or its epoch is over | Check it with status / getOp |
NotReady(readyAt) | It has not ripened yet | Wait until the timestamp in the error |
Expired() | More than 14 days after it ripened | Announce again |
CallFailed(reason) | The call reverted (not enough balance, refused by the recipient...) | The announcement stays pending. Fix the cause or cancel it. |
Reentrancy() | A nested execute | Not expected in normal use |
BadSignature() | The guardian signature is not valid for this vault, id and epoch, or the passkey is wrong, on another domain, or not user-verified | Sign again with the right passkey on the right site |
NoGuardian() | A passkey guardian with no key set | Cannot happen if created through the factory |
Common situations
- "execution reverted (unknown custom error)" in a wallet: the wallet cannot decode custom errors. Run
marmot status: the phase tells you why. - A veto signature suddenly invalid: a panic or an owner rotation moved the epoch. Sign a new one.
- The guardian page says "not this vault's guardian": the passkey was made on another domain, or for another vault.