use sp1_core_machine::riscv::RiscvAir;
use sp1_hypercube::Machine;
use sp1_primitives::SP1Field;
use crate::{
cpu::builder::CpuProverBuilder, env::EnvProver, light::builder::LightProverBuilder,
mock::builder::MockProverBuilder,
};
#[cfg(feature = "cuda")]
use crate::cuda::builder::CudaProverBuilder;
#[cfg(feature = "network")]
use crate::network::{builder::NetworkProverBuilder, NetworkMode};
pub struct ProverClient;
impl ProverClient {
#[must_use]
pub async fn from_env() -> EnvProver {
Self::from_env_with_machine(RiscvAir::machine()).await
}
#[must_use]
pub async fn from_env_with_machine(
machine: Machine<SP1Field, RiscvAir<SP1Field>>,
) -> EnvProver {
EnvProver::new_with_machine(machine).await
}
#[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::new(machine)
}
}
pub struct ProverClientBuilder {
machine: Machine<SP1Field, RiscvAir<SP1Field>>,
}
impl ProverClientBuilder {
fn new(machine: Machine<SP1Field, RiscvAir<SP1Field>>) -> Self {
Self { machine }
}
#[must_use]
pub fn cpu(&self) -> CpuProverBuilder {
CpuProverBuilder::new_with_machine(self.machine.clone())
}
#[cfg(feature = "cuda")]
#[must_use]
pub fn cuda(&self) -> CudaProverBuilder {
CudaProverBuilder::new_with_machine(self.machine.clone())
}
#[must_use]
pub fn mock(&self) -> MockProverBuilder {
MockProverBuilder::new_with_machine(self.machine.clone())
}
#[must_use]
pub fn light(&self) -> LightProverBuilder {
LightProverBuilder::new_with_machine(self.machine.clone())
}
#[cfg(feature = "network")]
#[must_use]
pub fn network(&self) -> NetworkProverBuilder {
NetworkProverBuilder::new_with_machine(self.machine.clone())
}
#[cfg(feature = "network")]
#[must_use]
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(),
}
}
}