Skip to Content
Errors Reference

Errors Reference

v1.0.0 — canonical source: src/lib/Errors.sol plus per-contract locals.

This page maps every revert an integrator can observe back to the contract that emits it, the condition that triggers it, and the recovery path. Errors that ship via standard OpenZeppelin paths (OwnableUnauthorizedAccount, OwnableInvalidOwner, InvalidInitialization, ReentrancyGuardReentrantCall) are inherited and not re-documented here — selectors match the upstream library.

How errors are organized

  • src/lib/Errors.sol is the central library shared across the runtime contracts. Most reverts an integrator observes resolve to this library.
  • Per-contract locals live next to the contract that declares them. They cover surface-specific concerns (LP vault staking, genesis sequencing, agent-lens self-call gating).
  • Selector-encoded payloads — a few errors carry an address argument (DelegatedEOAOwner(address), OwnableUnauthorizedAccount(address)). The 4-byte selector plus the encoded address is the full revert payload.

Access control

ErrorReverts fromTrigger
NotAuthorizedMost contractsCaller is not the role expected by the surface (e.g. non-keeper hitting a keeper-only path; non-King calling setCurrentReignRecipients without a delegated permission bit).
OnlyGuardianPause-bearing contractsPause / unpause attempted by a non-guardian caller.
OnlyMineCoreFurnace, ShareholderRoyalties, VeClaimNFTCross-contract callback expected from the canonical MineCore arrived from another caller.
OnlyMineMarketVeClaimNFTveNFT transfer hook invoked from a non-canonical market path.
OnlyShareholderRoyaltiesVeClaimNFTRoyalty-side checkpoint hook invoked from a non-canonical royalty surface.
OnlyClaimAllHelperMineCore, ShareholderRoyaltiesHelper-bundle entrypoint invoked from outside the canonical ClaimAllHelper.

Pause flags

ErrorReverts fromTrigger
TakeoversPausedMineCoreGuardian has set takeoversPaused = true. Mining clamps; refunds and withdrawals stay available. See Security, Guardian, Pausing.
LockingPausedFurnaceGuardian has set lockingPaused = true. Lock-creation and royalty mode=1 paths revert; mode=0 Collect still works.
TradingPausedMarketRouterGuardian has set tradingPaused = true. New listings and escrow execution revert; safety unwind paths (delist, cancel-expired) remain available.

Wiring and EIP-7702 guards

ErrorReverts fromTrigger
WiringMismatchEvery state-changing canonical-bundle callThe runtime cross-check found a stored pointer that no longer agrees with the canonical bundle. Re-verify wiring on the Security page; clients should fail closed.
DelegatedEOAWiring setters and Ownable2Step ownership transfersCandidate address is an EIP-7702 delegated EOA (23-byte runtime starting 0xEF 0x01 0x00).
DelegatedEOAOwner(address)UpgradeableProtocolBase-rooted contracts (MineCore, MarketRouter, ShareholderRoyalties)Same condition as above, surfaced on transferOwnership(newOwner) for the proxy-backed runtime.
NotAContractWiring setters; also covers 7702 case on MineCore and MaintenanceHubCandidate address has code.length == 0.
ZeroAddressWiring setters and many surface callsaddress(0) passed where a live contract is required.
ConfigFrozenAll freeze-gated contractsWiring setter called after the freeze ceremony executed for that contract.
MetadataFrozenVeClaimNFTERC-721 metadata setter called after the metadata freeze.
ShareholderRoyaltiesNotSetFurnaceRoyalty surface not yet wired into the Furnace. Pre-launch only.
PendingEthNotDrainedShareholderRoyaltiesWiring rotation attempted while pendingShareholderETH > 0. Flush first via flushPendingShareholderETH().

Slippage and quote freshness

ErrorReverts fromTrigger
PriceExceededMineCoreCurrent takeover price exceeds maxPrice.
MinVeOutNotMetFurnace, ShareholderRoyalties, LpStakingVault7DResulting veCLAIM under the caller’s minVeOut.
MinVeOutRequiredFurnace (compound paths)Caller passed minVeOut == 0 on a path that mandates an explicit floor.
MinEthOutNotMetMineCore (takeoverWithToken)Token → ETH swap settled below minEthOut.
MinAmountOutNotMetDexAdapterGeneric AMM swap settled below the caller-supplied floor.
MinClaimOutRequiredLpStakingVault7DAuto-compound path requires an explicit minClaimOut.
MinClaimFloorNotMetLpStakingVault7DQuoted CLAIM below the protocol floor.
DeadlineExpiredDexAdapter, swap-wrapping entrypointsBlock timestamp past the swap deadline.
CheckpointStale / VeCheckpointStaleShareholderRoyalties, VeClaimNFTRoyalty flush requires a current ve checkpoint and the bounded checkpoint did not catch up in the same block. Call MineCore.advanceVeCheckpoint() or wait for the next maintenance poke.

