Skip to main content

sp1_sdk/blocking/cpu/
builder.rs

1//! # CPU Prover Builder
2//!
3//! This module provides a builder for the [`CpuProver`].
4
5use super::CpuProver;
6use sp1_core_executor::SP1CoreOpts;
7use sp1_core_machine::riscv::RiscvAir;
8use sp1_hypercube::Machine;
9use sp1_primitives::SP1Field;
10
11/// A builder for the [`CpuProver`].
12///
13/// The builder is used to configure the [`CpuProver`] before it is built.
14pub struct CpuProverBuilder {
15    /// Optional core options to configure the prover.
16    core_opts: Option<SP1CoreOpts>,
17    machine: Machine<SP1Field, RiscvAir<SP1Field>>,
18}
19
20impl Default for CpuProverBuilder {
21    fn default() -> Self {
22        Self::new()
23    }
24}
25
26impl CpuProverBuilder {
27    /// Creates a new [`CpuProverBuilder`] with default settings.
28    #[must_use]
29    pub fn new() -> Self {
30        Self::new_with_machine(RiscvAir::machine())
31    }
32
33    /// Creates a new [`CpuProverBuilder`] with a given machine.
34    #[must_use]
35    pub const fn new_with_machine(machine: Machine<SP1Field, RiscvAir<SP1Field>>) -> Self {
36        Self { core_opts: None, machine }
37    }
38
39    /// Sets the core options for the prover.
40    ///
41    /// # Example
42    /// ```rust,no_run
43    /// use sp1_core_executor::SP1CoreOpts;
44    /// use sp1_sdk::ProverClient;
45    ///
46    /// let mut opts = SP1CoreOpts::default();
47    /// opts.shard_size = 500_000;
48    /// let prover = ProverClient::builder().cpu().core_opts(opts).build();
49    /// ```
50    #[must_use]
51    pub fn core_opts(mut self, opts: SP1CoreOpts) -> Self {
52        self.core_opts = Some(opts);
53        self
54    }
55
56    /// Sets the core options for the prover (alias for `core_opts`).
57    ///
58    /// # Example
59    /// ```rust,no_run
60    /// use sp1_core_executor::SP1CoreOpts;
61    /// use sp1_sdk::ProverClient;
62    ///
63    /// let mut opts = SP1CoreOpts::default();
64    /// opts.shard_size = 500_000;
65    /// let prover = ProverClient::builder().cpu().with_opts(opts).build();
66    /// ```
67    #[must_use]
68    pub fn with_opts(self, opts: SP1CoreOpts) -> Self {
69        self.core_opts(opts)
70    }
71
72    /// Builds a [`CpuProver`].
73    ///
74    /// # Details
75    /// This method will build a [`CpuProver`] with the given parameters. In particular, it will
76    /// build a mock prover if the `mock` flag is set.
77    ///
78    /// # Example
79    /// ```rust,no_run
80    /// use sp1_sdk::ProverClient;
81    ///
82    /// let prover = ProverClient::builder().cpu().build();
83    /// ```
84    #[must_use]
85    pub fn build(self) -> CpuProver {
86        CpuProver::new_with_opts_and_machine(self.core_opts, self.machine)
87    }
88}