linera-io/linera-protocol · error · ChainClientError

The state of the client is incompatible with the proposed bl

Error message

The state of the client is incompatible with the proposed block: Client state already has a pending block; use the `linera retry-pending-block` command to commit that first

What it means

Error "The state of the client is incompatible with the proposed block: Client state already has a pending block; use the `linera retry-pending-block` command to commit that first" thrown in linera-io/linera-protocol.

Source

Thrown at linera-core/src/client/chain_client/mod.rs:1635

            )
            .chain(operations.into_iter().map(Transaction::ExecuteOperation))
            .collect::<Vec<_>>())
    }

    /// Creates a new pending block and stores it in `proposal_guard`.
    ///
    /// The caller must hold the proposal mutex. The pending proposal is written directly
    /// into the guard so that it is always synchronized with the mutex.
    #[instrument(level = "trace", skip(transactions, blobs, proposal_guard))]
    async fn new_pending_block(
        &self,
        transactions: Vec<Transaction>,
        blobs: Vec<Blob>,
        proposal_guard: &mut Option<PendingProposal>,
    ) -> Result<Block, Error> {
        let identity = self.identity().await?;

        ensure!(
            proposal_guard.is_none(),
            Error::BlockProposalError(
                "Client state already has a pending block; \
                use the `linera retry-pending-block` command to commit that first"
            )
        );
        let info = self.chain_info().await?;
        let timestamp = self.next_timestamp(&transactions, info.timestamp);
        let proposed_block = ProposedBlock {
            epoch: info.epoch,
            chain_id: self.chain_id,
            transactions,
            previous_block_hash: info.block_hash,
            height: info.next_block_height,
            authenticated_owner: Some(identity),
            timestamp,
        };

View on GitHub (pinned to 6c226ddcb3)

Solutions

  1. Run `linera retry-pending-block` to commit the existing pending block, then retry the new block proposal.
  2. If the pending block is no longer desired, clear it with `linera clear-pending-block` (after confirming it can be discarded) before proposing again.
  3. Avoid starting a second proposal while a previous one is still pending; wait for or resolve the first proposal.

When it happens

Trigger: A new block proposal is made while the client state still holds an uncommitted pending block.

Common situations: A previous proposal failed to commit (e.g. network issue); resolve it with `linera retry-pending-block` before proposing again.


AI-assisted analysis of linera-io/linera-protocol@6c226ddcb3 (2026-08-22). Data as JSON: /api/errors/bda18be8d992f40c. Report an issue: GitHub.