Spending and proofs
| Error | Cause |
|---|---|
InvalidProof() | Verifier returned false |
PublicInputNotInField() | A public input or deposit trapdoor ≥ BN254 modulus |
NullifierAlreadySpent() | Input note already spent |
TxNullifierAlreadyUsed(bytes32) | Signed transaction already executed |
InvalidNoteTreeRoot(bytes32) | Unknown note-tree root |
InvalidKeyRegistryRoot(bytes32) | Unknown key-registry root |
NotRelayer(address) | fee > 0 from a non-allowlisted sender |
InvalidRecipient(address) | Withdrawal to the pool itself |
ETHTransferFailed(address, uint256) | ETH payout refused |
Swaps
| Error | Cause |
|---|---|
DeadlineTooFar(uint256 deadline, uint256 maxDeadline) | Deadline > now + 30 min |
ZeroAmountOutMin() | Zero slippage floor |
InvalidSwapSelector() | Unsupported router function |
DirectTransferNotAccepted() | ETH sent to the pool by anyone except the router |
Deposits
| Error | Cause |
|---|---|
ReceivingKeyNotFound(address) | Recipient never registered |
TokenNotWhitelisted(address) | Token not allowed (or not ERC-20 for a pull) |
InsufficientValue() | ETH msg.value < amount |
DepositTooSmall(token, amount, minimum) | Below minDeposit |
DepositTooLarge(token, amount, limit) | Above maxDeposit |
DepositCapExceeded(token, poolBalance, cap) | Pool would exceed depositCap |
DepositNotPending(uint256) | No pending deposit at index |
InvalidDepositData() | Gatekeeper’s parameters don’t match the stored hash |
NotDepositor(address) | Reclaim by someone other than the depositor |
InvalidPullIntent() | Bad pull-intent signature |
PullIntentExpired(uint256) | Pull intent past deadline |
PullRequestUsed(bytes32) | Pull intent reused |
GasFeeTooHigh(uint256, uint256) | Pull gas above cap |
FeesExceedDeposit(uint256, uint256) | Fees would consume the deposit |
Keys
| Error | Cause |
|---|---|
NotAccountOwner(address caller, address expected) | pk doesn’t hash to caller |
KeyDataAddressMismatch(address, address) | keyData address mismatch |
InvalidReceivingKey() | pnk/ek out of field |
EncryptionKeyNotOnCurve(bytes32, bytes32) | ek not on Grumpkin |
KeyRotationTooSoon(uint256) | A different key is already registered (always max) |
Roles and configuration
| Error | Cause |
|---|---|
NotGuard(address) | Gatekeeper-only call (or gatekeeper/admin for pause) |
NotWhitelistManager(address) | Whitelist call by other address |
UpgradeNotAuthorized(address) | Admin-only call, or unauthorized upgrade |
NotUpgradeController(address) | setUpgradeController by other address |
ZeroAddress() | Zero address where forbidden |
LengthMismatch() | Batch arrays differ in length |
FeeTooHigh(uint256, uint256) | Fee bps > 100 or overhead > 500,000 |
ContractPaused() | paused is set |
WithdrawalsArePaused() | withdrawalsPaused is set |
Proxy and factory
| Error | Cause |
|---|---|
ImplementationAlreadySet() | setImplementationAndCall after initialization |
EmptyInitialization() | Factory called without initializer calldata |
NotAdmin(address) | AdminUpgradeController admin-only call |