pub mod builder;
pub mod prove;
use crate::blocking::{prover::BaseProveRequest, Prover};
use prove::CudaProveRequest;
use sp1_core_machine::io::SP1Stdin;
use sp1_cuda::{CudaClientError, CudaProver as CudaProverImpl, CudaProvingKey};
use sp1_primitives::Elf;
use sp1_prover::worker::{SP1LightNode, SP1NodeCore};
#[derive(Clone)]
pub struct CudaProver {
pub(crate) node: SP1LightNode,
pub(crate) prover: CudaProverImpl,
}
impl Prover for CudaProver {
type ProvingKey = CudaProvingKey;
type Error = CudaClientError;
type ProveRequest<'a> = CudaProveRequest<'a>;
fn inner(&self) -> &SP1NodeCore {
self.node.inner()
}
fn setup(&self, elf: Elf) -> Result<Self::ProvingKey, Self::Error> {
let machine = self.node.inner().machine().clone();
crate::blocking::block_on(self.prover.setup_with_machine(elf, machine))
}
fn prove<'a>(&'a self, pk: &'a Self::ProvingKey, stdin: SP1Stdin) -> Self::ProveRequest<'a> {
CudaProveRequest { base: BaseProveRequest::new(self, pk, stdin) }
}
}