use crate::blocking::{
cpu::builder::CpuProverBuilder, env::EnvProver, light::builder::LightProverBuilder,
mock::builder::MockProverBuilder,
};
use sp1_core_machine::riscv::RiscvAir;
use sp1_hypercube::Machine;
use sp1_primitives::SP1Field;
#[cfg(feature = "cuda")]
use crate::blocking::cuda::builder::CudaProverBuilder;
#[cfg(feature = "network")]
use crate::blocking::network::builder::NetworkProverBuilder;
#[cfg(feature = "network")]
use crate::network::NetworkMode;
pub struct ProverClient;
impl ProverClient {
#[must_use]
pub fn from_env() -> EnvProver {
EnvProver::new()
}
#[must_use]
pub fn from_env_with_machine(machine: Machine<SP1Field, RiscvAir<SP1Field>>) -> EnvProver {
EnvProver::new_with_machine(machine)
}
#[must_use]
pub fn builder() -> ProverClientBuilder {
Self::builder_with_machine(RiscvAir::machine())
}
#[must_use]
pub fn builder_with_machine(
machine: Machine<SP1Field, RiscvAir<SP1Field>>,
) -> ProverClientBuilder {
ProverClientBuilder { machine }
}
}
pub struct ProverClientBuilder {
machine: Machine<SP1Field, RiscvAir<SP1Field>>,
}
impl ProverClientBuilder {
#[must_use]
#[allow(clippy::unused_self)]
pub fn cpu(&self) -> CpuProverBuilder {
CpuProverBuilder::new_with_machine(self.machine.clone())
}
#[cfg(feature = "cuda")]
#[must_use]
#[allow(clippy::unused_self)]
pub fn cuda(&self) -> CudaProverBuilder {
CudaProverBuilder::new_with_machine(self.machine.clone())
}
#[must_use]
#[allow(clippy::unused_self)]
pub fn mock(&self) -> MockProverBuilder {
MockProverBuilder::new_with_machine(self.machine.clone())
}
#[must_use]
#[allow(clippy::unused_self)]
pub fn light(&self) -> LightProverBuilder {
LightProverBuilder::new_with_machine(self.machine.clone())
}
#[cfg(feature = "network")]
#[must_use]
#[allow(clippy::unused_self)]
pub fn network(&self) -> NetworkProverBuilder {
NetworkProverBuilder::new_with_machine(self.machine.clone())
}
#[cfg(feature = "network")]
#[must_use]
#[allow(clippy::unused_self)]
pub fn network_for(&self, mode: NetworkMode) -> NetworkProverBuilder {
NetworkProverBuilder {
private_key: None,
signer: None,
rpc_url: None,
tee_signers: None,
network_mode: Some(mode),
machine: self.machine.clone(),
}
}
}