Error & Revert Reference

Error & Revert Reference

When a GenLayer protocol contract rejects a call, it reverts with a custom error rather than a plain string. Tooling that does not have the contract ABI shows you only the raw revert data — a 4-byte selector such as 0x632be5a1, sometimes followed by ABI-encoded arguments. This page lets you translate that selector back into a named error, understand what it means, and see the most common cause or fix.

How to Look Up a Selector

The first four bytes of a revert payload identify the error. For example, a revert that begins 0x632be5a1 corresponds to FeeValueMustBeNonZero(uint256) — a required fee field was left at zero.

  • If you have the full revert data, take the first four bytes (the leading 0x plus eight hex characters) and find it in the tables below.
  • The selector is derived as the first four bytes of keccak256("ErrorName(type1,type2,...)"), using the argument types only — no parameter names, no spaces. Any tool that computes function/error selectors (for instance, cast 4byte-decode or cast sig) uses the same rule.
  • Errors that carry arguments (for example BatchSizeExceeded(uint256,uint256)) encode those values immediately after the selector; the parenthesized note in the Meaning column tells you what each argument is.

Selectors are computed from the exact error signature. FeeValueMustBeNonZero(uint256) and a hypothetical FeeValueMustBeNonZero() are different selectors. When computing a selector yourself, always use the canonical, type-only signature and omit parameter names — hashing a signature that still contains parameter names produces a wrong selector.

Common Encoding Pitfalls

Some reverts you hit while integrating are not protocol errors at all, but encoding mistakes in the request you sent. A few recurring ones:

  • Write-transaction calldata must be wrapped. The data for a write (state-changing) transaction is not the raw contract calldata. It must be rlp.encode([calldata, leader_only]) — the calldata together with the leader-only flag. Passing the raw calldata directly typically surfaces as an RLP decoding error like RLP string ends with superfluous bytes. If you see that message, wrap your calldata as an RLP list rather than sending it bare.
  • Selector present but arguments missing or misaligned. If a selector matches an error that takes arguments but the payload is only four bytes long (or the wrong length), the sending code likely built the error data by hand. Decode the arguments against the signature shown in the tables.
  • Wrong signature when decoding. If a selector does not appear in these tables, double-check that you are hashing the type-only signature. A mismatch between your assumed signature and the real one yields a selector that will never resolve here.

How This Catalog Was Generated

The error signatures are taken directly from the consensus repository's canonical list (scripts/utils/errorSelectors.ts on the v0.6-dev line), and each 4-byte selector is computed from the type-only signature with keccak256. The list was validated against the known anchor FeeValueMustBeNonZero(uint256) = 0x632be5a1, and checked to contain no selector collisions. The meanings and fixes are derived from the errors' definitions and revert sites in the contracts; where a name did not permit a confident gloss, the entry is deliberately conservative.

⚠️

This reference reflects a development snapshot of the consensus contracts and is intended for orientation, not as a compatibility guarantee. Error names, selectors, and especially the exact conditions that trigger them can change between protocol versions. For a definitive decode, always match against the ABI of the specific deployed contract you are calling. Entries noted as "(test mock)" originate from test-only contracts and should not be expected on a production network.

Error Tables

The catalog is grouped by protocol area and sorted alphabetically within each group for lookup. Every entry lists the error signature, its 4-byte selector, a one-line meaning, and the most common cause or fix.

Fees (39)