Locks (veCLAIM)

ErrorReverts fromTrigger
InvalidDurationFurnace, VeClaimNFTRequested duration outside the [MIN_LOCK_DURATION, MAX_LOCK_DURATION] window.
LockExpiredLock surfaces and MarketRouterAction targets a lock with endTimestamp <= now outside the wait-for-expiry path.
LockListedOrFrozenFurnace, VeClaimNFTAction targets a lock that is currently listed on the Market or frozen by the keeper grace window.
AutoMaxMismatchFurnaceMerge attempted between two locks with incompatible AutoMax flags outside the supported mixed-pair rule.
TooManyVeNFTsVeClaimNFTOwner already holds MAX_LOCKS_PER_USER (32) lock NFTs.
TransfersRestrictedVeClaimNFTERC-721 transfer attempted outside the allow-listed Furnace ↔ MarketRouter paths.
MarketMustTransferToFurnaceVeClaimNFTMarket-routed transfer destination is not the Furnace.

Market (MarketRouter)

ErrorReverts fromTrigger
ListingNotActiveMarketRouterListing already filled, cancelled, or expired.
ListingCooldownMarketRouterRelist attempt inside the post-fill cooldown window.
InvalidListingExpiryMarketRouterListing expiry outside the allowed bounds.
ListingExpiredMarketRouterSettlement attempted on an expired listing outside emergency-delist semantics.
ListingNotExpiredMarketRouterEmergency delist attempted before EMERGENCY_DELIST_DELAY.
EmergencyDelistTooSoonMarketRouterOwner break-glass delist invoked inside the settlement keeper grace window.
OfferNotActiveMarketRouterOffer already filled or cancelled.
OfferExpiredMarketRouterOffer past its TTL.
OfferNotExpiredMarketRouterCancel attempted before TTL elapsed (when only the owner can cancel).
BonusTargetNotConfiguredMarketRouterOffer references a bonus-target gate that was never set.
BonusTargetNotMetMarketRouterFurnace bonus below the offer’s bonusBpsVsPrincipalClaim target.
BudgetTooSmall / BudgetTooHighMarketRouterEscrow budget outside the configured min/max envelope.
InvalidOfferTtl / InvalidOfferExpiryMarketRouterTTL or expiry violates the allowed ranges.
MinLockAmountNotMetMarketRouterOffer settled below the offerer’s minimum lock principal.
DecreaseNotAllowedMarketRouterOffer modification attempted to decrease a parameter that is set-once.
OfferInsufficientFundsMarketRouterOfferer escrow balance insufficient for the requested execution.
DiscountTooHigh / SlippageTooHighMarketRouterSell-now spread exceeded the caller-supplied limit.
SettlementKeeperGracePeriodMarketRouterPublic settlement attempted inside the keeper grace window.

Furnace bonus and LP stream

ErrorReverts fromTrigger
AmountZeroFurnace, LpStakingVault7D, MarketRouterCaller passed amountIn == 0.
AmountTooLarge / AmountTooSmallMultipleAmount outside the surface-specific envelope.
BatchTooLargeBatch surfacesBatch length exceeded the per-call cap.
InvalidModeShareholderRoyaltiesclaimShareholder(mode, ...) called with a mode outside {0, 1}.
LpRewardsVaultFurnaceMismatchFurnaceCandidate LP rewards vault does not back-point to the calling Furnace.
LpRewardsStreamActiveFurnaceWiring rotation attempted while the LP stream still has unclaimed accrual.
EmergencyRewireNotRequested / EmergencyRewireDelayNotMet / EmergencyRewireAlreadyRequestedFurnaceEmergency LP-vault rewire state-machine violation.

Auto-compound (Barons / LP)

ErrorReverts fromTrigger
AutoCompoundNotEnabledShareholderRoyalties, LpStakingVault7DKeeper invoked compound for a user that has not opted in.
AutoCompoundPausedShareholderRoyaltiesUser-level compound paused after a ShareholderAutoCompoundFailed. Re-enable via the explicit unpause surface.
CadenceNotMetKeeper pathsCompound invoked inside the per-user cadence window.
CompoundQuoteFailedShareholderRoyaltiesOff-chain quote handed to the auto-compound path failed validation.
QuoteCallFailedShareholderRoyalties, LpStakingVault7DOnchain quote call to the Furnace / LP quoter reverted. Batch path skips the user instead of pausing.
HarvestQuoteFailedLpStakingVault7DOnchain quote failed during keeper harvest.
CallerQuoteDivergenceLpStakingVault7DCaller-supplied quote diverged from the onchain re-quote outside tolerance.

