Skip to main content

miden_client/transaction/
prover.rs

1use alloc::boxed::Box;
2
3use miden_protocol::transaction::{ProvenTransaction, TransactionInputs};
4use miden_tx::{LocalTransactionProver, TransactionProverError};
5
6#[cfg(feature = "tonic")]
7use crate::remote_prover::RemoteTransactionProver;
8
9#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
10#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
11pub trait TransactionProver {
12    async fn prove(
13        &self,
14        tx_result: TransactionInputs,
15    ) -> Result<ProvenTransaction, TransactionProverError>;
16}
17
18#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
19#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
20impl TransactionProver for LocalTransactionProver {
21    async fn prove(
22        &self,
23        witness: TransactionInputs,
24    ) -> Result<ProvenTransaction, TransactionProverError> {
25        LocalTransactionProver::prove(self, witness)
26    }
27}
28
29#[cfg(feature = "tonic")]
30#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
31#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
32impl TransactionProver for RemoteTransactionProver {
33    async fn prove(
34        &self,
35        witness: TransactionInputs,
36    ) -> Result<ProvenTransaction, TransactionProverError> {
37        self.prove(&witness).await
38    }
39}