Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions book/src/circuit_building.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,13 @@ runner.set_public_inputs(&[expected_fib])?;

// Instantiate prover instance
let config = build_standard_config_koalabear();
let multi_prover = MultiTableProver::new(config);
let prover = BatchStarkProver::new(config);

// Generate traces
let traces = runner.run()?;

// Prove the program
let proof = multi_prover.prove_all_tables(&traces)?;
let proof = prover.prove_all_tables(&traces)?;
```

## Key takeaways
Expand Down
4 changes: 0 additions & 4 deletions circuit-prover/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,3 @@ parallel = ["p3-maybe-rayon/parallel"]
[[example]]
name = "fibonacci"
path = "examples/fibonacci.rs"

[[example]]
name = "mmcs_verify"
path = "examples/mmcs_verify.rs"
13 changes: 7 additions & 6 deletions circuit-prover/examples/fibonacci.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::env;
use std::error::Error;

/// Fibonacci circuit: Compute F(n) and prove correctness
/// Public input: expected_result (F(n))
use p3_baby_bear::BabyBear;
use p3_circuit::CircuitBuilder;
use p3_circuit_prover::prover::ProverError;
use p3_circuit_prover::{MultiTableProver, TablePacking, config};
use p3_circuit_prover::{BatchStarkProver, TablePacking, config};
use p3_field::PrimeCharacteristicRing;
use tracing_forest::ForestLayer;
use tracing_forest::util::LevelFilter;
Expand All @@ -26,7 +26,7 @@ fn init_logger() {
.init();
}

fn main() -> Result<(), ProverError> {
fn main() -> Result<(), Box<dyn Error>> {
init_logger();

let n = env::args()
Expand Down Expand Up @@ -64,9 +64,10 @@ fn main() -> Result<(), ProverError> {
let traces = runner.run()?;
let config = config::baby_bear().build();
let table_packing = TablePacking::from_counts(4, 1);
let multi_prover = MultiTableProver::new(config).with_table_packing(table_packing);
let proof = multi_prover.prove_all_tables(&traces)?;
multi_prover.verify_all_tables(&proof)
let prover = BatchStarkProver::new(config).with_table_packing(table_packing);
let proof = prover.prove_all_tables(&traces)?;
prover.verify_all_tables(&proof)?;
Ok(())
}

fn compute_fibonacci_classical(n: usize) -> F {
Expand Down
152 changes: 0 additions & 152 deletions circuit-prover/examples/mmcs_verify.rs

This file was deleted.

35 changes: 34 additions & 1 deletion circuit-prover/src/batch_stark_prover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,40 @@ use tracing::instrument;
use crate::air::{AddAir, ConstAir, MulAir, PublicAir, WitnessAir};
use crate::config::StarkField;
use crate::field_params::ExtractBinomialW;
use crate::prover::TablePacking;

// Packing configuration for Add/Mul tables.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
Comment on lines +20 to +21
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could we keep the old description before the move to clarify a bit its meaning? TablePacking may be a bit opaque to newcomers otherwise without diving in the code

pub struct TablePacking {
add_lanes: usize,
mul_lanes: usize,
}

impl TablePacking {
pub fn new(add_lanes: usize, mul_lanes: usize) -> Self {
Self {
add_lanes: add_lanes.max(1),
mul_lanes: mul_lanes.max(1),
}
}

pub fn from_counts(add_lanes: usize, mul_lanes: usize) -> Self {
Self::new(add_lanes, mul_lanes)
}
Comment on lines +35 to +37
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this method since it seems to be a duplicate of the new method?


pub const fn add_lanes(self) -> usize {
self.add_lanes
}

pub const fn mul_lanes(self) -> usize {
self.mul_lanes
}
}

impl Default for TablePacking {
fn default() -> Self {
Self::new(1, 1)
}
}

#[repr(usize)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
Expand Down
6 changes: 3 additions & 3 deletions circuit-prover/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ where
///
/// ```ignore
/// let config = config::baby_bear().build();
/// let prover = MultiTableProver::new(config);
/// let prover = BatchStarkProver::new(config);
/// ```
#[inline]
pub fn baby_bear()
Expand Down Expand Up @@ -228,7 +228,7 @@ pub fn baby_bear_compression() -> impl PseudoCompressionFunction<[BabyBear; 8],
///
/// ```ignore
/// let config = config::koala_bear().build();
/// let prover = MultiTableProver::new(config);
/// let prover = BatchStarkProver::new(config);
/// ```
#[inline]
pub fn koala_bear()
Expand Down Expand Up @@ -263,7 +263,7 @@ pub fn koala_bear_compression() -> impl PseudoCompressionFunction<[KoalaBear; 8]
///
/// ```ignore
/// let config = config::goldilocks().build();
/// let prover = MultiTableProver::new(config);
/// let prover = BatchStarkProver::new(config);
/// ```
#[inline]
pub fn goldilocks()
Expand Down
10 changes: 4 additions & 6 deletions circuit-prover/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
//! - `CD`: FRI challenge field degree, independent of `D`.
//!
//! - Build a field-specific config via `config::{babybear_config, koalabear_config, goldilocks_config}`.
//! - Create a `MultiTableProver` from that config.
//! - Create a `BatchStarkProver` from that config.
//! - Generate traces from a `p3_circuit::Circuit` runner and prove/verify.
//!
//! Example (BabyBear):
Expand All @@ -17,7 +17,7 @@
//! use p3_baby_bear::BabyBear;
//! use p3_circuit::builder::CircuitBuilder;
//! use p3_circuit_prover::config::babybear_config::build_standard_config_babybear;
//! use p3_circuit_prover::MultiTableProver;
//! use p3_circuit_prover::BatchStarkProver;
//!
//! let mut builder = CircuitBuilder::<BabyBear>::new();
//! let x = builder.add_public_input();
Expand All @@ -29,7 +29,7 @@
//! runner.set_public_inputs(&[BabyBear::from_u64(1), BabyBear::from_u64(2)]).unwrap();
//! let traces = runner.run().unwrap();
//! let cfg = build_standard_config_babybear();
//! let prover = MultiTableProver::new(cfg);
//! let prover = BatchStarkProver::new(cfg);
//! let proof = prover.prove_all_tables(&traces).unwrap();
//! prover.verify_all_tables(&proof).unwrap();
//! ```
Expand All @@ -41,8 +41,6 @@ pub mod air;
pub mod batch_stark_prover;
pub mod config;
pub mod field_params;
pub mod prover;

// Re-export main API
pub use batch_stark_prover::{BatchStarkProof, BatchStarkProver};
pub use prover::{MultiTableProof, MultiTableProver, TablePacking};
pub use batch_stark_prover::{BatchStarkProof, BatchStarkProver, TablePacking};
Loading
Loading