EntryTokenRegistry and DexAdapter

ErrorReverts fromTrigger
RouterConfigNotSet / WethClaimHopNotSet / WethClaimHopAlreadySetEntryTokenRegistryWiring sequencing violation.
TokenNotEnabledEntryTokenRegistryCaller attempted a swap path through a token the guardian has disabled.
TokenNotConfiguredEntryTokenRegistryToken has no registered route.
UnsafeEntryTokenEntryTokenRegistryToken rejected by the entry-token safety filter.
InvalidToken / InvalidPool / InvalidRouteEntryTokenRegistry, DexAdapterRoute validation failed at admin or runtime.
FactoryMismatch / WrappedNativeMismatch / WrappedNativeImmutable / ClaimTokenImmutableEntryTokenRegistryImmutable wiring constants disagree with the supplied candidate.
ApprovalFailed / TransferFailedDexAdapter, SafeApproveERC-20 approval or transfer call failed or returned false.
ReturnDataTooLargeDexAdapter, low-level wrappersToken implementation returned more bytes than the defensive cap.
InsufficientTokenBalance / InsufficientTokenAllowanceMultipleStandard ERC-20 preconditions.

LP Staking Vault (LpStakingVault7D)

ErrorReverts fromTrigger
InsufficientStakeLpStakingVault7DUnbond / withdraw amount exceeds staked balance.
TooManyUnbondsLpStakingVault7DUser already holds the per-wallet unbond cap.
NotRewardNotifierLpStakingVault7DnotifyRewards invoked from outside the allowlist.
RewardIndexOverflowLpStakingVault7DReward index arithmetic would overflow.
NoFeesToHarvestLpStakingVault7DLP fee harvest invoked with no accrued fees.
DeadlineTooFarLpStakingVault7DAuto-compound deadline beyond the per-surface cap.
LockCooldownLpStakingVault7DAuto-compound destination lock inside its post-action cooldown.

Payments and ETH transport

ErrorReverts fromTrigger
EthTransferFailedMultipleBest-effort ETH send reverted; pull-payment balance was credited on caller-side surfaces.
EthValueMismatchMultiplemsg.value does not match the surface-specific expectation.
InsufficientEthBalanceMultipleInternal pull-payment bucket underflow.

Genesis

ErrorReverts fromTrigger
GenesisWindowNotEnded / GenesisAccrualWindowNotCompleteLaunchController, MineCoreFinalization attempted before GENESIS_ACCRUAL_DURATION elapsed.
GenesisKingClaimNotCollected / GenesisKingClaimAlreadyCollectedLaunchControllerSequencing violation around the one-shot collectGenesisKingClaim step.
GenesisGuardianLockedMineCoreGuardian rotation attempted during the genesis exception window.
GenesisAlreadyFinalizedLaunchControllerSecond finalizeGenesis() call.
GenesisExactSeedRequiredLaunchControllerSupplied seed ETH did not equal requiredSeedEth.
GenesisMustBePausedMineCoreGenesis sequencing requires takeoversPaused == true at the moment of finalization.
GenesisPoolMismatch / GenesisWethMismatchLaunchControllerPool / WETH pin disagrees with the live deployment.
GenesisNoClaimForLiquidityLaunchControllerCollected King CLAIM bucket was empty when seeding.
GenesisLpMintFailed / GenesisLpBalanceMismatchLaunchControllerLP seed arithmetic disagreed with the realized mint.
PoolNotEmpty / PoolDonationRemainsLaunchControllerPool received donations before genesis seeding.

Genesis LP Vault (GenesisLPVault24M)

ErrorReverts fromTrigger
LockAlreadyStarted / LockNotStartedGenesisLPVault24M24-month lock sequencing violation.
NoLpGenesisLPVault24MLock surface invoked with no LP.
OnlyLpWithdrawRecipientGenesisLPVault24MWithdrawal attempted from a non-recipient.
UnlockTimeNotReached / UnlockTimeNotIncreasedGenesisLPVault24MLock extension or withdrawal timing violation.
ExtensionTooLong / ExtensionTooShortGenesisLPVault24MRequested extension outside the configured bounds.
AlreadyWithdrawnGenesisLPVault24MSecond withdrawal attempt against the same epoch.
DustLockGenesisLPVault24MLock principal below the dust floor.
NoTokenToRescueGenesisLPVault24MOwner rescue called against an empty bucket.

Internal invariants

These should never reach an integrator. If you observe one, file a bug.

ErrorNotes
InvariantViolationDefensive cross-check failed inside the runtime.
URITooLongMetadata override exceeded the bounded cap.
SelfCallOnly (AgentLens)Reentrant lens call from outside the lens.

See also