Skip to content

feat(e2e): enhance the SNARK test with a prover warmup - #3533

Open
jpraynaud wants to merge 7 commits into
mainfrom
jpraynaud/3390-enhance-e2e-snark
Open

feat(e2e): enhance the SNARK test with a prover warmup#3533
jpraynaud wants to merge 7 commits into
mainfrom
jpraynaud/3390-enhance-e2e-snark

Conversation

@jpraynaud

@jpraynaud jpraynaud commented Sep 10, 2026

Copy link
Copy Markdown
Member

Content

This PR includes the changes that enhance the e2e nightly SNARK scenarios, by warming up the prover setup before the first signing round:

  • Warm up the aggregate signature prover when the aggregator starts, in the background, so the first signing round no longer materializes the setup inside its own aggregation.
  • Hand out the dual genesis key bundles for Lagrange on the node versions that accept them.
  • Run the nightly e2e scenarios from a single CI matrix and build the runner with the same build arguments as the nodes.
  • Shorten the end-to-end SNARK epochs, now that the warmup and the setup reuse take the derivation off the signing path:
    • minimal-snark from 2400 to 600 slots with a 60 s run interval
    • minimal-ivc-snark from 2400 to 900 slots with a 120 s run interval.

Measured on the nightly workflow (run 34484111857):

job epoch length before after
minimal-snark 2400 to 600 slots 4h+ 1h01m
minimal-ivc-snark 2400 to 900 slots 4h+ 1h31m

Pre-submit checklist

  • Branch
    • Tests are provided (if possible)
    • Crates versions are updated (if relevant)
    • CHANGELOG file is updated (if relevant)
    • Commit sequence broadly makes sense
    • Key commits have useful messages
  • PR
    • All check jobs of the CI have succeeded
    • Self-reviewed the diff
    • Useful pull request description
    • Reviewer requested

Issue(s)

Closes #3390

@jpraynaud jpraynaud self-assigned this Sep 10, 2026
@jpraynaud
jpraynaud added this pull request to stack #3534 September 10, 2026 16:04
@jpraynaud
jpraynaud requested a lite review from Copilot September 10, 2026 16:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

One or more issues must be addressed before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Enhances nightly SNARK e2e scenarios with prover warmup, dual genesis keys, and a unified CI matrix.

Changes:

  • Adds background SNARK setup warming.
  • Selects compatible legacy or dual genesis keys.
  • Enables SNARK scenarios with shorter epochs and shared build arguments.
File summaries
File Description
mithril-test-lab/mithril-end-to-end/src/stress_test/aggregator_helpers.rs Updated as part of this pull request.
mithril-test-lab/mithril-end-to-end/src/mithril/mod.rs Updated as part of this pull request.
mithril-test-lab/mithril-end-to-end/src/mithril/infrastructure.rs Updated as part of this pull request.
mithril-test-lab/mithril-end-to-end/src/mithril/genesis_keys.rs Updated as part of this pull request.
mithril-test-lab/mithril-end-to-end/src/mithril/client.rs Updated as part of this pull request.
mithril-test-lab/mithril-end-to-end/src/mithril/aggregator.rs Updated as part of this pull request.
mithril-test-lab/mithril-end-to-end/src/main.rs Updated as part of this pull request.
mithril-stm/src/proof_system/snark_setup_warmer.rs Updated as part of this pull request.
mithril-stm/src/proof_system/mod.rs Updated as part of this pull request.
mithril-stm/src/lib.rs Updated as part of this pull request.
mithril-common/src/crypto_helper/mod.rs Updated as part of this pull request.
mithril-aggregator/src/commands/serve_command.rs Updated as part of this pull request.
.github/workflows/test-e2e.yml Updated as part of this pull request.
Review details

Suppressed comments (3)

mithril-stm/src/proof_system/snark_setup_warmer.rs:33

  • IvcSnark aggregation calls snark_aggregate_signature_prover first and then ivc_chain_prover, but this branch only warms ivc_setup. The first IVC aggregation therefore still materializes the certificate SNARK setup on the signing path, so the warmup does not cover the full cold-start cost. Warm the certificate setup here as well before the IVC setup.
            AggregateSignatureType::IvcSnark => {
                SnarkProverSetupReuse::Enabled.ivc_setup(parameters)?;
            }

