Skip to main content

Consensus — Simplex + Falcon

Quantum replaces Ethereum's proof-of-stake consensus with Simplex, the single-slot-finality BFT protocol from Commonware. Validator votes are signed with Falcon-512, chosen for the smallest PQ signature size on the consensus critical path.

The execution and consensus layers are tightly integrated, communicating directly without an external beacon client.

Why Simplex

The choice is shaped by three constraints:

  1. A short critical path. Simplex reaches notarization in 2 hops and finalization in 3 hops. Sub-second finality on devnet today.
  2. Operational clarity. The protocol is simple enough that operators can reason about leader election, vote dissemination, and fork resolution without an ML-engineering team. A long critical path with deep recursion (DAG-style designs) was rejected.
  3. PQ-friendly byte budget. Simplex's quorum proofs ship validator signatures. With Falcon at ≤ 666 B each, a 100-validator quorum proof is around 44.6 KB — manageable. With ML-DSA-44, the same proof would be roughly 162 KB.

Why Falcon at consensus

Falcon-512 has the smallest signature size among standardized PQ candidates and is selected by NIST for a future standard (FN-DSA / FIPS 206 IPD).

The trade-off is on the signing side: Falcon signing is more complex than ML-DSA (rejection-sampling-based and harder to make constant-time). For the consensus role — server-side validators with controlled environments — this is acceptable. Userland keeps ML-DSA-44 because userland devices are heterogeneous and side-channel-resistant signing matters more than maximum byte efficiency.

Quorum proof scaling

In BFT-style consensus, finality requires a quorum (often 2f+1) of validator approvals. If a quorum proof contains the set of signatures, then:

quorum-proof signature bytes ≥ (2f + 1) × signature_size
+ signer IDs / bitmap + framing overhead

For Falcon-512 (≤ 666 B max):

  • n = 100 ⇒ f = 33 ⇒ 2f+1 = 67 ⇒ ≥ 44,622 bytes (~44.6 KB)
  • n = 200 ⇒ f = 66 ⇒ 2f+1 = 133 ⇒ ≥ 88,578 bytes (~88.6 KB)

This is workable at the validator counts we target today. Future scaling — to hundreds or thousands of validators — likely requires threshold signatures with DKG to compress quorum proofs into a single signature. See "Threshold research" below.

Block lifecycle

The full sequence is:

  1. Propose — Simplex elects a leader. The leader canonicalizes the parent, builds the block payload from the mempool, verifies it locally, and returns the block to Simplex for dissemination.
  2. Verify — Simplex broadcasts the block. Each validator decodes the payload, canonicalizes the parent (fire-and-forget), and verifies the payload against the execution layer. Result: Valid / Accepted, Syncing → bounded retry, or Invalid / Error.
  3. Notarize — Once ≥ 2f+1 validators vote yes, Simplex notarizes. A canonicalize-head update is applied at the execution layer (fire-and-forget — Simplex's voter loop is not blocked).
  4. Finalize — Simplex finalizes. The execution layer applies the forkchoice update with the finalized block hash.

The detailed step-by-step (with mermaid diagrams) lives in Transaction and block lifecycle.

Block header — timestampMillisPart

Quantum block headers wrap a standard Ethereum header and prepend one extra field:

RLP(QuantumHeader) = RLP([timestampMillisPart, ...standard 21 header fields...])
  • timestamp (seconds) — standard, EVM-compatible.
  • timestampMillisPart (u64, 0–999) — sub-second component for consensus ordering.
  • RPC responses include a computed timestampMillis = timestamp * 1000 + timestampMillisPart.

Block hash = keccak256(rlp(QuantumHeader)). Any indexer that recomputes block hashes from standard header fields alone will get mismatches. See Indexer architecture.

Marshal and backfill

Simplex disseminates blocks via the Commonware Marshal layer. For small networks (N = 1) the engine selects marshal::standard; for N ≥ 4 it selects marshal::coding (erasure-coded dissemination). N ∈ {2, 3} is intentionally rejected by localnet init because the Coding variant requires N ≥ 4 and the Standard variant is only meaningful at N = 1.

If a validator falls behind, marshal backfill recovers gaps by fetching the missing blocks from peers.

For dev mode and multi-node localnet setup, see JSON-RPC and dev mode.

Threshold research (post-v1)

We are actively researching post-quantum threshold signatures with DKG to compress quorum proofs into a single signature. The constraints:

  • Must not erase Simplex's fast-path advantages.
  • Must remain side-channel-resistant.
  • Must be implementable in a way that's auditable.

Ringtail is a candidate scheme with message-independent preprocessing and reported signature / communication sizes that scale well at large thresholds. It is explicitly exploratory and benchmark-gated. This is separate from Mithril, which targets institutional custody (≤ 6 parties) and is not suitable for validator-scale quorums.