ErrorSelectorMeaningCommon cause / fix
AllocationCommitmentMissing()0xbe77b500Expected fee-allocation commitment is not presentInclude the commitment
AllocationDuplicateKey()0xbb598087Two sibling allocations share (messageType, recipient, callKey)Deduplicate allocation keys
AllocationLifecycleBudgetInsufficient()0x00583b33Budget below minPrimary times (appealRounds+1) for on-acceptanceRaise on-acceptance budget
AllocationRestrictedTxCannotAcceptMessageFees()0x35ebdf50A restricted-allocation tx illegally accepted message feesDo not accept message fees here
AllocationSubtreeHashMismatch()0xdda17044Provided subtree hash differs from committed hashProvide the committed subtree
AllocationSubtreeRequired()0x47db53f3Leader must carry subtree under HashCommitments but did notInclude required subtree
AllocationTreeBudgetInconsistent()0x328bfb08Allocation-tree node budgets do not sum consistentlyFix tree budget sums
AllocationTreeMalformed()0x7fecd5b1Fee allocation tree is structurally invalidRebuild a valid tree
AllocationTreeTooDeep()0x48668d66Allocation tree exceeds maximum depthFlatten/reduce tree depth
AlreadyClaimed()0x646cf558Fee or reward already claimedNo double claim
AlreadySettled()0x560ff900Fees or transaction already settledNo re-settlement
BudgetTooLow()0x305e533cProvided budget is below the minimum requiredIncrease the budget
ExecutionBudgetExceeded(uint256,uint256)0x57df8523Execution gas consumption exceeded the tx budget (attempted, budget)Raise execution budget
ExternalBudgetInvalid()0x8b434eeaExternal message budget is invalidEnsure budget >= gasLimit*price
ExternalGasLimitBelowMinimum()0xf5963b64External message gas limit below minimumRaise external gas limit
ExternalGasLimitOrPriceZero()0xbf35c24eExternal message gas limit or price is zeroProvide non-zero limit and price
ExternalMessageFreezeExceeded(bytes32,uint256,uint256)0x05684868External message froze more value than allowed (txId, declaredValue, availableLimit)Reduce declared value
ExternalOnAcceptanceNotSupported()0xa54ce0b6On-acceptance semantics not supported for external messagesDo not use on-acceptance externally
FailedFeeTransfer()0x24a8ac13Fee ETH transfer failedCheck recipient/balance
FeeSettlementNotCompleted()0x1432a761Operation requires fee settlement to complete firstSettle fees before proceeding
FeeValueMustBeNonZero(uint256)0x632be5a1A required fee field was zero (field index)Provide a non-zero fee value
InsufficientFees()0x8d53e553Total fees provided do not cover the operationProvide more fees
InsufficientFeesForRound()0x0c35bf69Fees insufficient to fund a specific consensus roundIncrease per-round fees
InsufficientGasForInternalMessageCreation(uint256,uint256,uint256,address)0xb2c9bc63Outer tx lacks gas to forward per-child floor under EIP-150 (floor, required, available, recipient)Raise outer gas limit
InsufficientValue()0x11011294msg.value is less than fees owedSend more value
MaxPriceExceeded(uint256,uint256)0xb4132db3Global gas price exceeds the user's max-price cap (globalPrice, userMax)Raise max price or retry cheaper
MessageAllocationBudgetInsufficient()0x67d6a6b3Allocation's budget is too low for the messageIncrease allocation budget
MessageAllocationsNotEqualBudget()0x9659e275Sum of message allocations does not equal declared budgetMake allocations sum to budget
MessageBudgetExceeded(uint256,uint256)0xd67553bdInternal message consumed more than its budget (attempted, budget)Raise message budget
MessageDeclaredBudgetInsufficient()0x7f295162Declared message budget is below requiredIncrease declared budget
MessageEmissionPhaseMismatch()0x5ca1f1d8message.onAcceptance differs from allocation.onAcceptanceAlign emission phase flags
MessageFeeParamsMismatch()0x67b02b3bMessage fee parameters do not match allocation/commitmentAlign fee params
MessageFeesReportMismatch()0x86515990Reported per-message fees differ from expectedCorrect the fee report
MessageFeesTotalMustBeNonZero()0xf79991cbSum of message fees is zero when it must be positiveProvide non-zero message fees
MessageNoMatchingAllocation()0x4e4b3c38An emitted message has no matching fee allocationAdd a matching allocation
OnlyConsensusCanCall()0x6c6fe28aFee-management function callable only by consensusOnly consensus may call
OnlyFeeManager()0x8f1dbd6cCaller is not the fee managerOnly fee manager may call
RollupBudgetBelowFloor()0xa70732eeRollup/L1 gas budget is below the enforced floorIncrease rollup budget
TooManyMessages()0x1ec0b2f7Number of messages exceeds the allowed maximumEmit fewer messages

Staking (114)

