From f1b9b366a736b892757ba27a56cd3c4e06493636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=C5=9Awirski?= Date: Thu, 27 Feb 2025 14:47:45 +0100 Subject: [PATCH] reuse Prover between requests --- bin/proving-service/src/api/mod.rs | 2 +- crates/miden-proving-service-client/src/prover.rs | 2 +- crates/miden-tx/src/prover/mod.rs | 10 ++++++---- crates/miden-tx/src/tests/mod.rs | 2 +- crates/miden-tx/tests/integration/main.rs | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/bin/proving-service/src/api/mod.rs b/bin/proving-service/src/api/mod.rs index bc75b53d3..eb69a6fbb 100644 --- a/bin/proving-service/src/api/mod.rs +++ b/bin/proving-service/src/api/mod.rs @@ -47,7 +47,7 @@ impl ProverApi for ProverRpcApi { request: Request, ) -> Result, tonic::Status> { // Try to acquire a permit without waiting - let prover = self + let mut prover = self .local_prover .try_lock() .map_err(|_| Status::resource_exhausted("Server is busy handling another request"))?; diff --git a/crates/miden-proving-service-client/src/prover.rs b/crates/miden-proving-service-client/src/prover.rs index 58385cbda..03a0bb1a5 100644 --- a/crates/miden-proving-service-client/src/prover.rs +++ b/crates/miden-proving-service-client/src/prover.rs @@ -69,7 +69,7 @@ impl RemoteTransactionProver { #[async_trait::async_trait(?Send)] impl TransactionProver for RemoteTransactionProver { async fn prove( - &self, + &mut self, tx_witness: TransactionWitness, ) -> Result { use miden_objects::utils::Serializable; diff --git a/crates/miden-tx/src/prover/mod.rs b/crates/miden-tx/src/prover/mod.rs index 6d127f8a5..bebdbf97e 100644 --- a/crates/miden-tx/src/prover/mod.rs +++ b/crates/miden-tx/src/prover/mod.rs @@ -31,7 +31,7 @@ pub trait TransactionProver { /// - If the transaction result is corrupt. #[maybe_async] fn prove( - &self, + &mut self, tx_witness: TransactionWitness, ) -> Result; } @@ -43,6 +43,7 @@ pub trait TransactionProver { /// /// Local Transaction Prover implements the [TransactionProver] trait. pub struct LocalTransactionProver { + prover: Prover, mast_store: Arc, proof_options: ProvingOptions, } @@ -51,6 +52,7 @@ impl LocalTransactionProver { /// Creates a new [LocalTransactionProver] instance. pub fn new(proof_options: ProvingOptions) -> Self { Self { + prover: Prover::new(), mast_store: Arc::new(TransactionMastStore::new()), proof_options, } @@ -68,6 +70,7 @@ impl LocalTransactionProver { impl Default for LocalTransactionProver { fn default() -> Self { Self { + prover: Prover::new(), mast_store: Arc::new(TransactionMastStore::new()), proof_options: Default::default(), } @@ -78,7 +81,7 @@ impl Default for LocalTransactionProver { impl TransactionProver for LocalTransactionProver { #[maybe_async] fn prove( - &self, + &mut self, tx_witness: TransactionWitness, ) -> Result { let TransactionWitness { @@ -114,8 +117,7 @@ impl TransactionProver for LocalTransactionProver { ) .map_err(TransactionProverError::TransactionHostCreationFailed)?; - let mut prover = Prover::new(); - let (stack_outputs, proof) = maybe_await!(prover.prove( + let (stack_outputs, proof) = maybe_await!(self.prover.prove( &TransactionKernel::main(), stack_inputs, &mut host, diff --git a/crates/miden-tx/src/tests/mod.rs b/crates/miden-tx/src/tests/mod.rs index 09ba08157..f6fc900f5 100644 --- a/crates/miden-tx/src/tests/mod.rs +++ b/crates/miden-tx/src/tests/mod.rs @@ -821,7 +821,7 @@ fn prove_witness_and_verify() { let executed_transaction_id = executed_transaction.id(); let proof_options = ProvingOptions::default(); - let prover = LocalTransactionProver::new(proof_options); + let mut prover = LocalTransactionProver::new(proof_options); let proven_transaction = prover.prove(executed_transaction.into()).unwrap(); assert_eq!(proven_transaction.id(), executed_transaction_id); diff --git a/crates/miden-tx/tests/integration/main.rs b/crates/miden-tx/tests/integration/main.rs index 9842315a6..3b649b626 100644 --- a/crates/miden-tx/tests/integration/main.rs +++ b/crates/miden-tx/tests/integration/main.rs @@ -49,7 +49,7 @@ pub fn prove_and_verify_transaction( // Prove the transaction let proof_options = ProvingOptions::default(); - let prover = LocalTransactionProver::new(proof_options); + let mut prover = LocalTransactionProver::new(proof_options); let proven_transaction = prover.prove(executed_transaction.into()).unwrap(); assert_eq!(proven_transaction.id(), executed_transaction_id);