oasisprotocol / oasisprotocol/oasis-core

Stateless client: failed to fetch light block due to missing signed header

Open
#6,532 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
369
Forks
151
Avg merge
1d 3h
Merged PRs (30d)
6

Description

Follows https://github.com/oasisprotocol/oasis-core/pull/6527.

Problem

Using stateless client node, I run raw sgx rofl on the testnet and encountered the following issue:

{"err":"verification: StringTracer: io error: rpc error: server error: module: unknown code: 1 message: failed to fetch light block for height: 32140178: missing signed header","level":"error","module":"runtime/consensus/cometbft/verifier","msg":"Consensus verifier terminated, aborting","ts":"2026-05-18T22:30:08.489972817Z"}

^^ happens for the ronl component, at the tip of the chain repeatedly.

Possible solution

Stateless client is receiving notification about new blocks from its provider, triggering RHP consensus sync. Then the runtime enclave fetches light block using verifier io, that fetches this block via host from the remote peer, that doesn't have this block available.

On the remote peer light block may not be available due to the following reasons:

  1. Remote peer hasn't received light block yet it only has validator set available for the given height (future height).
  2. Light block is already available (i.e. commit is already part of the blockstore), however mux is still processing, so we treat it as a future height/locally not available (probably a bug, can be improved).

See code: https://github.com/oasisprotocol/oasis-core/blob/b6a87ba24f370845617840a085557ca3c7fd354c/go/consensus/cometbft/full/common.go#L610:L632

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with go/consensus/cometbft/full/common.go around lines 610-632 and trace how the stateless client fetches light blocks after provider notifications trigger RHP consensus sync. Reproduce the raw SGX ROFL failure on testnet if possible, then inspect the remote peer and mux handling for future or locally unavailable heights. Done means the repeated missing signed header failure is prevented or correctly handled at the chain tip.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
blockchain, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.