1+ use std:: sync:: LazyLock ;
2+
13use alloy:: primitives:: Keccak256 ;
24use sp1_aggregation_program:: { ProofInput , SP1ProofInput } ;
35use sp1_sdk:: {
4- HashableKey , Prover , ProverClient , SP1ProofWithPublicValues , SP1Stdin , SP1VerifyingKey ,
6+ EnvProver , HashableKey , Prover , ProverClient , SP1ProofWithPublicValues , SP1Stdin ,
7+ SP1VerifyingKey ,
58} ;
69
710use super :: lib:: { AggregatedProof , ProgramOutput , ProofAggregationError } ;
811
912const PROGRAM_ELF : & [ u8 ] =
1013 include_bytes ! ( "../../aggregation_programs/sp1/elf/sp1_aggregator_program" ) ;
1114
15+ static SP1_PROVER_CLIENT : LazyLock < EnvProver > = LazyLock :: new ( ProverClient :: from_env) ;
16+
1217pub struct SP1ProofWithPubValuesAndElf {
1318 pub proof_with_pub_values : SP1ProofWithPublicValues ,
1419 pub elf : Vec < u8 > ,
@@ -66,7 +71,7 @@ pub(crate) fn aggregate_proofs(
6671 }
6772
6873 #[ cfg( feature = "prove" ) ]
69- let client = ProverClient :: from_env ( ) ;
74+ let client = & * SP1_PROVER_CLIENT ;
7075 // If not in prove mode, create a mock proof via mock client
7176 #[ cfg( not( feature = "prove" ) ) ]
7277 let client = ProverClient :: builder ( ) . mock ( ) . build ( ) ;
@@ -102,7 +107,7 @@ pub enum AlignedSP1VerificationError {
102107pub ( crate ) fn verify (
103108 sp1_proof_with_pub_values_and_elf : & SP1ProofWithPubValuesAndElf ,
104109) -> Result < ( ) , AlignedSP1VerificationError > {
105- let client = ProverClient :: from_env ( ) ;
110+ let client = & * SP1_PROVER_CLIENT ;
106111
107112 let ( _pk, vk) = client. setup ( & sp1_proof_with_pub_values_and_elf. elf ) ;
108113
@@ -122,7 +127,7 @@ pub(crate) fn verify(
122127}
123128
124129pub fn vk_from_elf ( elf : & [ u8 ] ) -> SP1VerifyingKey {
125- let prover = ProverClient :: builder ( ) . cpu ( ) . build ( ) ;
130+ let prover = & * SP1_PROVER_CLIENT ;
126131 let ( _, vk) = prover. setup ( elf) ;
127132 vk
128133}
0 commit comments