Run a Validator
Quarantine Recovery

Quarantine Recovery

Your validator shows as quarantined, banned, or not active, and you need it earning again. This runbook takes you from symptom to fix: diagnose the cause, apply the recovery path for that cause, and escalate only when you actually need to.

For the full model behind these states β€” strikes, quarantine, bans, and slashing β€” see Staking Mechanics: Penalties & Validator Lifecycle.

The short version: most exclusions are temporary and recover on their own. Idleness bans clear after the current + next epoch. Below-minimum validators need a top-up. A validator that simply stopped priming just needs its node priming again. Permanent bans are the only state that does not self-heal β€” and on testnet, none have occurred.

Diagnose the Cause

Before doing anything, find out which state you are in. Run these against your validator wallet address:

# Is my validator in the active set at all?
genlayer staking active-validators
 
# What does the network think of my validator (stake, status, pending ops)?
genlayer staking validator-info 0xYourValidatorWallet...
 
# Am I quarantined?
genlayer staking quarantined-validators
 
# Am I banned β€” and is it temporary (has an end epoch) or permanent?
genlayer staking banned-validators
 
# What epoch are we in? (needed to know when a temporary ban clears)
genlayer staking epoch-info

Match what you find to one of these causes:

SymptomLikely causeGo to
In banned-validators with an end epoch, or in quarantined-validatorsIdleness strikes β†’ temporary ban/quarantineStrikes
validator-info shows stake below 42,000 GENBelow minimum β†’ not activeBelow minimum
Absent from active-validators, not in any ban/quarantine list, stake is fineNot primed, or a version / RPC problemNot primed
In banned-validators flagged permanentDeterministic-violation convictionEscalate
⚠️

Do not top up stake or restart your node blindly. Topping up will not clear an idleness ban, and restarting will not fix a below-minimum stake. Diagnose first, then apply the matching path below.

Cause 1: Idleness Strikes (Quarantine / Temporary Ban)

How you got here: your validator was selected for transactions but didn't respond (commit/reveal) in time, accumulated strikes within one epoch, and hit the strike threshold. That bans it for the current and next epoch. A quarantine tied to a deterministic-violation tribunal behaves similarly but resolves when the tribunal does.

Recovery path β€” wait one epoch, then confirm priming:

  1. Confirm it is idleness-based, not a tribunal quarantine: banned-validators will list an end epoch for an idleness ban. Note that epoch.

  2. Fix the root cause of the misses so it does not immediately recur β€” see Prevent idleness strikes below. Recovering only to be re-banned next epoch helps no one.

  3. Wait for the ban window to pass. Idleness bans clear automatically at the start of the end epoch β€” there is no "unban" you need to call. Use epoch-info to watch the current epoch advance past the end epoch.

  4. Ensure your node primes for the upcoming epoch so it re-enters the active set the moment the ban lifts:

    genlayer staking validator-info 0xYourValidatorWallet...   # verify priming / pending state

    Priming is normally automatic β€” your node calls validatorPrime() each epoch. If it isn't happening, treat it as a not-primed problem in parallel.

You cannot manually clear an idleness ban early β€” it is timed to the epoch boundary. Your job is to (a) stop the misses and (b) make sure the node primes so it rejoins selection automatically. Because strikes reset every epoch, once you fix the underlying cause the counter starts fresh.

Prevent Idleness Strikes

Idleness almost always traces back to the node not answering in time when selected. Check, in rough order of likelihood:

  • Node health / uptime β€” the node was down, restarting, or unreachable during a round it was selected for. Keep it running under a supervisor (systemd, screen/tmux, or the Docker restart: unless-stopped policy from the Setup Guide).
  • LLM provider reachability β€” Intelligent Contract execution needs your configured LLM. If the provider is slow, rate-limited, or the API key expired, the node can miss its response window. Verify with ./bin/genlayernode doctor.
  • GenVM modules β€” the web and llm modules must be running (or genvm.manage_modules: true). If they are down, execution stalls.
  • ZKSync full node / RPC β€” a lagging or unreachable GenLayer-chain RPC means the node can't read state or submit votes in time. Confirm the RPC and WebSocket URLs in config.yaml are healthy.
  • Clock / sync β€” a node behind on sync may act on stale slot information and miss phase deadlines.

Cause 2: Below-Minimum Stake (Not Active)

