Skip to content

Accept mock proofs with --proof-engine-mock-proofs - #53

Merged
frisitano merged 4 commits into
optional-proofsfrom
feat/proof-engine-zkboost-mock-proofs
Oct 22, 2026
Merged

frisitano merged 4 commits into
optional-proofsfrom
feat/proof-engine-zkboost-mock-proofs

Conversation

@frisitano

@frisitano frisitano commented Oct 13, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

zkboost v0.12.0's kind: mock zkVMs submit an SSZ MockProof { public_values: List[byte], proof: List[byte] } with random proof bytes (eth-act/zkboost#87). The in-process ERE verifiers reject these, so an EIP-8025 devnet with mock proving cannot run against this branch, and every devnet then needs a GPU prover.

This extends the existing MockProofEngine to accept that format and adds a devnet-only flag to select it. The code names it after the format, not zkboost: any prover may send a MockProof, and zkboost is cited once, as the source of the layout.

  • MockProof mirrors zkboost's SSZ container (crates/types/src/execution_proof.rs) with a derived SSZ codec. A layout test pins its encoding to the one zkboost tests.
  • MockProofEngine::accepting_mock_proofs(proof_types) accepts a proof of a configured type when it decodes as a MockProof whose public values equal the SSZ-serialized public input of the proof, the same bytes the ERE path compares. It does not check the proof bytes. A proof of an unconfigured type returns UnconfiguredProofType, matching the ERE engine.
  • ProofEngineConfig::with_mock_proofs() makes build_engine return that mock engine for the configured proof types. The default is all types; a --proof-engine <path> config narrows them.
  • --proof-engine-mock-proofs (requires --proof-engine) enables it and logs a warning.

Prysm optional-proofs has the equivalent --zkvm-mock-proofs. One difference: Prysm also runs a genuine stand-in proof through ERE for each mock proof to keep the verification cost realistic. This PR does not.

Usage (ethereum-package, after ethpandaops/ethereum-package#1492)

participants:
  - el_type: geth
    cl_type: lighthouse
    cl_image: <this branch>
    cl_extra_params:
      - --execution-endpoint=http://zkboost:3000
      - --proof-engine
      - --proof-engine-mock-proofs
additional_services: [zkboost]
zkboost_params:
  image: ghcr.io/eth-act/zkboost/zkboost:0.12.0
  zkvms:
    - kind: mock
      proof_type: ethrex-sp1

Testing

  • cargo test -p proof_engine: 10 passed, including the new mock_proof_layout, mock_proofs_verify_their_public_values and exact_proof_data_mock_rejects_mock_proofs.
  • cargo clippy -p proof_engine --all-targets --no-deps -- -D warnings: clean. Without --no-deps, clippy 1.95 flags enum_variant_names on SszError in execution_layer, which this PR does not touch.
  • Added CLI tests proof_engine_mock_proofs_flag and proof_engine_without_mock_proofs_flag in lighthouse/tests/beacon_node.rs. These are not run locally yet.
  • Kurtosis devnets with Prysm optional-proofs and dapplion/lighthouse eip8025: this node accepted every mock proof from the other clients and they accepted every one of its proofs, with none rejected.

Notes for review

  • book/src/help_bn.md is not regenerated yet. make cli may flag it.
  • The mock lives in test_utils.rs, which is compiled unconditionally. Move it if you'd rather keep devnet code out of that module.

…ck-proofs

zkboost v0.12.0 mock zkVMs emit an SSZ `MockProof { public_values, proof }`
with random proof bytes, which the ERE verifiers reject. Extend
`MockProofEngine` to accept these proofs for the configured proof types when
their public values match the proof's public input, and select it at runtime
with the devnet-only `--proof-engine-mock-proofs` flag. This lets an EIP-8025
devnet run without a GPU prover.
Mirror zkboost's `MockProof { public_values, proof }` and derive its SSZ
codec instead of decoding the two lists by hand. A layout test pins the
encoding to the one zkboost tests.
`--dump-config` round-trips the client config through JSON, so a skipped
`mock_proofs` field read back as false. Serialize it and default it to false
when absent.
The mock proof format comes from zkboost's mock zkVMs, but any prover may send it.
Keep one reference to zkboost's MockProof as the layout's source, and name the API,
flag help, warning and tests after mock proofs.
@frisitano frisitano changed the title Accept zkboost mock proofs with --proof-engine-mock-proofs Accept mock proofs with --proof-engine-mock-proofs Oct 22, 2026
@frisitano
frisitano merged commit e0e4bdc into optional-proofs Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant