feat(server): in-process verifier-only zkVM backend (kind: verifier)#61
Open
qu0b wants to merge 1 commit intoeth-act:masterfrom
Open
feat(server): in-process verifier-only zkVM backend (kind: verifier)#61qu0b wants to merge 1 commit intoeth-act:masterfrom
qu0b wants to merge 1 commit intoeth-act:masterfrom
Conversation
Adds `kind: verifier` to zkVMConfig: zkboost links the lightweight ere-verifier-* crate in-process and verifies proofs without an ere-server. The program verifying key (.vk) is downloaded at startup from `program_vk_url` (HTTP or file://); pre-computed .vk files are shipped in eth-act/ere-guests releases alongside the .elf. - Cargo.toml: add ere-verifier-core, ere-verifier-zisk workspace deps pinned to ere v0.8.1 - crates/server: optional ere-verifier-core/zisk deps + verifier-zisk feature, in default features - crates/server/src/proof/verifier.rs: DynVerifier enum (feature-gated per zkVM), per-proof_type construction from program_vk_url, verify via in-process zkVMVerifier - zkVMInstance::Verifier variant; prove returns error, verify dispatches in-process; no worker spawned
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new
kind: verifiertozkVMConfig: zkboost links the lightweightere-verifier-*crate in-process and verifies proofs without spinning up anere-server. The verifying key (.vk) is downloaded at startup fromprogram_vk_url(HTTP orfile://); pre-computed.vkfiles are shipped alongside.elffiles ineth-act/ere-guestsreleases since v0.9.0.This separates the prove and verify code paths in zkboost. A node that only needs to verify proofs (e.g. a beacon node receiving
execution_proofgossip but not generating proofs locally) no longer needs to spin up a per-proof-typeere-server— eliminating the GB-scale prover circuit allocation, GPU pinning, and 24+ GB Docker image footprint.Motivation
ere-serveris monolithic and prover-first (ere/crates/server/cli/src/main.rs:142-159): its only entry point isconstruct_zkvm(elf, resource)which always builds azkVMProver, regardless ofProverResource::{Cpu, Gpu, Cluster}. zkboost forwards bothproveandverifyHTTP calls to ere-server (crates/server/src/proof/zkvm.rs:135-149), so even a node that only needs to verify gossiped proofs ends up running the full prover stack.In a kurtosis devnet measured on an RTX PRO 6000 Blackwell rig (1626 blocks proven, 3252 proofs verified):
The EIP-8025 spec (
consensus-specs/specs/_features/eip8025/p2p-interface.md) treatsproof_typesas a per-node dynamic capability advertisement — every aware node receives every type via gossip and verifies whatever its verifier code can handle. Verification is intended to be light. Today's monolithic ere-server forces the heavy prover footprint onto every node that wants to verify, which is the gap this PR closes.Changes
Cargo.toml: addere-verifier-core,ere-verifier-ziskworkspace deps pinned toere v0.8.1(matching the existingere-server-clientpin).crates/server/Cargo.toml: optional deps +verifier-ziskfeature, included indefault. Adding more zkVMs is a feature-flag addition.crates/server/src/config.rs: newzkVMConfig::Verifier { proof_type, program_vk_url }variant.crates/server/src/proof/verifier.rs(new):DynVerifierenum, feature-gated per zkVM. Constructed fromprogram_vk_url, dispatchesverifytoere-verifier-{kind}::Verifier.crates/server/src/proof/zkvm.rs: newzkVMInstance::Verifiervariant;provereturnsprove not supported for verifier-only zkvm;verifydispatches in-process viaDynVerifier.crates/server/src/server.rs: skip per-zkVM prover worker forVerifiervariants (no proving, no worker).Configuration
program_vk_urlacceptshttps://,http://, orfile://. The bytes are decoded viaere_verifier_*::ProgramVk::decode_from_slice— a 32-byteZiskProgramVkfor ZisK.Test plan
E2E demo on a kurtosis enclave with two zkboost instances:
zkboost-prover:kind: ere→ere-server-reth-ziskon GPU 0zkboost-verifier:kind: verifierforreth-zisk, no ere-serverSame proof type both sides. CL-1 generates and gossips signed proofs; CL-2 receives via gossip, calls
zkboost-verifier'sPOST /v1/execution_proof_verifications. Confirmed byzkboost_verify_total{proof_type="reth-zisk",verified="true"} 3252on the verifier and zero ere-server containers on the verifier side.Launcher and test config: ethpandaops/ethereum-package companion PR: ethpandaops/ethereum-package#1385
Follow-ups (not in this PR)
verifier-sp1,verifier-risc0,verifier-openvm,verifier-airbender. Each is a small feature-flag + match-arm change onceere-verifier-{kind}is plumbed.--proof-typesflag forces both BN gossip subscription AND VC prove-attempt. The VC will hit zkboost's prove path even for a verifier-only deployment. zkboost correctly returnsprove not supported for verifier-only zkvm, so this is a Lighthouse-side flag separation, not a zkboost issue, but worth flagging.