All articles

colibri.stateless v3.0: Ready for Glamsterdam

colibri.stateless v3.0 brings Glamsterdam support to the stateless client: a new ZK consensus proof, new light-client anchoring and the Amsterdam EVM upgrade. Live on Sepolia, prepared for mainnet.

Steffen Kux

v3.0 gets colibri.stateless ready for Glamsterdam, with a new ZK consensus proof and support for the new block formats on both layers. Just in time for the Sepolia fork.

TL;DR

  • v3.0 supports Glamsterdam, Ethereum's next hard fork, which changes how blocks look on both the consensus and the execution layer.
  • A new ZK consensus proof carries the chain of trust across the fork.
  • Sepolia goes live on schedule. Mainnet follows once the fork epoch is set.
  • Also new: complete eth_getLogs ranges with smaller multi-MPT proofs, a simpler proof layout, and native Node.js bindings that verify BLS signatures faster than WASM.

What Glamsterdam Changes

Glamsterdam combines Amsterdam on the execution layer and Gloas on the consensus layer. The headline feature is enshrined proposer-builder separation (ePBS): building a block and proposing it become two separate steps in the protocol.

Most of the talk around the fork is about validators, builders and gas limits. For a stateless client, the question is simpler: does the data we verify still look the way we expect? After Glamsterdam, it doesn't. The beacon block no longer carries the execution payload, the light-client header changes, the execution header gets new fields, and new SSZ types show up. A client that doesn't follow can't anchor blocks anymore, and every proof built on top of that breaks with it.

A New Light-Client Anchor

The light-client header used to contain a summary of the execution payload. Now it only holds the execution block hash, plus a short Merkle branch that ties it to the beacon chain. colibri.stateless uses this new layout for bootstrap, sync-committee updates and block verification. v3.0 also adds progressive SSZ types, lists and containers without a fixed size limit. Glamsterdam introduces them, and future forks will build on them.

A New ZK Consensus Proof

The ZK consensus proof compresses the history of sync-committee transitions into a single compact proof, so a client can verify the canonical chain from genesis without downloading every step. With the new light-client format, this proof had to be rebuilt. The v3.0 proof follows the Gloas layout and carries the chain of trust across the fork boundary. Verification on the client stays as lightweight as before.

Less Dependent on Beacon Endpoints

After a fork, light-client endpoints on beacon nodes are often incomplete, especially on devnets and testnets. If a node doesn't deliver bootstrap or update data, the prover now builds it itself from state proofs. Verification keeps working while the rest of the infrastructure catches up.

Execution Layer and the Amsterdam EVM Upgrade

The execution header gets two new fields: the block access list hash and the slot number. colibri.stateless handles both depending on the active fork. The slot number also lets the prover find the matching beacon block directly instead of searching for it.

eth_call and transaction simulation now run with the Amsterdam EVM upgrade. That is not a new virtual machine. We updated evmone and turned on the Amsterdam option, which adds the new opcodes. We also built in the EIP-7708 events: protocol-level transfer logs for ETH transfers.

Rollout

We tested v3.0 on the Glamsterdam devnets. Sepolia goes live on schedule with the fork. Mainnet support is already in the code and switches on as soon as the mainnet fork epoch is set. There is no date for that yet.

Also in This Release

  • eth_getLogs completeness: colibri.stateless can now prove that no logs are missing in a requested block range.
  • Multi-MPT proofs: several Merkle-Patricia proofs in one response share the paths they have in common. That overlap is large for eth_getLogs, so the combined proof stays smaller.
  • Simpler proof layout: the SSZ layout of execution proofs was simplified. Separate OP Stack proofs are no longer needed. What remains is a set of extensible proofs for how the block hash is proven.
  • Cached block header: the client keeps the last verified block header. Requests that stay inside the same block reuse it, so the header is sent only once and bandwidth drops.
  • OP Stack: better bindings, Isthmus support and Gloas-ready preconfirmations.
  • More proof data: new fields for blobs, receipts and eth_getProof.
  • Bindings: a Rust crate on crates.io, native Node.js bindings, and continued Dart/Flutter support.
  • Faster BLS in Node.js: the native bindings can use the assembly optimizations in blst. BLS signature verification, which takes most of the time today, is much faster than in the WASM build, which cannot use those optimizations.
  • Host API: a consolidated C interface that makes integration easier.

Get It

v3.0 is out now. Full list of changes: changelog. The repository is open if you want to look at the code or contribute.

Explore Colibri, try the sandbox, or read the developer guide. See also the previous v2.0.0 release. Follow us on X, Telegram, or LinkedIn.


colibri.stateless v3.0: Ready for Glamsterdam — Corpus Core Insights on corpuscore.tech.

Try Colibri — Ethereum stateless client

Verify blockchain data locally with cryptographic proofs. No trusted RPC required.