ErrorSelectorMeaningCommon cause / fix
AccountsArrayEmpty()0xb1d0b181GEN distribution accounts array is emptyProvide at least one account
AllValidatorsConsumed()0x54055ab9All validators have been consumed (test mock)Wait for next selection
AlreadyRevoked()0x905e7107Vesting already revokedNo re-revocation
AlreadyUnlocked()0x5090d6c6Vesting tokens already unlockedNo re-unlock
AmountMustBeGreaterThan0()0x35f61689Amount must be greater than zeroSend a positive amount
BurnTransferFailed()0xaac1169bBurn transfer failedCheck burn path/balance
CanOnlyTriggerInflationMaxEpochsInFuture()0xdfaaa5b2Inflation trigger is too far in the futureTrigger within the allowed horizon
CanOnlyTriggerInflationMaxTenEpochsInFuture()0xa9f9ed6cInflation trigger limited to at most ten epochs aheadTrigger within ten epochs
DeepthoughtCallFailed()0xbd5ac82fCall to the Deepthought contract failedCheck Deepthought address/target
DelegatorBelowMinimumStake()0x944516fcDelegator stake is below the minimumIncrease delegation
DelegatorExitExceedsShares()0x64d3ea58Exit amount exceeds the delegator's sharesExit at most held shares
DelegatorExitWouldBeBelowMinimum()0x5f9ff6b2Partial exit would drop stake below minimumExit fully or less
DelegatorMayNotExitWithZeroShares()0x161fa299Cannot exit with zero sharesHold shares before exiting
DelegatorMayNotJoinTwoValidatorsSimultaneously()0x48a6b5baDelegator may back only one validator at a timeExit current validator first
DelegatorMayNotJoinWithZeroValue()0xba5cb6d8Delegation requires non-zero valueSend a non-zero amount
DelegatorMustExitAllWhenBelowMinimum()0x44d4da44Must fully exit when below minimum stakePerform a full exit
DeveloperAlreadyHasNFT()0xa74b28d1Developer already holds a reward NFTOne NFT per developer
DeveloperCannotBeZeroAddress()0x7e3f46bdDeveloper address is the zero addressProvide a valid developer
DeveloperHasNoNFT()0x70849322Developer holds no reward NFTMint/assign an NFT first
DeveloperHasNoRewards()0xdf6b47b0Developer has no claimable rewardsNothing to claim
EpochAdvanceNotReady()0xe7295fedConditions to advance the epoch are not metWait until advance conditions hold
EpochAlreadyFinalized()0x3366263cEpoch is already finalizedNo re-finalization
EpochNotFinalized()0x8cf75707Epoch is not finalizedFinalize the epoch first
EpochNotFinished()0xec766557Epoch has not finished yetWait for epoch end
FacetCallFailed(bytes)0xcf582143Diamond facet delegatecall failed (reason)Inspect returned reason
FailedTransfer(address)0x3f32e1ddToken/ETH transfer to a validator failed (validator)Check recipient/balance
FailedTransferCall()0x3825f587Reward/transfer call failedCheck recipient/balance
FunctionNotFound(bytes4)0x5416eb98No diamond facet implements this selectorAdd/register the facet
FundingMismatch()0xb84a1afbFunding amount does not match expectedFund the exact expected amount
GhostAlreadyHasNFT()0x36bd0868Ghost contract already has an NFTOne NFT per ghost
GhostCannotBeZeroAddress()0x4d8d14c5Ghost contract address is zeroProvide a valid ghost address
IncentivePercentageTooHigh()0xaf188845Incentive percentage exceeds the allowed capLower the incentive percentage
InflationAlreadyInitialized()0x9ded3b15Inflation already initializedInitialize once only
InflationAlreadyReceived()0x719a0d39Inflation for this period already receivedNo double receipt
InflationInitialized()0x067f34cfInflation-initialized guard trippedOperation not allowed post-init
InflationInvalidAmount()0x3c1f1f16Inflation amount is invalidProvide a valid amount
InflationNotReadyToBeRealized()0x7d8fa225Inflation is not ready to be realizedWait until realizable
InflationRequestFailed()0xced05c45Cross-layer inflation request failedCheck bridge/L2 path
InitialMintAlreadyCalled()0xacf9028dGEN initial mint already executedMint once only
InsufficientBondCustody()0xebab1869Bond custody balance is insufficientEnsure sufficient bond custody
InsufficientContractBalance()0x786e0a99Vesting contract lacks sufficient balanceFund the contract
InsufficientInflationFunds()0x58d77d2aNot enough funds to pay inflationFund inflation reserve
InvalidAtEpoch()0x90dce792Operation is invalid at the current epochRetry at an allowed epoch
InvalidBanPeriod()0xa2fc7bbdBan period parameter is invalidProvide a valid ban period
InvalidCliffUnlockBps()0x7f2d8c3dVesting cliff unlock basis points invalidUse bps within 0..10000
InvalidInflationThresholds()0x4774d828Inflation threshold config is invalidFix inflation thresholds
InvalidL2GasParams()0x21e1b5c9L2 gas parameters are invalidProvide valid L2 gas params
InvalidNumberOfEpochsToClaim()0xb9a8ce44NFT reward epoch-count to claim is invalidUse a valid epoch count
InvalidOperatorAddress()0xeb32d3bfOperator address is invalid or zeroProvide a valid operator
InvalidPeriodDuration()0x9e11b5e6Vesting period duration is invalidProvide a valid duration
InvalidRecipient()0x9c8d2cd2Reward/transfer recipient is invalidProvide a valid recipient
InvalidSlashPercentage()0x37814740Slash percentage is invalidUse a valid slash percentage
L2BaseGasCostQueryFailed()0x7dc9c5e2Failed to query L2 base gas costCheck L2 gas oracle/bridge
L2MessageAlreadyInvoked()0x21d83750L2 message already invoked (replay guard)Do not re-invoke
L2MessageProvenFailed()0xfd0ae327L2 message proof verification failedProvide a valid proof
L2TransactionRequestFailed()0x1efae811L2 transaction request failedCheck L2 bridge/params
ManualUnlockNotRequired()0x90173285Manual unlock is not required hereUse standard vesting flow
MaxNumberOfValidatorsReached()0x9ce3911dValidator set is at capacityCannot add more validators
MaxValidatorsCannotBeZero()0x83c27a2dmaxValidators config cannot be zeroSet a positive maxValidators
NFTMinterCallFailed()0x64c31e4bCall to the NFT minter failedCheck NFT minter address/target
NFTMinterNotConfigured()0xa0c98f30NFT minter address is not configuredConfigure the NFT minter
NoBurning()0x96191d45Burning is not enabled or not applicableBurning disabled in this config
NoPendingOperator()0x9c2af11fNo pending operator transfer to finalizeInitiate a transfer first
NoPreviousEpoch()0x9fa56a5bNo previous epoch exists (test mock)Only valid after epoch 0
NotBeneficiary()0x644d871fCaller is not the vesting beneficiaryCall from the beneficiary address
NotCreator()0x93687c0bCaller is not the vesting schedule creatorCall from the creator address
NotEnoughValidators()0xae575a88Not enough validators available (test mock)Register more validators
NotNFTOwner()0x4088c61cCaller does not own the NFTCall from the NFT owner
NotRevocable()0x9414820dVesting schedule is not revocableCannot revoke this schedule
NotRevoked()0x73f7ab1eVesting is not revoked but operation requires revoked stateRevoke first
NotRevoker()0x2ad3d44fCaller is not the vesting revokerCall from the revoker address
NoValidatorsAvailable()0xc4e41c46No validators are available (test mock)Register/activate validators
NumberOfValidatorsExceedsAvailable()0x9c637db9Requested count exceeds available validatorsRequest no more than available
OnlyGEN()0x6a10007bCallable only by the GEN token contractOnly GEN may call
OnlyIdleness()0xf2c0764cCallable only by the idleness moduleOnly idleness may call
OnlyIdlenessOrTribunal()0xfcde63e9Callable only by idleness or tribunalRestricted to idleness/tribunal
OnlyStakingContract()0xd807afceCallable only by the staking contractOnly staking may call
OnlyTransactions()0x516257a3Callable only by the transactions moduleOnly transactions may call
OnlyTransactionsOrTribunal()0x6c4db06bCallable only by transactions or tribunalRestricted to transactions/tribunal
OnlyTribunal()0x811befe9Callable only by the tribunalOnly tribunal may call
OperatorAlreadyAssigned()0x5acd21baOperator address already assigned to a validatorUse a free operator address
OperatorTransferNotReady()0xde4e791aOperator transfer timelock not yet elapsedWait for the transfer window
PendingTribunals(uint256)0x773c68a6Epoch has unresolved tribunals blocking finalization (epoch)Resolve tribunals first
PreviousEpochNotFinalizable()0x93b7eb86Previous epoch cannot be finalized yetFinalize prior epoch prerequisites
ReductionFactorCannotBeZero()0x2e980407Burn/inflation reduction factor is zeroSet a non-zero factor
SlashGovernanceDelayPassed()0x06de1175Governance slash delay window has passedAct within the slash window
SlashPercentageTooHigh()0x0edf5154Slash percentage exceeds the capLower the slash percentage
SlashRevokedToRemoveTooHigh(uint256,uint256)0x217f3b2eAmount to remove exceeds revoked stake (revoked, toRemove)Remove at most revoked amount
TotalDistributionMustBe100()0x16904932GEN distribution percentages must sum to 100Fix distribution to total 100
TransferFailed()0x90b8ec18Token or ETH transfer failedCheck recipient/balance
UnauthorizedDelegatorClaim()0xdcc541d1Caller not authorized to claim delegator rewardsClaim from the entitled address
UnauthorizedInflationRequest()0x7d8f3b9eCaller not authorized to request inflationOnly authorized caller may request
UnknownGenAction()0xe43351e0Unknown GEN cross-layer action codeUse a recognized action code
ValidatorAlreadyInTree()0x45be71b6Validator is already in the selection treeDo not re-insert
ValidatorAlreadyJoined()0x71d16bc6Validator has already joinedNo re-join
ValidatorBelowMinimumStake()0x0b294dc3Validator stake is below the minimumTop up validator stake
ValidatorDoesNotExist()0xe51315d2No such validatorReference an existing validator
ValidatorExitExceedsShares()0xfddb7740Exit amount exceeds the validator's sharesExit at most held shares
ValidatorMayNotBeDelegator()0x359b3ac0A validator may not also be a delegatorSeparate the roles
ValidatorMayNotDepositZeroValue()0xffb117c5Validator deposit requires non-zero valueDeposit a positive amount
ValidatorMayNotJoinWithZeroValue()0xd25ef26fValidator join requires non-zero stakeJoin with a positive stake
ValidatorMustNotBeDelegator()0x85d35a02An address cannot be both validator and delegatorSeparate the roles
ValidatorNotActive()0xa6ce15f6Validator exists but is not active this epochWait until validator is active
ValidatorNotInTree()0x8ee72f3fValidator is not in the selection treeInsert validator first
ValidatorNotJoined()0xffc673e8Validator has not joinedJoin before this action
ValidatorsConsumed()0xeae94a56All validators for this round already consumedWait for next round/selection
ValidatorsUnavailable()0xd0b5c3bbValidators are temporarily unavailableRetry when validators are available
ValidatorWithdrawalExceedsStake()0xfb7f2a7fWithdrawal exceeds the staked amountWithdraw at most staked
VestingAlreadyExists()0xe7075d2aA vesting schedule already exists for the targetDo not recreate the schedule
VestingAlreadyStopped()0xd731022dVesting is already stoppedNo re-stop
VestingDeploymentFailed()0x0f5cc9deVesting contract deployment failedCheck beacon/factory params
VestingNotStopped()0x6e32bb06Vesting is not stopped but operation requires stopped stateStop vesting first
WithdrawExceedsVested()0x8b6a4865Withdrawal exceeds the vested amountWithdraw at most vested
ZeroAmount()0x1f2a2005Amount is zeroProvide a non-zero amount

