pub mod builder;
pub mod prove;
use crate::{
prover::{BaseProveRequest, Prover, SendFutureResult},
ProvingKey,
};
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},
SP1VerifyingKey,
};
#[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) -> impl SendFutureResult<Self::ProvingKey, Self::Error> {
self.prover.setup(elf)
}
fn prove<'a>(&'a self, pk: &'a Self::ProvingKey, stdin: SP1Stdin) -> Self::ProveRequest<'a> {
CudaProveRequest { base: BaseProveRequest::new(self, pk, stdin) }
}
}
impl ProvingKey for CudaProvingKey {
fn elf(&self) -> &Elf {
self.elf()
}
fn verifying_key(&self) -> &SP1VerifyingKey {
self.verifying_key()
}
}