diff --git a/crates/prover/src/core/fri.rs b/crates/prover/src/core/fri.rs index 263b8c89e..30ad38aac 100644 --- a/crates/prover/src/core/fri.rs +++ b/crates/prover/src/core/fri.rs @@ -33,7 +33,7 @@ use crate::core::vcs::verifier::{MerkleVerificationError, MerkleVerifier}; /// FRI proof config // TODO(andrew): Support different step sizes. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct FriConfig { pub log_blowup_factor: u32, pub log_last_layer_degree_bound: u32, diff --git a/crates/prover/src/core/pcs/mod.rs b/crates/prover/src/core/pcs/mod.rs index 1a551d1eb..4d48f139b 100644 --- a/crates/prover/src/core/pcs/mod.rs +++ b/crates/prover/src/core/pcs/mod.rs @@ -12,13 +12,14 @@ pub mod quotients; mod utils; mod verifier; +use serde::{Deserialize, Serialize}; + pub use self::prover::{ CommitmentSchemeProof, CommitmentSchemeProver, CommitmentTreeProver, TreeBuilder, }; pub use self::utils::TreeVec; pub use self::verifier::CommitmentSchemeVerifier; use super::fri::FriConfig; - #[derive(Copy, Debug, Clone, PartialEq, Eq)] pub struct TreeSubspan { pub tree_index: usize, @@ -26,7 +27,7 @@ pub struct TreeSubspan { pub col_end: usize, } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct PcsConfig { pub pow_bits: u32, pub fri_config: FriConfig, diff --git a/crates/prover/src/core/pcs/prover.rs b/crates/prover/src/core/pcs/prover.rs index d60c82bb1..341b2abf1 100644 --- a/crates/prover/src/core/pcs/prover.rs +++ b/crates/prover/src/core/pcs/prover.rs @@ -143,6 +143,7 @@ impl<'a, B: BackendForChannel, MC: MerkleChannel> CommitmentSchemeProver<'a, queried_values, proof_of_work, fri_proof, + config: self.config, } } } @@ -155,6 +156,7 @@ pub struct CommitmentSchemeProof { pub queried_values: TreeVec>, pub proof_of_work: u64, pub fri_proof: FriProof, + pub config: PcsConfig, } pub struct TreeBuilder<'a, 'b, B: BackendForChannel, MC: MerkleChannel> { diff --git a/crates/prover/src/core/prover/mod.rs b/crates/prover/src/core/prover/mod.rs index 8a04432b1..6adc25974 100644 --- a/crates/prover/src/core/prover/mod.rs +++ b/crates/prover/src/core/prover/mod.rs @@ -198,6 +198,7 @@ impl StarkProof { queried_values, proof_of_work: _, fri_proof, + config: _, } = commitment_scheme_proof; let FriProof { @@ -326,6 +327,7 @@ impl SizeEstimate for CommitmentSchemeProof { queried_values, proof_of_work, fri_proof, + config, } = self; commitments.size_estimate() + sampled_values.size_estimate() @@ -333,6 +335,7 @@ impl SizeEstimate for CommitmentSchemeProof { + queried_values.size_estimate() + mem::size_of_val(proof_of_work) + fri_proof.size_estimate() + + mem::size_of_val(config) } } diff --git a/crates/prover/src/examples/blake/air.rs b/crates/prover/src/examples/blake/air.rs index e9bf18577..179c84665 100644 --- a/crates/prover/src/examples/blake/air.rs +++ b/crates/prover/src/examples/blake/air.rs @@ -508,10 +508,9 @@ pub fn verify_blake( stmt1, stark_proof, }: BlakeProof, - config: PcsConfig, ) -> Result<(), VerificationError> { let channel = &mut MC::C::default(); - let commitment_scheme = &mut CommitmentSchemeVerifier::::new(config); + let commitment_scheme = &mut CommitmentSchemeVerifier::::new(stark_proof.config); let log_sizes = stmt0.log_sizes(); @@ -579,6 +578,6 @@ mod tests { let proof = prove_blake::(log_n_instances, config); // Verify. - verify_blake::(proof, config).unwrap(); + verify_blake::(proof).unwrap(); } } diff --git a/crates/prover/src/examples/poseidon/mod.rs b/crates/prover/src/examples/poseidon/mod.rs index 98bfc2794..49f554f8f 100644 --- a/crates/prover/src/examples/poseidon/mod.rs +++ b/crates/prover/src/examples/poseidon/mod.rs @@ -506,7 +506,8 @@ mod tests { // Verify. // TODO: Create Air instance independently. let channel = &mut Blake2sChannel::default(); - let commitment_scheme = &mut CommitmentSchemeVerifier::::new(config); + let commitment_scheme = + &mut CommitmentSchemeVerifier::::new(proof.config); // Decommit. // Retrieve the expected column sizes in each commitment interaction, from the AIR. diff --git a/crates/prover/src/examples/state_machine/mod.rs b/crates/prover/src/examples/state_machine/mod.rs index e437bceb1..4f6033cb5 100644 --- a/crates/prover/src/examples/state_machine/mod.rs +++ b/crates/prover/src/examples/state_machine/mod.rs @@ -139,12 +139,12 @@ pub fn prove_state_machine( } pub fn verify_state_machine( - config: PcsConfig, channel: &mut Blake2sChannel, components: StateMachineComponents, proof: StateMachineProof, ) -> Result<(), VerificationError> { - let commitment_scheme = &mut CommitmentSchemeVerifier::::new(config); + let commitment_scheme = + &mut CommitmentSchemeVerifier::::new(proof.stark_proof.config); // Decommit. // Retrieve the expected column sizes in each commitment interaction, from the AIR. let sizes = proof.stmt0.log_sizes(); @@ -308,7 +308,7 @@ mod tests { let (components, proof, _) = prove_state_machine(log_n_rows, initial_state, config, prover_channel, false); - verify_state_machine(config, verifier_channel, components, proof).unwrap(); + verify_state_machine(verifier_channel, components, proof).unwrap(); } #[test] diff --git a/crates/prover/src/examples/wide_fibonacci/mod.rs b/crates/prover/src/examples/wide_fibonacci/mod.rs index 0267a67af..a718f9ba7 100644 --- a/crates/prover/src/examples/wide_fibonacci/mod.rs +++ b/crates/prover/src/examples/wide_fibonacci/mod.rs @@ -273,7 +273,7 @@ mod tests { // Verify. let verifier_channel = &mut Poseidon252Channel::default(); let commitment_scheme = - &mut CommitmentSchemeVerifier::::new(config); + &mut CommitmentSchemeVerifier::::new(proof.config); // Retrieve the expected column sizes in each commitment interaction, from the AIR. let sizes = component.trace_log_degree_bounds(); diff --git a/crates/prover/src/examples/xor/gkr_lookups/mle_eval.rs b/crates/prover/src/examples/xor/gkr_lookups/mle_eval.rs index 77c70ea00..bde4097a2 100644 --- a/crates/prover/src/examples/xor/gkr_lookups/mle_eval.rs +++ b/crates/prover/src/examples/xor/gkr_lookups/mle_eval.rs @@ -834,7 +834,8 @@ mod tests { let log_sizes = components.column_log_sizes(); let channel = &mut Blake2sChannel::default(); - let commitment_scheme = &mut CommitmentSchemeVerifier::::new(config); + let commitment_scheme = + &mut CommitmentSchemeVerifier::::new(proof.config); commitment_scheme.commit(proof.commitments[0], &[], channel); commitment_scheme.commit(proof.commitments[1], &log_sizes[1], channel); commitment_scheme.commit(proof.commitments[2], &log_sizes[2], channel); @@ -924,7 +925,8 @@ mod tests { let log_sizes = components.column_log_sizes(); let channel = &mut Blake2sChannel::default(); - let commitment_scheme = &mut CommitmentSchemeVerifier::::new(config); + let commitment_scheme = + &mut CommitmentSchemeVerifier::::new(proof.config); commitment_scheme.commit(proof.commitments[0], &[], channel); commitment_scheme.commit(proof.commitments[1], &log_sizes[1], channel); commitment_scheme.commit(proof.commitments[2], &log_sizes[2], channel);