@@ -185,7 +185,17 @@ impl IvcSnarkProverSetup {
185185 let parameters_bytes = parameters. to_bytes ( ) ?;
186186 let depth_bytes = merkle_tree_depth. to_le_bytes ( ) ;
187187 let seed_bytes = UNSAFE_SRS_SEED . to_le_bytes ( ) ;
188- let cache = FileMutex :: for_shared_cache (
188+
189+ // The unsafe SRS depends only on its degree and seed, never on the circuit parameters, so it
190+ // is cached independently of them and shared by every parameter set that needs the same degree
191+ // (`TrustedSetupProvider::with_unsafe_srs` itself nests its file by degree under this directory).
192+ let srs_cache = FileMutex :: for_shared_cache ( "unsafe-srs" , & [ & seed_bytes] ) ;
193+ let srs_directory = srs_cache. directory ( ) . to_path_buf ( ) ;
194+ let _srs_cache_lock = srs_cache. lock ( ) ?;
195+ let trusted_setup_provider =
196+ TrustedSetupProvider :: with_unsafe_srs ( & srs_directory, unsafe_srs_degree) ;
197+
198+ let key_cache = FileMutex :: for_shared_cache (
189199 "ivc-setup" ,
190200 & [
191201 NON_RECURSIVE_CIRCUIT_VERIFICATION_KEY_FOR_PRODUCTION ,
@@ -195,12 +205,10 @@ impl IvcSnarkProverSetup {
195205 & seed_bytes,
196206 ] ,
197207 ) ;
198- let cache_directory = cache . directory ( ) . to_path_buf ( ) ;
208+ let cache_directory = key_cache . directory ( ) . to_path_buf ( ) ;
199209 // Serialize cold-start keygen across the parallel slow-test processes.
200- let _key_cache_lock = cache . lock ( ) ?;
210+ let _key_cache_lock = key_cache . lock ( ) ?;
201211
202- let trusted_setup_provider =
203- TrustedSetupProvider :: with_unsafe_srs ( & cache_directory, unsafe_srs_degree) ;
204212 let certificate_provider = KeyProvider :: new (
205213 cache_directory. join ( "certificate" ) ,
206214 "non-recursive" ,
0 commit comments