Consensus (100)

ErrorSelectorMeaningCommon cause / fix
AddingTransactionToUndeterminedQueueFailed()0x5bd3cd8cFailed to add tx to the undetermined queueInternal queue operation failed
AllValidatorsCommitted()0xb467acd8All validators have committed (none left)No further commits expected
AppealBondTooLow()0xb44cda7bAppeal bond is below the required amountIncrease appeal bond
AppealNotActive()0x6565b6bfNo appeal is currently activeOnly valid during an active appeal
AppealNotAllowed()0xb94e4c42Appeal not permitted in the current stateTx/round not appealable now
AppealRoundAlreadyExists()0x93a19b27An appeal round already existsDo not re-create the round
AppealRoundNotPermitted()0x6ecc8d59This appeal round is not permittedRound count/config disallows it
BeaconAlreadyDeployed()0xa1900dfeBeacon proxy already deployedDo not redeploy the beacon
BeaconNotDeployed()0x261438caBeacon proxy not deployed yetDeploy the beacon first
CallerNotActivator()0xb56aa94eCaller is not the activatorCall from the activator
CallerNotConsensus()0x47820187Caller is not the consensus contractOnly consensus may call
CallerNotGenConsensus()0xf8beed7dCaller is not GenConsensusOnly GenConsensus may call
CallerNotLeader(address,address)0x3558c9daCaller is not the round leader (leader, caller)Only the current leader may call
CallerNotMessages()0x7e3d1f98Caller is not the messages moduleOnly messages module may call
CallerNotSender()0xf5963d65Caller is not the original tx senderOnly the sender may call
CallerNotTransactions()0xae49b478Caller is not the transactions moduleOnly transactions module may call
CanNotAppeal()0xb39cdfbeThe transaction/state cannot be appealedNot eligible for appeal
EmptyTransaction()0x260c9d62Transaction payload is emptyProvide a non-empty tx
FinalizationNotAllowed()0xe1b3b3b7Finalization is not allowed at this timeWait until finalization is permitted
FinalizationWindowForRevealingNotOpened()0xabc07e66Reveal finalization window is not openWait for the reveal window
FinalizedCountExceedsIssued()0x34bffaeeFinalized count exceeds issued countInternal accounting invariant broke
IdlenessError()0xc35cc440Generic idleness-module error
InsufficientActiveValidators(uint256,uint256)0xb5e5b936Not enough active validators for the request (numValidators, availableValidators)Wait for more active validators
InvalidAppealBond()0xc59a6168Appeal bond value is invalidProvide a valid bond
InvalidAppealRounds()0x2b4f0027Configured appeal-rounds value is invalidSet a valid rounds value
InvalidCommitHash()0x173d238eCommit hash is invalidProvide a valid commit hash
InvalidCommittedValidators()0xcbf18bceCommitted-validators set is invalidCorrect committed validators
InvalidDeploymentWithSalt()0xaceab4a1CREATE2 deployment-with-salt is invalidFix salt/init params
InvalidGhostContract()0x1d41354dGhost contract is invalidTarget a valid ghost contract
InvalidIdleReplacementIndex(address,uint256,uint256)0x4424217aIdle-replacement index mismatch (validator, expected, provided)Provide the expected index
InvalidNumOfValidators()0xc4be27c5Validator count is invalidProvide a valid count
InvalidPhaseTimeoutBounds()0x7cee0061Phase timeout bounds are invalidFix min/max bounds
InvalidProcessingBlock()0xd1ba0787Processing block is invalidUse a valid processing block
InvalidRevealData()0xbc03c4b4Reveal payload is invalidProvide valid reveal data
InvalidRevealLeaderData()0x92c313eeLeader reveal payload is invalidProvide valid leader reveal data
InvalidSender()0xddb5de5eSender is invalidProvide a valid sender
InvalidTimestampType()0x099d113dTimestamp type is invalidProvide a valid timestamp type
InvalidTransactionStatus()0xf8062102Tx status is invalid for this operationAct only in the required status
InvalidTribunalAppealStatus()0x37c1c7d4Tribunal appeal status invalid for this actionAct only in the required status
InvalidTxExecutionHash()0x22a529c0Tx execution hash is invalidProvide the correct execution hash
InvalidValidator()0x682a6e7cValidator is invalidProvide a valid validator
InvalidValidatorsLength()0x5d67a037Validators array length is invalidProvide correct array length
InvalidVote()0xd5dd0c66Vote value is invalidProvide a valid vote
InvalidVoteType()0x8eed55d1Vote type is invalidProvide a valid vote type
LeaderResultHashAlreadySet()0x584764aeLeader result hash has already been setSet the leader result once
MaxNumOfIterationsInPendingQueueReached()0x357bf18bPending-queue iteration cap reachedRetry/continue processing later
MaxNumOfMessagesExceeded(uint256,uint256)0x3838b192Message count exceeds allocation (numOfMessages, maxAllocatedMessages)Emit fewer messages
MockZkSyncBridgeCallFailedToL2()0x9a245636Mock zkSync L2 bridge call failed (test)Test/mock harness failure
NoIdleValidator()0xede1b7ceNo idle validator is availableWait for an idle validator
NonGenVMContract()0xc1ba7c94Target is not a GenVM (ghost) contractTarget a GenVM contract
NoPendingRefund()0xfb093898No pending refund to processNothing to refund
NoRotationsLeft()0xe0bf2581No leader rotations remainingRotation budget exhausted
NoSenderForTransaction()0xa0b18673Transaction has no senderProvide a valid sender
NotConsensus()0x70f64de5Caller is not the consensus contractOnly consensus may call
NotConsensusOrIdleness()0xa82180beCaller is not consensus or idleness moduleRestricted to consensus/idleness
NotConsensusOrIdlenessOrTransactions()0x1e3f968fCaller is not consensus, idleness, or transactions moduleRestricted to those three modules
NotConsensusOrTransactions()0xe6533a27Caller is not consensus or transactions moduleRestricted to consensus/transactions
NotGenConsensus()0xfd9abcdcCaller is not GenConsensusOnly GenConsensus may call
NotIdleness()0x878f6816Caller is not the idleness moduleOnly idleness may call
NoValidatorsFound()0x9b7fa1e5No validators were foundEnsure validators exist
NumOfMessagesIssuedTooHigh()0x5013bc2aNumber of issued messages is too highReduce issued messages
OutOfGas()0x77ebef4dOut-of-gas surfaced as a typed revertIncrease gas limit
PendingQueueFull(address,uint256)0xd48a82a3Recipient's pending message queue is full (recipient, max)Drain queue or wait
PhaseTimeoutOutOfBounds(uint256,uint256,uint256)0xdb0c8dfePhase timeout is outside allowed bounds (value, minBound, maxBound)Use a timeout within bounds
QueueHeadExceedsTail()0x698f39adQueue head index exceeds tail (corruption guard)Internal queue invariant broke
RandomSeedAlreadySet()0x7d6b9724Random seed has already been setSet the seed once only
ReconcileBeyondTail()0x34cf41ddReconcile index is past the queue tailReconcile within valid range
ReconcileNotAdvancing()0x3a1a617cReconcile made no progressNothing to reconcile
RecoverRangeBeyondIssued()0x82eacf35recoverRecipient range is past the issued countUse a range within issued
RecoverRangeInvalid()0xd1402d7erecoverRecipient range is invalidProvide a valid range
RemovingTransactionFromPendingQueueFailed()0x866b818fFailed to remove tx from the pending queueInternal queue operation failed
TransactionAlreadyAccepted()0x7bdaa2b4Transaction has already been acceptedNo re-acceptance
TransactionCanNotBeAddedToAcceptedQueue()0xcdcfa366Tx cannot be added to the accepted queueState disallows enqueue
TransactionCanNotBeAddedToPendingQueue()0x406a3bbbTx cannot be added to the pending queueState disallows enqueue
TransactionCanNotBeAddedToUndeterminedQueue()0x69842b0aTx cannot be added to the undetermined queueState disallows enqueue
TransactionCanNotBeFinalized()0xd9be37caTransaction is not eligible for finalizationNot in a finalizable state
TransactionInRecomputation()0x00ebaa7cTransaction is currently under recomputationWait for recomputation to finish
TransactionNotAcceptedNorUndetermined()0x90cb8b61Transaction is neither accepted nor undeterminedOnly valid in those states
TransactionNotAtAcceptedQueueHead()0x3e714edfTx is not at the head of the accepted queueProcess the head tx first
TransactionNotAtPendingQueueHead()0x0844056aTx is not at the head of the pending queueProcess the head tx first
TransactionNotAtUndeterminedQueueHead()0x3d40531fTx is not at the head of the undetermined queueProcess the head tx first
TransactionNotFinalized()0xe4e81f79Transaction is not finalizedFinalize the tx first
TransactionNotFound()0x31fb878fTransaction not foundReference a valid tx
TransactionNotInPendingQueue()0x7b9ea34fTx is not in the pending queueOnly valid for queued txs
TransactionNotTerminal()0x1d3a409aTransaction is not in a terminal stateOnly valid for terminal txs
TransactionStillValid()0xc4afd8faTransaction is still valid (cannot treat as expired)Wait until it is no longer valid
TribunalAlreadyFinalized()0x6cb27c0fTribunal has already been finalizedNo re-finalization
TribunalNotFound()0x609bbfa8Referenced tribunal does not existReference a valid tribunal
UnfinishedTransactions()0xf082b82dUnfinished transactions block the operationFinish pending txs first
UnfinishedTxCounterUnderflow()0x8894ba94Unfinished-transaction counter underflowedInternal accounting invariant broke
ValidatorAlreadyCommitted()0xf8961aeeValidator has already committedCommit once per round
ValidatorAlreadyRevealed()0x00d6a91bValidator has already revealedReveal once per round
ValidatorAlreadyVoted()0x6e271ebeValidator has already votedVote once per round
ValidatorSelectionFailed()0x1f90236dValidator selection algorithm failedCheck validator set/seed
ValidatorWalletAlreadyDeployed()0xb9ceb484Validator wallet already deployedDo not redeploy the wallet
ValidValidatorNotFound()0x1c177f6cNo valid validator was foundEnsure eligible validators exist
VoteAlreadyCommitted()0xcf1c5b9cVote has already been committedCommit vote once
VoteAlreadyRevealed()0x3246ac36Vote has already been revealedReveal vote once
WalletDeploymentFailed()0x6e09c9ebValidator wallet deployment failedCheck factory/CREATE2 params
WrongRecomputationTransaction()0x4d1fe80eRecomputation targeted the wrong transactionTarget the correct tx

