Skip to content

Add --action verify to decouple proof verification measurements#260

Merged
jsign merged 4 commits intomasterfrom
jsign-verif-measurement
Feb 13, 2026
Merged

Add --action verify to decouple proof verification measurements#260
jsign merged 4 commits intomasterfrom
jsign-verif-measurement

Conversation

@jsign
Copy link
Collaborator

@jsign jsign commented Feb 12, 2026

This PR add s adecoupled proof verification with a new action --action verify

  • Add --action verify to verify pre-generated proofs from a local folder or remote .tar.gz URL, enabling a decoupled prove/verify workflow across different machines
  • Add --save-proofs <folder> flag to persist proof artifacts during --action prove runs
  • When --action verify is used, support --proofs-folder or --proofs-url flags to load proofs for verification from local disk or a remote archive
  • Add VerificationMetrics to the metrics crate for standalone verification reporting
  • Add warmup pass before verification to discount zkVM setup overhead

This enables a two-step workflow:

  • Prove on a powerful machine: --action prove --save-proofs my-proofs generates and saves proof files organized by execution-client/zkvm version
  • Verify on a different machine: --action verify --proofs-folder my-proofs (or --proofs-url https://...tar.gz) loads and verifies the proofs, recording verification time and proof size.

If you want to give a shot to 50 mainnet proofs I created with the 8x5090, you can do:

RUST_LOG=info cargo run --release -p ere-hosts -- --zkvms zisk --zkvms openvm --zkvms sp1 --zkvms risc0 --action verify --proofs-url https://github.com/jsign/artifacts/releases/download/v0.0.1/zkevm-proofs-50-mainnet.tar.gz  stateless-validator --execution-client reth

since I uploaded the generated proofs in some repo -- mostly to make it easy to measure verification time in a EIP-7870 machine without having to move the proofs there or similar.

I'll create a dashboard with measurements as we did for proving times, so we have a single place to track these numbers.

Comment on lines +43 to +54
// Warmup pass: verify the first proof to warm up the zkVM setup (if any).
if let Some(first) = proof_entries.first() {
info!(
"Warmup: verifying {} (result will be discarded)",
first.path().display()
);
let proof_bytes = fs::read(first.path())
.with_context(|| format!("Failed to read proof from {}", first.path().display()))?;
let proof = ere_zkvm_interface::Proof::new(ProofKind::Compressed, proof_bytes);
let _ = panic::catch_unwind(panic::AssertUnwindSafe(|| zkvm.verify(&proof)));
info!("Warmup complete");
}
Copy link
Collaborator Author

@jsign jsign Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remember the suggestion of using some zisk env whenever we use the cluster mode (i.e. rom setup and similars), but I feel this is a more general approach that can be better to have similar considerations for all zkvms.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sense

@jsign jsign marked this pull request as ready for review February 12, 2026 18:33
@jsign jsign requested a review from han0110 February 12, 2026 18:33
Copy link
Collaborator

@han0110 han0110 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jsign jsign merged commit df07f52 into master Feb 13, 2026
1 check passed
@jsign jsign deleted the jsign-verif-measurement branch February 13, 2026 11:49
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.

2 participants