pub mod api;
pub mod client;
pub mod pk;
mod server;
mod error;
pub use error::CudaClientError;
pub use pk::CudaProvingKey;
use sp1_core_executor::SP1Context;
use sp1_core_machine::io::SP1Stdin;
use sp1_core_machine::riscv::RiscvAir;
use sp1_hypercube::Machine;
use sp1_primitives::{Elf, SP1Field};
use sp1_prover::worker::ProofFromNetwork;
use sp1_prover_types::network_base_types::ProofMode;
use crate::client::CudaClient;
#[derive(Clone)]
pub struct CudaProver {
client: CudaClient,
}
impl CudaProver {
pub async fn new() -> Result<Self, CudaClientError> {
Ok(Self { client: CudaClient::connect(0).await? })
}
pub async fn new_with_id(cuda_id: u32) -> Result<Self, CudaClientError> {
Ok(Self { client: CudaClient::connect(cuda_id).await? })
}
pub async fn setup(&self, elf: Elf) -> Result<CudaProvingKey, CudaClientError> {
self.setup_with_machine(elf, RiscvAir::machine()).await
}
pub async fn setup_with_machine(
&self,
elf: Elf,
machine: Machine<SP1Field, RiscvAir<SP1Field>>,
) -> Result<CudaProvingKey, CudaClientError> {
self.client.setup(elf, machine).await
}
pub async fn prove_with_mode(
&self,
pk: &CudaProvingKey,
stdin: SP1Stdin,
context: SP1Context<'static>,
mode: ProofMode,
) -> Result<ProofFromNetwork, CudaClientError> {
self.client.prove_with_mode(pk, stdin, context, mode).await
}
}