pq-devnet-4 · in progress

Consensus
written to be read.

gean is a Go consensus client for Lean Ethereum, built around the idea that protocol simplicity is a security property — readable, auditable, verifiable end-to-end.

82+ stargazers
MIT license
Go 1.22
gean ~ node-0
$ make build
$ ./bin/gean \
    --genesis config.yaml \
    --bootnodes nodes.yaml \
    --validator-keys keys \
    --node-id node0

[info] gean started. listening on :9000
[info] ENR · 0xa4f…b2c · peers 12
[ok]   finalized slot 2,418,021 in 3.2s
— Capabilities

Built for security, designed for developers.

Commitments expressed in the codebase you can read today — not a roadmap of intentions. Each is a constraint we hold ourselves to.

  1. 01

    Post-Quantum Signatures

    Post-quantum signature scheme — cryptographic security against quantum threats.

  2. 02

    Sub-Second Finality

    3SF-mini for finality and LMD GHOST as fork-choice algorithm — finality in seconds.

  3. 03

    Checkpoint Sync

    Checkpoint sync, attestation subnets, and an optional aggregator role.

  4. 04

    Persistent Storage

    Pebble DB for fast, durable state persistence.

  5. 05

    Cross-Client Interop

    Tested against zeam, ream, lantern, and ethlambda via lean-quickstart.

— Philosophy

Protocol simplicity is a security property.

A consensus client should be something a developer can read, understand, and verify without trusting a small class of experts. If you can’t inspect it end-to-end, it’s not fully yours.

Read the source
  1. 01

    Readable over clever

    Code is written so someone unfamiliar with the codebase can follow it. Naming is explicit. Control flow is linear where possible.

  2. 02

    Minimal dependencies

    Fewer imports means fewer things to break, audit, and understand.

  3. 03

    No premature abstraction

    Interfaces and generics are introduced when the duplication is real, not when it is hypothetical. Concrete types until proven otherwise.

  4. 04

    Flat and direct

    Avoid deep package hierarchies and layers of indirection. A function should do what its name says, and you should find it quickly.

  5. 05

    Concurrency only where necessary

    Go makes concurrency easy to write and hard to reason about. We use it at the boundaries and keep the core logic sequential and deterministic.

— Current status

PQ Interop · devnet progress

Working on pq-devnet-4 · next pq-devnet-5
History
Oct 2025

pq-devnet-0Completed

leanSpec@4b750f2
  • Multi-client devnet harness
    Bootstrap multi-client devnet harness and baseline tooling
  • Baseline interop trials
    4s slots, QUIC, Gossipsub v1.0 — initial interop sweep
  • Apply modified 3SF-mini consensus
    Wire up 3SF-mini fork-choice & finality variant
Dec 2025

pq-devnet-1Completed

leanSpec@050fa4a, leanSig@f10dcbe
  • Consensus envelope pipeline
    SignedAttestation, SignedBlockWithAttestation, proposer-attestation ordering, signed storage/sync path
  • XMSS/leanSig integration
    CGo bindings, key management, signing, verification
  • Baseline PQ performance metrics
    Initial measurements for PQ signing & verification cost
  • Cross-client interop
    Multi-client devnet compatibility testing
Jan 2026

pq-devnet-2Completed

leanSpec@4edcf7b, leanSig@73bedc2, leanMultisig@e447413
  • Consensus envelope pipeline
    SignedAttestation, SignedBlockWithAttestation, proposer-attestation ordering, signed storage/sync path
  • XMSS / leanSig / leanMultisig integration
    CGo bindings, key management, signing, verification, signature aggregation
  • Persistent storage
    Pebble-backed persistent storage layer
  • PQ aggregation performance
    Baseline performance metrics for PQ signature aggregation
Feb 2026

pq-devnet-3Completed

leanSpec@TBD, leanSig@TBD, leanMultisig@TBD
  • Aggregator role decoupling
    Separate aggregator role from block production, new is_aggregator ENR field, validator-config.yaml updates
  • Attestation subnet networking
    attestation_{subnet_id} gossipsub topic, aggregation gossipsub topic, subnet assignment by validator_id % subnets_count
  • Aggregated signature propagation
    Aggregators collect and aggregate attestations, propagate to aggregation topic, proposer includes aggregates in blocks
  • Slot interval restructuring
    5 intervals × 800ms (build & propagate, attest, aggregate, update safe target, accept attestations)
  • Cross-client interop
    Multi-client devnet with 5 initial validators (1 per client), north star target of 128 validators
Active

pq-devnet-4Active

leanSpec@TBD, leanSig@TBD, leanMultisig@TBD
  • Recursive PQ signature aggregation
    Enable recursive PQ signature aggregation using leanVm for efficient proof composition
  • Aggregate coalescing
    Coalesce multiple aggregates for the same message into one final aggregate
  • Single aggregate per message in blocks
    Ensure blocks contain a single aggregate per message instead of multiple aggregates
Planned

pq-devnet-5Planned

  • Block-level proof aggregation
    Aggregate all block proofs — including the block signature — into a single block-level proof to reduce overall block size
  • Goldfish underlay fork-choice
    Replace 3SF-mini with Goldfish as the underlay fork-choice protocol, including Goldfish vote production and propagation
  • Multi-message aggregation (Type 1 & Type 2)
    Type 1 — single-message, single-slot recursive aggregation; Type 2 — aggregation across distinct (message, slot) pairs
  • Deterministic committee selection
    committee(slot) = proposer_validator(slot) + next N validators, derived from the proposer index per slot
  • Delayed Goldfish vote inclusion
    Slot s — committee signs votes; s+1 — votes drive fork choice; s+2 — aggregates included in the block
  • Depth-based placeholder finality
    Ship a naïve depth-based finality rule as a temporary placeholder, then iterate toward a proper overlay finality gadget