mithril-test-lab/mithril-end-to-end/src/mithril/aggregator.rs:50

  • Because this public config field is newly introduced, it needs a doc comment under the repository's public-API documentation rule. Without one, the new genesis_keys field is undocumented while being exposed as part of AggregatorConfig.
    pub genesis_keys: GenesisKeys,

mithril-test-lab/mithril-end-to-end/src/mithril/infrastructure.rs:55

  • Because this public config field is newly introduced, it needs a doc comment under the repository's public-API documentation rule. Without one, this struct is missing documentation for the new genesis_keys field.
    pub genesis_keys: GenesisKeys,
  • Files reviewed: 13/13 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread mithril-test-lab/mithril-end-to-end/src/mithril/genesis_keys.rs Outdated
@github-actions

github-actions Bot commented Sep 10, 2026

Copy link
Copy Markdown

Test Results

     5 files  ± 0     221 suites  ±0   33m 56s ⏱️ - 42m 43s
 3 598 tests  - 33   3 598 ✅  - 33  0 💤 ±0  0 ❌ ±0 
11 736 runs   - 23  11 736 ✅  - 23  0 💤 ±0  0 ❌ ±0 

Results for commit 478b96a. ± Comparison against base commit baaec57.

This pull request removes 39 and adds 6 tests. Note that renamed tests count towards both.
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::index_out_of_bounds
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::index_too_large_for_circuit_range
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::indices_not_increasing
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::leaf_merkle_path_mismatch
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::leaf_swap_keep_merkle_path
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::leaf_wrong_verification_key
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::merkle_path_corrupt_sibling
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::merkle_path_flip_position
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::merkle_path_length_long
mithril-stm ‑ circuits::halo2::tests::golden::cases::negative::slow::merkle_path_length_short
…
mithril-end-to-end ‑ mithril::genesis_keys::tests::debug_output_redacts_the_secret_key
mithril-end-to-end ‑ mithril::genesis_keys::tests::legacy_keys_for_lagrange_on_a_client_not_accepting_dual_keys
mithril-end-to-end ‑ mithril::genesis_keys::tests::legacy_keys_for_lagrange_on_an_aggregator_not_accepting_dual_keys
mithril-end-to-end ‑ mithril::genesis_keys::tests::legacy_keys_for_lagrange_without_the_snark_feature
mithril-end-to-end ‑ mithril::genesis_keys::tests::legacy_keys_for_pythagoras_whatever_the_node_versions
mithril-stm ‑ proof_system::snark_setup_warmer::tests::concatenation_has_no_setup_to_derive

♻️ This comment has been updated with latest results.

@jpraynaud
jpraynaud deployed to testing-2-preview September 10, 2026 16:47 — with GitHub Actions Active
@jpraynaud
jpraynaud deployed to testing-preview September 10, 2026 16:47 — with GitHub Actions Active
Base automatically changed from jpraynaud/3424-cache-warmup to main September 11, 2026 10:44
@jpraynaud
jpraynaud force-pushed the jpraynaud/3390-enhance-e2e-snark branch from 23698b1 to 0fd9a7e Compare September 11, 2026 11:00
@jpraynaud
jpraynaud deployed to testing-preview September 11, 2026 11:26 — with GitHub Actions Active
@jpraynaud
jpraynaud deployed to testing-2-preview September 11, 2026 11:26 — with GitHub Actions Active
The dual bundles are handed out when a Lagrange era is run, the runner is built
with the SNARK feature and the node versions accept them, legacy keys otherwise.
…regation

The warmer loads the setups into the process-wide cache the provers read, so a
node can pay for them before its first signing round.
The prover setup is warmed up on a thread of its own when the node starts, so the
first signing round does not pay for it inside its aggregation.
The circuit keys are no longer derived at every aggregation and are materialized
before the signing round, so the epochs no longer have to absorb the setup.
@jpraynaud
jpraynaud force-pushed the jpraynaud/3390-enhance-e2e-snark branch from 0fd9a7e to 478b96a Compare September 11, 2026 15:59
@jpraynaud
jpraynaud marked this pull request as ready for review September 11, 2026 16:01
@jpraynaud
jpraynaud deployed to testing-2-preview September 11, 2026 17:06 — with GitHub Actions Active
@jpraynaud
jpraynaud deployed to testing-preview September 11, 2026 17:06 — with GitHub Actions Active
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.

Enhance end-to-end tests for IVC SNARK

2 participants