How you got here: "not active" (or "not participating" in the sense of not being in the active set) because your self-stake fell below the minimum β€” the 42,000 GEN reference minimum for validators. This is distinct from quarantine: you were not penalized, you simply no longer meet the bar for selection. It shows up as a low stake figure in validator-info, and the validator will not appear in any ban or quarantine list.

Recovery path β€” top up, then re-prime:

  1. Deposit enough to get back above the minimum:

    genlayer staking validator-deposit --amount <amount>gen
  2. Let the deposit activate. Deposits follow the epoch +2 activation rule β€” staged one epoch, active the next, and only if validatorPrime() runs in between. Watch it with:

    genlayer staking validator-info 0xYourValidatorWallet...
  3. Confirm priming happens across the activation window so the topped-up stake is committed and the validator re-enters the active set.

⚠️

A top-up is not instant β€” plan for the +2 epoch activation delay before the validator is selectable again. Depositing does nothing for an idleness ban; only use this path when the diagnosis is genuinely below-minimum stake.

Cause 3: Not Primed / Version / RPC

How you got here: the validator meets the minimum and isn't banned, but it's missing from the active set because validatorPrime() wasn't called for the upcoming epoch β€” or the node can't do its job because of a version mismatch or a broken RPC connection. If priming stops, the validator is excluded from the next epoch (no rewards), though its stake is untouched.

Recovery path β€” restore priming:

  1. Verify the node is actually running as a validator, not silently as a full node. This happens when the operator key or validator wallet address is missing from the config β€” the Setup Guide calls this out explicitly. Both must be set.

  2. Run diagnostics:

    ./bin/genlayernode doctor

    This checks consensus-contract accessibility, GenVM module health, LLM connectivity, and ZKSync node reachability β€” the usual reasons priming silently fails.

  3. Check version. Running an outdated node can cause it to fall out of step with the network. List available versions and upgrade if you are behind (see the Upgrade Guide and the Setup Guide download steps).

  4. Confirm RPC / WebSocket connectivity. A lagging or unreachable GenLayer-chain RPC prevents the node from priming on time. Verify the genlayerchainrpcurl and genlayerchainwebsocketurl values in config.yaml.

  5. If priming must be nudged manually, it is permissionless β€” anyone can prime a validator:

    genlayer staking validator-prime --validator 0xYourValidatorWallet...

    Longer term, your node should prime automatically every epoch; a manual prime is a stopgap, not a fix for a node that has stopped priming on its own.

Priming is permissionless and incentivized β€” anyone can call it, and whoever primes a validator with a pending slash earns 1% of the slashed amount. This means a healthy validator is normally kept primed by its own node, but the network can also prime it. If yours consistently needs manual priming, the underlying node problem still needs fixing.

When to Escalate

Most states above are self-service. Escalate β€” rather than wait β€” when:

  • banned-validators flags your validator as permanent. A permanent ban comes from a deterministic-violation conviction (provable fraud), not from downtime, and it does not auto-recover. On testnet, no validator has hit permanent ban, so seeing this is unexpected and worth raising with the team. Recovery generally means standing up a new validator; the banned wallet will not come back on its own.
  • A temporary ban does not clear after its end epoch. If epoch-info shows the current epoch has passed the end epoch reported in banned-validators but the validator is still excluded, something is off beyond a normal idleness ban.
  • You've corrected the root cause and still can't re-enter the active set after a full activation window β€” for example, priming succeeds, stake is above minimum, doctor is clean, yet the validator never rejoins active-validators.
  • You suspect an incorrect slash or ban. Bans and slashes carry a 2-epoch governance delay specifically so an incorrect penalty can be reversed before it takes effect. If you believe a penalty is wrong, raise it within that window rather than waiting for it to enact.
🚫

A permanent ban is the one state this runbook cannot walk you out of. If you are genuinely permanently banned, do not wait for a recovery that will not come β€” escalate, and plan to redeploy a fresh validator. Everything else on this page recovers with patience plus the right fix.

Quick Reference

DiagnosisRecoveryAuto-recovers?
Idleness strikes (temporary ban / quarantine)Fix the cause of the misses, wait out current + next epoch, keep primingYes
Deterministic-violation tribunal quarantineWait for tribunal to resolveYes (on resolution)
Below-minimum stake (not active)Top up with validator-deposit, wait +2 epochs, re-primeAfter top-up
Not primedRestore automatic priming; doctor; nudge with validator-prime if neededOnce priming resumes
Version / RPC problemUpgrade node, fix RPC/WebSocket URLs, re-run doctorOnce fixed
Permanent banEscalate; redeploy a new validatorNo

Related Resources