Goal
Make the Evolve STF provable inside a zkVM. The end state: a prover takes a block + witness artifact, executes the STF inside a zkVM (Jolt, RISC Zero, or SP1), and produces a proof that any verifier can check — enabling trustless light clients, rollup settlement, and bridging.
Scope
1. Deterministic STF & Read-Trace Plumbing
2. Storage Provability
The storage layer needs to support authenticated reads so a verifier can confirm the STF operated on correct pre-state.
3. Witness Generation Pipeline
4. zkVM Integration — Evaluate & Implement
Evaluate three backends and implement at least one end-to-end:
Jolt
RISC Zero
SP1
Deliverable: Written comparison of all three with recommendation. Implement the winner as first backend.
5. STF Compatibility for zkVM Targets
The STF and its dependencies need to compile to RISC-V / zkVM guest targets. This is likely the largest workstream.
6. Proof Verification & Consensus Integration
7. Testing & Fixtures
Design Considerations
no_std boundary: The proving path must be no_std compatible. This means the STF, storage access layer (via witness), and all codec/crypto must work without the standard library. Everything outside the proving boundary (witness generation, proof serialization, RPC) can remain std.
- Precompiles matter: SP1 and RISC Zero provide accelerated precompiles for keccak256 and secp256k1. Since Evolve uses both for ETH compatibility, precompile support significantly reduces proving cost. This may be the deciding factor between backends.
- Sequential execution: zkVMs execute sequentially. The STF's
rayon-based parallel tx validation must be gated out in the proving path.
- Witness size: Each proven block needs its full read witness. Proof of a block touching 10K keys with 1KB avg proof per key = ~10MB witness. Need to benchmark and potentially batch/compress.
- Incremental approach: Ship placeholder proofs first (the infrastructure), then swap in real proofs. This lets us validate the pipeline end-to-end before optimizing proving performance.
Success Criteria
- A guest program compiles Evolve's STF to a zkVM target (at least one of Jolt/RISC Zero/SP1).
- Given a block and its witness artifact, the prover generates a valid proof.
- The verifier confirms the proof matches the expected public inputs (pre-state root, post-state root, tx commitments).
- Fixture tests prevent regression on witness/proof format compatibility.
- Written evaluation of all three zkVM backends with benchmarks.
References
Goal
Make the Evolve STF provable inside a zkVM. The end state: a prover takes a block + witness artifact, executes the STF inside a zkVM (Jolt, RISC Zero, or SP1), and produces a proof that any verifier can check — enabling trustless light clients, rollup settlement, and bridging.
Scope
1. Deterministic STF & Read-Trace Plumbing
ExecutionState(read_keys(),base_read_keys())stf_traits(ReplayWitnessEnvelope,BlockReadWitness,ReadWitnessEntry,ReadProofEnvelope)ReadProofProviderandReadProofVerifiertraitsreplay_block_strict/replay_block_strict_from_artifactSTF APIs2. Storage Provability
The storage layer needs to support authenticated reads so a verifier can confirm the STF operated on correct pre-state.
ReadProofProviderfor the current storage backend (inclusion + exclusion proofs)ReadProofEnvelope::V1) with canonical borsh encoding3. Witness Generation Pipeline
ReplayWitnessEnvelopeduring block execution4. zkVM Integration — Evaluate & Implement
Evaluate three backends and implement at least one end-to-end:
Jolt
RISC Zero
risc0-zkvmguest SDK constraints (no_std, memory limits, syscall support)SP1
Deliverable: Written comparison of all three with recommendation. Implement the winner as first backend.
replay_block_strict_from_artifact, commits public inputs5. STF Compatibility for zkVM Targets
The STF and its dependencies need to compile to RISC-V / zkVM guest targets. This is likely the largest workstream.
no_stdcompatibilityrayonparallel execution out of proving path (sequential execution required in zkVM)zk-guestfeature flag that strips the STF to only what's needed inside the proverriscv32im-risc0-zkvm-elfor equivalent target6. Proof Verification & Consensus Integration
ProofBundleV1with backend, public inputs, proof bytes)7. Testing & Fixtures
Design Considerations
no_stdboundary: The proving path must beno_stdcompatible. This means the STF, storage access layer (via witness), and all codec/crypto must work without the standard library. Everything outside the proving boundary (witness generation, proof serialization, RPC) can remainstd.rayon-based parallel tx validation must be gated out in the proving path.Success Criteria
References