sp1_sdk/blocking/prover/
mod.rs1use std::fmt;
6
7use crate::{prover::verify_proof, ProvingKey, SP1VerificationError, StatusCode};
8use anyhow::Result;
9use sp1_core_machine::io::SP1Stdin;
10use sp1_primitives::types::Elf;
11use sp1_prover::{worker::SP1NodeCore, SP1VerifyingKey, SP1_CIRCUIT_VERSION};
12
13mod execute;
15
16mod prove;
18
19pub use execute::ExecuteRequest;
20pub(crate) use prove::BaseProveRequest;
21pub use prove::ProveRequest;
22
23use crate::SP1ProofWithPublicValues;
24
25pub trait Prover: Clone + Send + Sync {
27 type ProvingKey: ProvingKey;
29
30 type Error: fmt::Debug + fmt::Display;
32
33 type ProveRequest<'a>: ProveRequest<'a, Self>
35 where
36 Self: 'a;
37
38 fn inner(&self) -> &SP1NodeCore;
40
41 fn version(&self) -> &str {
43 SP1_CIRCUIT_VERSION
44 }
45
46 fn setup(&self, elf: Elf) -> Result<Self::ProvingKey, Self::Error>;
48
49 fn prove<'a>(&'a self, pk: &'a Self::ProvingKey, stdin: SP1Stdin) -> Self::ProveRequest<'a>;
51
52 fn execute(&self, elf: Elf, stdin: SP1Stdin) -> ExecuteRequest<'_, Self> {
54 ExecuteRequest::new(self, elf, stdin)
55 }
56
57 fn verify(
61 &self,
62 proof: &SP1ProofWithPublicValues,
63 vkey: &SP1VerifyingKey,
64 status_code: Option<StatusCode>,
65 ) -> Result<(), SP1VerificationError> {
66 verify_proof(self.inner(), self.version(), proof, vkey, status_code)
67 }
68}