Governance (9)

ErrorSelectorMeaningCommon cause / fix
CallerNotGovernance()0xf2be30fbCaller is not the governance contractRoute via governance
GovernanceInsufficientValue(uint256,uint256)0xf498db0cmsg.value insufficient for the operation (provided, required)Send the required value
GovernanceInvalidDelay()0xd1132ebcConfigured timelock delay is invalidSet a valid delay
GovernanceOperationExpired(address,bytes4,bytes,uint256,uint256)0x11515806Queued operation expired past its window (target, selector, args, value, expiry)Re-queue the operation
GovernanceOperationNotFound(address,bytes4,bytes,uint256)0x8ff7bbe1Operation not found in the queue (target, selector, args, value)Queue it first
GovernanceOperationPending(address,bytes4,bytes,uint256)0xc7eef27fOperation is already queued/pending (target, selector, args, value)Do not re-queue
GovernanceTargetIsNotAContract(address)0x83e02672Governance target address has no code (target)Target a deployed contract
GovernanceTimelockPending(address,bytes4,bytes,uint256,uint256)0x2189e680Timelock not yet elapsed (target, selector, args, value, eta)Wait until ETA
ZeroValue()0x7c946ed7Value or parameter is zeroProvide a non-zero value

Access (7)

ErrorSelectorMeaningCommon cause / fix
CallerNotAuthorized()0xc183bcefCaller is not authorized for this actionUse an authorized address
CallerNotOwner()0x5cd83192Caller is not the ownerCall from the owner
NotAppealsContract()0xa5a4297bCaller is not the appeals contractOnly the appeals contract may call
NotOperator()0x7c214f04Caller is not an operatorCall from an operator address
NotStaking()0x890fec52Caller is not the staking contractOnly staking may call
Unauthorized()0x82b42900Generic unauthorized callerUse an authorized caller
ZeroAddress(string)0xeac0d389A named address is the zero address (key)Provide a non-zero address

Other (11)

ErrorSelectorMeaningCommon cause / fix
ArrayLengthMismatch()0xa24a13a6Two input arrays have different lengthsMatch array lengths
BatchSizeExceeded(uint256,uint256)0xf80a4845Batch size exceeds the allowed maximum (provided, maximum)Reduce batch size
IndexOutOfBounds()0x4e23d035Array index is out of boundsUse a valid index
InvalidAddress()0xe6c4247bAddress parameter is invalid or zeroProvide a valid address
InvalidNonce()0x756688feNonce is invalid or out of orderUse the correct nonce
InvalidNumber(uint256)0xc5d83cdeGeneric numeric-validation failure (number)Provide a value in range
InvalidOffset()0x01da1572Pagination offset is invalidUse a valid offset
InvalidPageSize()0xe5b7db2ePagination page size is invalidUse a valid page size
InvalidVersion()0xa9146eebVersion mismatchMatch the expected version
PercentageOutOfRange(uint256)0xafd5d0b0Percentage value is out of the allowed range (value)Provide a valid percentage
ZeroTotalWeight()0x098404deTotal weight is zero (test mock)Ensure non-zero total weight