linera-io/linera-protocol · error · WorkerError
Unexpected epoch {epoch}: chain {chain_id} is at {chain_epoc
Error message
Unexpected epoch {epoch}: chain {chain_id} is at {chain_epoch} What it means
Error "Unexpected epoch {epoch}: chain {chain_id} is at {chain_epoch}" thrown in linera-io/linera-protocol.
Source
Thrown at linera-core/src/chain_worker/state.rs:2962
/// Returns the blob IDs whose corresponding value is `None`.
fn missing_blob_ids<'a>(
maybe_blobs: impl IntoIterator<Item = (&'a BlobId, &'a Option<Blob>)>,
) -> Vec<BlobId> {
maybe_blobs
.into_iter()
.filter(|(_, maybe_blob)| maybe_blob.is_none())
.map(|(blob_id, _)| *blob_id)
.collect()
}
/// Returns an error if the block is not at the expected epoch.
fn check_block_epoch(
chain_epoch: Epoch,
block_chain: ChainId,
block_epoch: Epoch,
) -> Result<(), WorkerError> {
ensure!(
block_epoch == chain_epoch,
WorkerError::InvalidEpoch {
chain_id: block_chain,
epoch: block_epoch,
chain_epoch
}
);
Ok(())
}
View on GitHub (pinned to 6c226ddcb3)
Solutions
- Update the local client to the current epoch: run `linera sync` and `linera process-inbox` so the chain epoch matches the committee epoch before resubmitting.
- If the epoch changed due to a validator set rotation, re-run `linera query-validators` / refresh committee info in the wallet and retry.
- Re-check that the message or certificate being handled was created for the current epoch; discard or re-create stale cross-chain messages from an old epoch.
When it happens
Trigger: A certificate or message carries an epoch that differs from the epoch the target chain is currently in, typically around a committee/epoch change.
Common situations: Using a certificate signed by an old validator set after an epoch transition, or querying a chain that has already advanced to a newer epoch.
AI-assisted analysis of linera-io/linera-protocol@6c226ddcb3 (2026-08-22).
Data as JSON: /api/errors/3657b85489e4ec62.
Report an issue: GitHub.