Goal
Integrate Commonware as the native consensus and P2P layer for Evolve. Deliver a new bin/cvd binary that runs a fully self-contained Evolve chain with BFT consensus, authenticated P2P networking, and validator management — no external consensus process required.
The success criteria: a user can spin up a multi-validator Evolve chain using cvd with Commonware consensus out of the box.
Reference Implementations
- Alto — Minimal blockchain built on Commonware. Shows the clean wiring pattern:
Application trait impl -> simplex consensus -> marshal -> P2P channels -> archive storage. Alto has no application-layer state (no STF, no smart contracts), so it's the baseline for understanding Commonware's component model.
- Tempo — Production payment chain using Commonware consensus + Reth EVM execution. Shows how to bridge an execution engine (Reth) with Commonware consensus in a dual-runtime architecture. Relevant patterns: subblock gossip, DKG coordination, payload builder integration, consensus/execution bridge.
Current State
Evolve currently has two binaries:
evd — Execution node exposing gRPC for an external consensus process (ev-node). No native P2P or consensus.
testapp — Dev-mode binary with DevConsensus (mock block production, single node, no P2P).
Both use commonware-runtime for the async runtime but nothing else from Commonware.
Scope
1. Commonware Application Trait — Evolve Adapter
Bridge Evolve's STF with Commonware's consensus interface.
2. P2P Networking
Wire Commonware's authenticated P2P for validator communication and transaction gossip.
3. Consensus Engine Wiring
Set up Commonware's simplex BFT consensus.
4. Validator Management
5. Block Production & Execution Pipeline
Connect consensus finalization to Evolve's STF execution.
6. Storage & Persistence
7. bin/cvd Binary
The new binary that ties everything together.
8. Follower / Archive Node
9. Missing Features Gap Analysis
Features needed for a production chain that neither evd nor testapp currently provide:
Design Considerations
- Single runtime vs. dual runtime: Alto uses a single Commonware runtime. Tempo uses two (Commonware for consensus, Tokio for Reth execution). Evolve's STF is synchronous and fast, so a single Commonware runtime (which wraps Tokio) should work. The STF executes on finalization callbacks, not in a separate runtime.
- Block execution timing: Execute blocks on finalization (not on notarization). This matches Alto's pattern and ensures only finalized state is committed.
- Namespace separation: Use a unique namespace (e.g.,
b"_EVOLVE") for signing domain separation, preventing signature replay across chains.
- Transaction gossip: This is the biggest gap vs. Alto. Evolve needs a dedicated P2P channel for mempool transaction propagation. The leader builds blocks from its local mempool, so all validators need to see pending transactions.
- Feature parity with evd:
cvd should support everything evd does (JSON-RPC, block indexing, ETH tx format) plus native consensus. evd remains for external consensus deployments.
Success Criteria
cvd keygen generates validator keys (Ed25519 + BLS12-381).
cvd init produces genesis config for N validators.
cvd run starts a validator node that participates in BFT consensus with peers.
- A 4-validator testnet produces blocks, finalizes them, and serves JSON-RPC queries.
cvd follow syncs a follower node from the validator set.
- Transactions submitted via JSON-RPC to any validator are gossiped and included in blocks.
- The chain survives 1 validator going offline (BFT tolerance: f < n/3).
References
- Commonware Monorepo — All primitives (consensus, p2p, storage, crypto, runtime)
- Alto — Minimal reference chain (simplex consensus, BLS12-381, archive storage)
- Tempo — Production chain showing execution/consensus bridge pattern
- Commonware Consensus Docs — Simplex, aggregation, marshal, Application/Automaton traits
Goal
Integrate Commonware as the native consensus and P2P layer for Evolve. Deliver a new
bin/cvdbinary that runs a fully self-contained Evolve chain with BFT consensus, authenticated P2P networking, and validator management — no external consensus process required.The success criteria: a user can spin up a multi-validator Evolve chain using
cvdwith Commonware consensus out of the box.Reference Implementations
Applicationtrait impl -> simplex consensus -> marshal -> P2P channels -> archive storage. Alto has no application-layer state (no STF, no smart contracts), so it's the baseline for understanding Commonware's component model.Current State
Evolve currently has two binaries:
evd— Execution node exposing gRPC for an external consensus process (ev-node). No native P2P or consensus.testapp— Dev-mode binary withDevConsensus(mock block production, single node, no P2P).Both use
commonware-runtimefor the async runtime but nothing else from Commonware.Scope
1. Commonware Application Trait — Evolve Adapter
Bridge Evolve's STF with Commonware's consensus interface.
commonware_consensus::Applicationfor Evolvegenesis()— Return genesis block from Evolve's genesis flowpropose()— Build a block from mempool transactions using Evolve'sBlockBuilder+ STFBlockwith Commonware'sHeightable,Committable,Digestiblecommonware_consensus::VerifyingApplicationverify()— Validate proposed block (timestamp monotonicity, parent chain, tx validity)Reporterfor finalization callbackscommonware_codec::{Encode, Decode}for Evolve's block type (or use RLP/borsh bridge)2. P2P Networking
Wire Commonware's authenticated P2P for validator communication and transaction gossip.
commonware-p2p::authenticated::Networkwith Ed25519 validator identities3. Consensus Engine Wiring
Set up Commonware's simplex BFT consensus.
commonware_consensus::simplex::Enginewith Evolve's Application implvrf::Schemepattern)commonware_broadcast::buffered::Enginefor message bufferingcommonware_consensus::marshal::Actorfor ordered finalized block deliverycommonware_resolverfor block fetching during sync4. Validator Management
cvd keygen)5. Block Production & Execution Pipeline
Connect consensus finalization to Evolve's STF execution.
6. Storage & Persistence
ChainState)7.
bin/cvdBinaryThe new binary that ties everything together.
cvd run— Start a validator nodecvd init— Initialize genesis and generate configcvd keygen— Generate validator keypaircvd follow— Run a follower/archive node (no consensus participation)8. Follower / Archive Node
cvd follow) that syncs finalized blocks without participating in consensus9. Missing Features Gap Analysis
Features needed for a production chain that neither
evdnortestappcurrently provide:Design Considerations
b"_EVOLVE") for signing domain separation, preventing signature replay across chains.cvdshould support everythingevddoes (JSON-RPC, block indexing, ETH tx format) plus native consensus.evdremains for external consensus deployments.Success Criteria
cvd keygengenerates validator keys (Ed25519 + BLS12-381).cvd initproduces genesis config for N validators.cvd runstarts a validator node that participates in BFT consensus with peers.cvd followsyncs a follower node from the validator set.References