Conversation
9 tasks
Base automatically changed from
jpraynaud/3148-introduce-circuit-key-registry
to
main
September 9, 2026 16:10
jpraynaud
force-pushed
the
jpraynaud/3148-enforce-circuit-key-registry
branch
3 times, most recently
from
September 14, 2026 13:40
222ca3e to
be3d77c
Compare
jpraynaud
force-pushed
the
jpraynaud/3148-enforce-circuit-key-registry
branch
from
September 14, 2026 16:43
be3d77c to
266575d
Compare
9 tasks
jpraynaud
force-pushed
the
jpraynaud/3148-enforce-circuit-key-registry
branch
from
September 15, 2026 10:27
266575d to
a7c308d
Compare
jpraynaud
removed this pull request from stack #3527
September 15, 2026 10:30
jpraynaud
changed the base branch from
main
to
jpraynaud/3148-prepare-circuit-key-registry
September 15, 2026 10:30
jpraynaud
added this pull request to stack #3542
September 15, 2026 10:31
jpraynaud
force-pushed
the
jpraynaud/3148-enforce-circuit-key-registry
branch
from
September 15, 2026 13:23
a7c308d to
3c09645
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical, moderate, and nit findings remain across configuration, cache enforcement, registry publication, and test coverage.
Get a fresh assessment by requesting another Copilot review.
Review details
Suppressed comments (2)
mithril-client/src/circuit_key_registry.rs:39
- This is an
Option, but withoutdefaultserde treats the field as required. The checked-innetworks.jsoncurrently omits this property, sofilter_map(...ok())drops each entire Cardano environment instead of retaining networks without a registry; even a mixed old/new configuration cannot be resolved. Make the optional field default toNone.
#[serde(rename = "circuit-verification-key-registry")]
circuit_verification_key_registry: Option<UrlReference>,
mithril-client/src/circuit_key_registry.rs:15
with_circuit_verification_key_registry_retrieveris a public customization API, but this module only privately importsCircuitVerificationKeyRegistryRetrieverand the public types in its method signature. Downstream library users cannot name or implement the trait without adding the internal registry crate as a direct dependency. Re-export the trait, retriever error, and signed-registry types from this public module.
use mithril_circuit_key_registry::{
BoundedHttpDownloader, CircuitVerificationKeyRegistryRetriever,
CircuitVerificationKeyRegistryRetrieverError, SignedCircuitVerificationKeyRegistry,
};
- Files reviewed: 32/33 changed files
- Comments generated: 6
- Review effort level: Lite
…verification key A revoked circuit verification key is rejected for every epoch, so the epoch a certificate claims cannot bypass a revocation.
The retriever downloads the signed registry from a URL with a bounded downloader, so a node refreshes the registry itself.
… older refresh A failed refresh, or one yielding a lower registry version, no longer fails the check: the previously verified registry is kept until the next refresh.
Export the circuit key digests, whitelist or revoke a key with a genesis signed registry update, sign a registry and bootstrap one for tests.
Generated with the hidden documentation subcommand of the aggregator.
…se body Read the body chunks in a dedicated function so the limit can be checked on chunks beyond the first one, without a server.
…in HTTP Guards the WASM build, where the client cannot restrict the scheme itself, against a redirect downgrading the download.
A refresh returning the cached registry unchanged counts as a new verification and replaces the cache.
…rameters Inject the digest computation so the naming of each parameter set is tested without deriving a circuit verification key.
Check the circuit verification key digests against the registry certifier before verifying SNARK certificates, on both the standard and the full chain shortcut paths, failing closed when the certifier is missing.
Resolve the registry of the client's network through the published networks configuration, with a CLI parameter reading it from a local file for tests.
…ation Wire the certifier into the certificate verifier and the chain synchronizer when a signed registry file path is configured, so SNARK certificates fail fast at creation when their circuit keys are not certified.
Generate the signed registry on the fly with the devnet genesis key at genesis bootstrap, in the system temporary directory read by default by the aggregators and pointed at by the clients.
…egator Fetch the signed registry from the configured URL into the aggregator stores at provisioning, and redeploy the aggregator when the URL changes.
…yments The URL comes from the CIRCUIT_VERIFICATION_KEY_REGISTRY_URL variable of the GitHub environments, left empty where SNARK certificates are not produced.
Document the circuit-key-registry command and the circuit verification key registry path parameters generated by the doc subcommand.
Cover the registry format, offline signing, publication at the repository root, rotation and the revocation procedure.
jpraynaud
force-pushed
the
jpraynaud/3148-enforce-circuit-key-registry
branch
from
September 22, 2026 09:17
8c87e15 to
13c8f50
Compare
…ng-preview' and 'dev-preview'
This branch was successfully deployed
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.
Content
This PR includes the enforcement of the circuit verification key registry prepared in #3513:
MithrilCertificateVerifierfor theSnarkandIvcSnarkaggregate signature types, on both the standard and the full chain shortcut paths, with a mandatory certifiermithril-clientthrough the publishednetworks.jsonby matching the aggregator endpoint, enabled by default--circuit-verification-key-registry-pathparameter to the client CLI to read the registry from a local file (tests and local deployments)circuit_verification_key_registry_urlparameter selects the registry source, downloaded at every hourly refresh (afile://URL reads a local file), the certificates requiring the registry being rejected without a sourcePre-submit checklist
Issue(s)
Relates to #3148